私は現在、ネットワークドライブを文字Z
にマップするスクリプトを書いています。コマンドNet Use z: \\path
を使用しています。ユーザーが既にこの文字を使用している場合、それをマップすることができます、このドライブの存在をチェックする方法はありますか(z)、それがアンマウントして別の文字にマウントし、まだ必要なz
ドライブを使用するために存在する場合私のスクリプト、これはインストールの一部であり、Zドライブにあるはずです。
ドライブがマウントされているかどうかを確認するには、IF EXIST Z:\
。これは動作するはずです:
if exist z:\ (
Net Use z: /delete
)
Net Use z: \\path
別の可能な方法は次のとおりです。
Net Use Z:
if %errorlevel% EQU 0 Net Use Z: /delete
Net Use Z: \\path
次のスクリプトビットを使用して、すべてのドライブのマッピングを解除します。
:: First unmap all network drives
FOR /F "tokens=1,2,3" %%G IN ('Net Use^| Find "\\"') DO (
ECHO.Unmapping %%I from drive letter %%H
Net Use %%H /D > NUL
)
それは何をするためのものか?これを分割しましょう
FOR/F "tokens = 1,2,3" %% G IN()DO()->は、()と最初、2番目、3番目のWord(空白が区切り文字として使用される)の間に定義されたセットを反復しますそれぞれ%% G、%% H、および%% Iとして使用可能になります。
( '...')はコマンドを実行し、結果をFORループに渡します
Net Useは次のようなものを出力します:
New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
OK M: \\diskstation\music Microsoft Windows Network
OK P: \\diskstation\home Microsoft Windows Network
OK V: \\diskstation\video Microsoft Windows Network
OK X: \\diskstation\photo Microsoft Windows Network
The command completed successfully.
この出力はFind.exe(grepに相当するウィンドウ)にパイプされ、「\\」を探します。
パイプ記号| ^を使用してエスケープされるため、cmdは直接実行しません。出力は次のようになります。
OK M: \\diskstation\music Microsoft Windows Network
OK P: \\diskstation\home Microsoft Windows Network
OK V: \\diskstation\video Microsoft Windows Network
OK X: \\diskstation\photo Microsoft Windows Network
Net Use/Dは、選択したマッピングのドライブマッピングを削除します
バッチでは、次のようなコードを記述できます。
@echo off
Net Use V: >nul 2>&1
if %errorlevel% equ 0 goto unmap
存在する場合V:\
はWindows 10では動作しません、またNet Use
は追加情報を表示しますが、>nul 2>&1
。
元の質問に答えるには、Zがすでにマップされているかどうかを確認し、それを別のドライブ文字(例:y :)に再マップしてから、zを新しいパスにマップします。
if exist z:\ (
for /F "tokens=1,2*" %%G in ('Net Use^|Find "\\"^|Find /I "z:"') do ( Net Use y: %%H )
Net Use z: /delete
)
Net Use z: \\path