web-dev-qa-db-ja.com

.batで新しいマップされたドライブのドライブ文字を抽出するにはどうすればよいですか?

Robocopyを使用して「重要な」ものをNASボックスにミラーリングするための簡単なコマンドラインバックアップスクリプトを作成しています。ハードコードされたマップされたドライブ文字に依存したくないです。 NASボックス。スクリプトで、一時的なドライブ文字をマップし、関連するファイルをコピーして、マップされたドライブを破棄したいと思います。そのドライブ文字が次の場合は想定したくありません。ドライブをマップするときにドライブ文字が使用可能であると「想定」したくないので、先頭の「*」も表示されます。

 Net Use * \\ nasbox\sharename password/user:username /persistent:no

後続のコマンドで使用するためにそのドライブ文字を抽出するための.batスクリプト内の適切な方法は何ですか? 「for」のトークン解析のいくつかの変形をつなぎ合わせることができると思っていましたが、難解なfor構文よりも簡単な方法があるはずだと思います。

 C:\> Net Use * \\ nasbox\sharename password/user:username /persistent:no
ドライブZ:が\\ nasbox\sharenameに接続されました。
 
コマンドは正常に完了しました。
 
 
 C:\> 

マップされたドライブ文字を取得したら、次の行に沿ってコマンドをフォローアップしたいと思います。

 robocopy C:\ path\to\important\stuff%NewDrive%\ path\to\backup/MIR/Z 
5
JMD

コマンドpushdおよびpopdを使用します。

pushd \\server\shareは一時的なドライブを作成し(Z:から始まり、使用可能な文字が見つかるまで逆方向に進みます)、そのドライブに入ります。完了すると、popdによって一時ドライブが削除され、元の場所に戻ります。

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.
6
Snark

そして、後世のために、これがすべてがどのように機能するかについての大まかなテンプレートです。 @Snarkと@Nealに改めて感謝します。

これが、pushd/popdを使用した元のテンプレートです。

 @ echo off 
 
 :: NAS share。
 Net Use \\ nasbox\sharename password/user:username /persistent:no
 ::動作したことを確認してください。 pushdを使用して、共有のドライブ文字を指定します。
 pushd \\ nasbox\sharename 
 
 ::バックアップするファイルをコピーします。すすぎ、繰り返します。
 robocopy C:\ path\to\important\stuff。\ path\to\backups/MIR/Z 
 
 ::一時的なドライブレターを解放します。
 popd 
 
 ::オプションで、共有が使用されていないときに資格情報を取り消します。
 Net Use \\ nasbox\sharename/delete 

@Nealのコメントからの私の啓示により、ここではpushd/popdの特定のアプリケーションは不要であり、robocopyコマンドの形式は次のように変更されるだけであることに注意してください。

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

これに投票する必要はありません。後でこれを見つけた他の人のためのパン粉としてここに置きたかっただけです。

1
JMD

このバッチスクリプトを試してください:

@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
0
John Stevens