如何在网络中查找特定的共享文件夹

如何在网络中查找特定的共享文件夹

我一直在寻找答案但至今仍无所获。

我希望做到以下几点:

在任何计算机上扫描我的 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

提前致谢!

答案1

pushd- UNC 网络路径

当一个UNC 路径指定后,PUSHD将创建一个临时驱动器映射,然后使用该新驱动器。
临时驱动器号按字母逆序分配,因此如果Z:有空闲,将首先使用它。

pushd "%%a"是不正确的,因为pushd需要UNC 路径喜欢 \\computername\sharename\\computername\sharename\some\subfolder(另见net use) 而"%%a"仅评估为\\computername

下面的脚本(略有改进)应该可以完成这项工作。阅读Win32_Share 类执行程序以供参考。

@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"

相关内容