0

新しいドライブをマップするためにスクリプトをプッシュしましたが、net useは使用R: /Deleteされなかったため、ドライブはまだ存在し、何百人ものユーザーが次に利用できる文字へのマッピングが正しくありません。間違ったマッピングをすべて削除する必要があり、特定のマッピングをスキャンしてドライブ文字をパイプするバッチスクリプトがあることを期待していました。

Set Path = \\Drive\Folder
Set DriveLetter = ?Scan all mapped drives for %Path%?
Net Use %DriveLetter% /Delete

ここで空欄を埋めようとしています。

4

2 に答える 2

2

独自の目的でPATH変数を使用しないでください。これは予約変数であり、意図された用途以外に使用すると、バッチセッションに大混乱をもたらす可能性があります。

これが機能するWMICを使用したソリューションです。バックスラッシュは、WMICに渡されるときに別のバックスラッシュでエスケープする必要があります。2番目のトークンのチェックは、FOR/FがWMICのユニコード出力をどのように処理するかのアーティファクトです。

@echo off
setlocal enableDelayedExpansion
set "remotePath=\\Drive\Folder"
for /f "usebackq skip=1 tokens=1,2" %%A in (
  `wmic netuse where "RemotePath='!remotePath:\=\\!'" get localName 2^>nul`
) do if "%%B" neq "" <nul net use %%A /delete >nul 2>&1 || net use %%A /delete

何が起こっているのかわかりませんが、マップされたドライブを削除する最初の試みは、次のメッセージで失敗します:「n:への接続で保留中の開いているファイルまたは不完全なディレクトリ検索があります。」。2回目の試行は成功します。

于 2012-11-08T20:30:44.727 に答える
1

net useドライブマッピング(接続されているかどうか)が表示されます

出力例:

新しい接続が記憶されます。


ステータスローカルリモートネットワーク

-------------------------------------------------- -----------------------------
切断されたQ:\\ Server1 \ Drive
                                                 MicrosoftWindowsネットワーク
OK S:\\ Server2 \ Drive2
                                                 MicrosoftWindowsネットワーク
コマンドは正常に完了しました。

この出力を見ると、2番目の列にドライブ文字が表示され、3番目の列にパスが表示されます。これをループに入れfor /fてパスを確認し、一致する場合は2番目の部分のドライブ文字を削除します

for /f "tokens=2,3" %%a in ('net use') do if .%%b==.\\Server\DriveCaseSensitive net use %%a /Delete

これは、ドライブが複数回マッピングされている場合は、マッピングも検出して削除することを意味します

于 2012-11-08T20:03:24.920 に答える