回答:
タイプ
net use
現在接続されているすべてのネットワークドライブが表示されます。
OK Z: \\127.0.0.1\c$ Microsoft Windows Network
echo %cd%
?
echo %cd%
現在のディレクトリ(Z:\ABC
)を出力します\\netDrive\ABC
これはかなり古い質問ですが、..パッチの実際の場所へのUNCパスを使用し、そこで何かを行うバッチを作成しようとしていたのとまったく同じ答えを探していました(したがって、別の場所にコピーして貼り付けます/フォルダと再起動)。
答えを見つけることができなかったので、自分で解決策を見つけましたが、それはあまり美しくなく、確かに単純なコマンドでもありません。しかし、バッチで実装することは可能です。CMDでは、次のようになります。
FOR /F "tokens=2" %i IN ('NET USE ^| FIND "%CD:~0,2%"') DO (
SET cNetworkPath=%i)
SET cNetworkPath=%cNetworkPath%%CD:~2%
ECHO %cNetworkPath%
4行(より良い4+空行)をコピーし、CMDに貼り付けて、コピーするパスの初期エコーを取得できます。
バッチでは、少し異なる方法で使用します。
FOR /F "tokens=2" %%i IN ('NET USE ^| FIND "%~d0"') DO (
bNetworkPath=%%i)
SET bCheckPath=!bOriginalPath!%~p0
変数%CD%には現在のパスが格納され、ドライブ文字のみが必要なので、NET USEのFINDコマンドで検索するだけです。"tokens = 2"(またはNET USE出力に応じて3)を使用すると、%i変数には検索したドライブ文字へのパスが格納されます。その後、2番目のSETコマンドは、ネットワークドライブで参照したフォルダーを%CD:〜2%で追加します(ドライブ文字を切り取るためのオフセット2)。
バッチの場合は、%〜d0または%〜p0変数を使用します。%0は、バッチ自体のフルパスを格納します(例:Z:\ temp \ test.bat;%〜d0 = Z:;%〜p0 = \ temp \; d =ドライブ、p =パス、f =フルパス、n = name)それ以外の場合は、CMDコマンドに似ています。
(DO...)
、バッチの例は欠落してSET ...
おり、bOriginalPath
どこにも定義されていません。
バットのパスは、作業ディレクトリとは異なる場合があります。ですから、コウモリの中にミコルヒザの最初のアプローチが必要です。ステータスの欠落やローカルディスクドライブの状況に対応するには、追加のチェックが必要です。作業コードは次のとおりです。
SET cNetworkPath=
FOR /F "tokens=2" %%i IN ('NET USE ^| FIND "%CD:~0,2%"') DO (
SET cNetworkPath=%%i)
if "%cNetworkPath%" == "%CD:~0,2%" (
FOR /F "tokens=3" %%i IN ('NET USE ^| FIND "%CD:~0,2%"') DO (
SET cNetworkPath=%%i)
)
if "%cNetworkPath%" == "" set cNetworkPath=%CD:~0,2%
SET cNetworkPath=%cNetworkPath%%CD:~2%
ECHO %cNetworkPath%
上記のコードはほとんどの場合に機能しますが、net useおよびfindが機能しない場合があります。以下は最終的にテストされた作業方法です。
SET cNetworkPath=
for /f "tokens=2" %%i in ('wmic path win32_mappedlogicaldisk get deviceid^, providername ^| findstr "%CD:~0,2%"') do (set cNetworkPath=%%i)
echo %cNetworkPath%