私はずっと答えを探していましたが、今のところどこにも行きませんでした。
私は次のことをしたいと思います:
任意のコンピューターで、LANをスキャンして特定のフォルダー(名前はわかっています)を探します。このフォルダは常に全員にフルアクセスで共有されます。見つかったら、Windowsの未使用のドライブ文字にマップします。
Stackoverflowの他の質問からこのオプションを試しましたフォルダとホストを見つけるためだけに、しかし成功しませんでした:
@echo off
set folder=example
for /f %%a in ('net view ^|find "\\"') do if not "%%a"=="\\%computername%" (
echo trying server "%%a"
pushd "%%a" && (
for /d /r %%b in (%folder%*) do if /i "%%~nxb"=="%folder%" echo server "%%a" folder "%%b"
popd
)
)
pause
前もって感謝します!
読み取り pushd
--UNCネットワークパス :
UNCパスが指定されている場合、
PUSHD
は一時的なドライブマップを作成し、その新しいドライブを使用します。
一時的なドライブ文字はアルファベットの逆順で割り当てられるため、_Z:
_が空いている場合は、最初に使用されます。
pushd
には_pushd "%%a"
_や_\\computername\sharename
_のようなUNCパスが必要なため、_\\computername\sharename\some\subfolder
_は正しくありません( も参照) _Net Use
_ )一方、_"%%a"
_は_\\computername
_にのみ評価されます。
次のスクリプト(いくつかのマイナーな機能強化を含む)がその仕事をするはずです。参照用に Win32_Share class および wmic.exe をお読みください。
_@ECHO OFF >NUL
SETLOCAL EnableExtensions DisableDelayedExpansion
set "folder=example"
for /f %%a in ('net view ^|find "\\"') do if not "%%a"=="\\%computername%" (
echo server: "%%a"
set "_server=%%a"
call :tryServer
)
ENDLOCAL
goto :eof
:tryServer
for /F "tokens=2 delims=," %%G in ('
wmic /node:"%_server:~2%" Share where "Status='OK' and Type=0" get name^, type /Format:csv
') do (
echo trying "%_server%\%%~G"
pushd "%_server%\%%~G" && (
for /d /r %%b in ("%folder%*") do (
if /i "%%~nxb"=="%folder%" echo FOUND: "%_server%\%%~G" folder "%%b"
)
popd
)
)
goto :eof
_
for /d /r %%b in ("%folder%*") do …
の二重引用符は、_set "folder=foo bar"
_のようなスペースを含むフォルダー名でも正しく処理するために必要であることに注意してください。