I need to map a network drive with a batch file, but don't want to specify the drive letter.
The batch file is used as part of a deployment process; I call the batch file from CruiseControl.Net
, the batch file needs to map a UNC path which requires credentials to authenticate. Then the batch file calls RoboCopy
to deploy the website from the output directory to the destination (and excludes some files and folders). Finally the batch deletes the network drive.
The problem is that this isn't scalable, it's fine when there are only a few projects but we've now got 20 projects using this approach and are running out of drive letters to map. I don't want to re-use drive letters as they could collide - which would be bad.
This is an example of the batch file:
@echo off
net use x: \\192.168.0.1\Share\wwwroot\MyProject /user:mydomain\myuser MyP455w0rd
robocopy.exe "W:\wwwroot\MyProject" x:\ *.* /E /XO /XD "App_Data/Search" "*.svn" /XF "sitefinity.log" "Thumbs.db" /NDL /NC /NP
net use x: /delete
and formatted for readability:
@echo off
net use x: \\192.168.0.1\Share\wwwroot\MyProject
/user:mydomain\myuser MyP455w0rd
robocopy.exe "W:\wwwroot\MyProject" x:\ *.* /E /XO /XD
"App_Data/Search" "*.svn" /XF "sitefinity.log" "Thumbs.db" /NDL /NC /NP
net use x: /delete
I can do this by opening my computer, right click and select "Add a network location" and then select the share. This will bring up a shared folder without a drive letter. This works great for what we need.
Right-click on the drive you want to change a letter for. Choose the “Change Drive Letter and Paths” option from the drop-down menu. Click “Change.” Windows will now ask you to assign a new name for your drive. You can choose from the remaining A-Z letters from the menu.
If you don't have multiple network shares connected simultaniously, you can make net use *
assign a free drive letter for you. Afterwards you can use robocopy
to access the share via its UNC path and release any connected share with net use * /delete
.
Something like this:
@echo off
net use * \\192.168.0.1\Share\wwwroot\MyProject /user:mydomain\myuser MyP455w0rd
robocopy.exe "W:\wwwroot\MyProject" "\\192.168.0.1\Share\wwwroot\MyProject" *.* /E /XO /XD "App_Data/Search" "*.svn" /XF "sitefinity.log" "Thumbs.db" /NDL /NC /NP
net use * /delete /yes
EDIT:
As I learned from some researches, you can simply map the share without assigning a drive letter. It is then mapped anonymously, only by its remote UNC path. This way you can also remove the mapping by specifiying only its remote name.
This should work:
@echo off
net use \\192.168.0.1\Share\wwwroot\MyProject /user:mydomain\myuser MyP455w0rd
robocopy.exe "W:\wwwroot\MyProject" "\\192.168.0.1\Share\wwwroot\MyProject" *.* /E /XO /XD "App_Data/Search" "*.svn" /XF "sitefinity.log" "Thumbs.db" /NDL /NC /NP
net use \\192.168.0.1\Share\wwwroot\MyProject /delete
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With