Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I'm creating a simple command-line backup script to use robocopy to mirror "important" stuff to my NAS box. I would prefer not to rely on a hard-coded mapped drive letter for that NAS box. In the script I would like to map a temporary drive letter, copy the relevant files, and dispose of the mapped drive. I don't want to assume that if that drive letter is already mapped, that it's pointing to the place I expect. I also don't want to "assume" that some drive letter is available when I map the drive, thus the leading '*'.

    net use * \\nasbox\sharename password /user:username /persistent:no

What's the proper way within my .bat script to extract that drive letter for use in subsequent commands? I was thinking that I could piece together some variant of "for"'s token-parsing, but I also suspect there must be an easier way than esoteric for-syntax.

    C:\>net use * \\nasbox\sharename password /user:username /persistent:no
    Drive Z: is now connected to \\nasbox\sharename.

    The command completed successfully.


    C:\>

Once I have the mapped drive letter, I would like to follow up with commands along the lines of:

    robocopy C:\path\to\important\stuff %NewDrive%\path\to\backup /MIR /Z
share|improve this question
1  
Interesting question in the general case, and a good accepted answer, but wouldn't it be better tojust use the UNC name in the Robocopy command? robocopy C:\path\to\important\stuff \\nasbox\sharename\path\to\backup /MIR /Z –  Neal Oct 23 '09 at 1:24
    
Hmm, now that's an interesting proposition, and one I should have considered first. Since roboycopy supports UNC paths (just tested it), then yes, I'll switch to that form instead. Having said that, I suspect I'll continue to find use for the pushd/popd pattern, regardless. +1 –  JMD Oct 23 '09 at 14:51
add comment

2 Answers

up vote 5 down vote accepted

Use the commands pushd and popd.

pushd \\server\share will create a temporary drive (starting from Z: and going backwards till it finds an available letter) and go into it. When you're done, popd will delete the temporary drive and get you back where you were.

C:\Users\Snark>pushd /?
Stores the current directory for use by the POPD command, then
changes to the specified directory.

PUSHD [path | ..]

  path        Specifies the directory to make the current directory.

If Command Extensions are enabled the PUSHD command accepts
network paths in addition to the normal drive letter and path.
If a network path is specified, PUSHD will create a temporary
drive letter that points to that specified network resource and
then change the current drive and directory, using the newly
defined drive letter.  Temporary drive letters are allocated from
Z: on down, using the first unused drive letter found.

C:\Users\Snark>popd /?
Changes to the directory stored by the PUSHD command.

POPD


If Command Extensions are enabled the POPD command will delete
any temporary drive letter created by PUSHD when you POPD that
drive off the pushed directory stack.
share|improve this answer
    
That's brilliant, Snark. Thanks. –  JMD Oct 21 '09 at 21:09
add comment

And, for posterity, here's a rough template of how that all works out. Thanks again to @Snark, and @Neal.

Here's my original template, using pushd/popd.

    @echo off

    :: Supply credentials for the NAS share.
    net use \\nasbox\sharename password /user:username /persistent:no
    :: Make sure it worked.
    if ERRORLEVEL 1 echo NET USE returned %ERRORLEVEL% && goto :EOF

    :: Use pushd to supply a drive letter for the share.
    pushd \\nasbox\sharename

    :: Copy the files to be backed up. Rinse and repeat.
    robocopy C:\path\to\important\stuff .\path\to\backups /MIR /Z

    :: Release the temporary drive letter.
    popd

    :: Optionally, revoke the credentials while the share's not in use.
    net use \\nasbox\sharename /delete

Note, that with my revelation from @Neal's comment, my specific application of pushd/popd are unnecessary here, and the form of the robocopy command simply changes to:

    robocopy C:\path\to\important\stuff \\nasbox\sharename\path\to\backups /MIR /Z

No need to vote this up. Just wanted to have it here as a bread crumb for others who find this later.

share|improve this answer
    
+1 Because this worked for me - ta. –  Umber Ferrule Oct 23 '09 at 11:49
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.