web-dev-qa-db-ja.com

マップされたネットワークドライブが存在するかどうかのバッチチェック

私は現在、ネットワークドライブを文字Zにマップするスクリプトを書いています。コマンドNet Use z: \\pathを使用しています。ユーザーが既にこの文字を使用している場合、それをマップすることができます、このドライブの存在をチェックする方法はありますか(z)、それがアンマウントして別の文字にマウントし、まだ必要なzドライブを使用するために存在する場合私のスクリプト、これはインストールの一部であり、Zドライブにあるはずです。

19
user3502786

ドライブがマウントされているかどうかを確認するには、IF EXIST Z:\。これは動作するはずです:

if exist z:\ (
    Net Use z: /delete
)
Net Use z: \\path
33
MichaelS

別の可能な方法は次のとおりです。

Net Use Z:
if %errorlevel% EQU 0 Net Use Z: /delete
Net Use Z: \\path
4
sactiw

次のスクリプトビットを使用して、すべてのドライブのマッピングを解除します。

:: 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は、選択したマッピングのドライブマッピングを削除します

3
MMusterd

バッチでは、次のようなコードを記述できます。

@echo off
Net Use V: >nul 2>&1
if %errorlevel% equ 0 goto unmap

存在する場合V:\はWindows 10では動作しません、またNet Useは追加情報を表示しますが、>nul 2>&1

0
TarmoPikaro

元の質問に答えるには、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
0
jaylweb