Home » Questions » Computers [ Ask a new question ]

How can I extract the drive letter for a new mapped drive in a .bat?

How can I extract the drive letter for a new mapped drive in a .bat?

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 '*'.

Asked by: Guest | Views: 411
Total answers/comments: 2
Guest [Entry]

"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."
Guest [Entry]

"Try this batch script:

@ECHO OFF

setlocal EnableDelayedExpansion
SET CYBID=
> message1.vbs ECHO WScript.Echo InputBox( ""Enter your Elevated Domain ID"", ""CyberArk ID"", ""USERID"" )
FOR /F ""tokens=*"" %%A IN ('CSCRIPT.EXE //NoLogo message1.vbs') DO (
SET CYBID=%%A
)

setlocal DisableDelayedExpansion
SET CYBPW=
> message2.vbs ECHO WScript.Echo InputBox( ""Enter your Password. The last password you used is displayed. If it is more than a day old, you will need a new value from CyberArk"", ""CyberArk Pw"", ""PASSWORD"" )
FOR /F ""tokens=*"" %%B IN ('CSCRIPT.EXE //NoLogo message2.vbs') DO (
SET ""CYBPW=%%B""
)

SET MPATH=
> message3.vbs ECHO WScript.Echo InputBox( ""Enter your \\server\share"", ""Enter Share"", ""\\"" )
FOR /F ""tokens=*"" %%C IN ('CSCRIPT.EXE //NoLogo message3.vbs') DO (
SET MPATH=%%C
)

setlocal EnableDelayedExpansion

net use * !MPATH! !CYBPW! /user:!CYBID! > OUTPUT.txt

FOR /F ""tokens=2 eol=T"" %%D IN (OUTPUT.txt) DO (
SET MDRIVE=%%D
)

explorer !MDRIVE!

:END
DEL message*.vbs
DEL OUTPUT.txt"