在任何映射的驱动器中查找特定文件夹并报告其完整的 UNC 路径

find specific folder in any mapped drive and report its full UNC path

我想知道是否可以使用批处理文件在 PC 的任何映射驱动器中查找特定文件夹并让它报告文件夹的完整 UNC 路径。假设一台 PC 的驱动器映射为 N:\ & S:\(或与此相关的任何常用网络驱动器号)。该文件夹可以在任一文件夹中,我 运行 一些代码来查找文件夹的位置,它将位于驱动器共享的根目录中(避免需要递归子文件夹扫描),例如N:\Special_Folder 但是,代码的最终结果将报告 FULL UNC,例如

找到文件夹!..

\server-vm01\data\shared_area\special_folder

希望这是有道理的。我已经尝试使用一些我已经用来识别 USB 记忆棒的代码,但很难将其移植到上述需求中。任何指点都会很好,谢谢。

for %%a in (d: e: f: g: h: i: j: k: l: m: n: o: p: q: r: s: t: u: v: w: x: y: z:) do | find "special_folder" >nul && set unc=%%a:
echo %unc%
pause

编辑以排除故障,输出净使用

微软 Windows [版本 10.0.14393] (c) 2016 年微软公司。保留所有权利。

C:\Users\Admin>网络使用 新连接将被记住。

Status       Local     Remote                    Network

-------------------------------------------------------------------------------
OK           Y:        \DISKSTATION\NetBackup   Microsoft Windows Network
OK           Z:        \DISKSTATION\NetBackup   Microsoft Windows Network
The command completed successfully.


C:\Users\Admin>

我试图修复并且我在第一行中尝试了 FOR /F "tokens=2-3 delims= " 并删除了 Microsoft Windows Networ 但随后在路径中删除了一个字母,例如 \DISKSTATION\NetBacku\specialfolder

另外,如果我 运行 作为管理员,那么代码不会回显任何路径,不是管理员吗?谢谢

编辑 (最终版)

感谢你们提供这些非常有用的代码。我将用有效的方法来编辑原始问题,两者都按实际情况进行,但我只能通过它的外观来勾选一个解决方案。

测试环境:-

Win10(UAC 开启)

Win7(UAC 关闭)

两个映射驱动器,每个驱动器在两个驱动器之一的根目录中有一个名为 Daphne 的测试文件夹。

    @echo off
    FOR /F "skip=2 delims=" %%G IN ('"wmic logicaldisk where drivetype=4 get name,providername /format:csv"') do (
       FOR /F "tokens=2,3 delims=," %%H IN ("%%G") DO (
           IF EXIST "%%I\Daphne\" echo %%I\Daphne
        )
     )
pause

以上在 Win7(UAC 关闭)测试系统上完美运行,管理员与否。作为非管理员 Win10(UAC 已打开)工作, 运行 宁作为 "Admin" 工作。

以下 无处不在 无论管理员与否,在两种环境中。

建议的原始代码工作正常(仅供参考)但我只需要它来输出没有引号或附加文本的路径,所以我只是增加了作者的慷慨努力(略微调整)来总结原始问题带着我的初衷。

@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion

set "_FolderToSearch=Daphne"                  
for /F "delims=" %%D in ('reg query "HKCU\Network"') do (
  for /F "tokens=1,2,*" %%f in ('reg query "%%~D" /v RemotePath ^| find /I "RemotePath"') do (
    if exist "%%~h\%_FolderToSearch%\" echo %%~h\%_FolderToSearch%
  )
)
pause

以下是两个代码片段在其工作形式下在屏幕上的输出:-

\DISKSTATION\NetBackup\Daphne
Press any key to continue . . .

\DISKSTATION\NetBackup\Daphne
Press any key to continue . . .

我现在可以轻松地将其设置为配置文件中的路径语句,以完全自动化客户端软件安装,只需让客户告诉我他们希望我们的数据在其网络上的文件夹名称即可。我将首先测试并报告。

谢谢!

我对代码的思考太多了。使用 WMIC 和简单的 IF EXIST 应该可以。

 FOR /F "skip=2 delims=" %%G IN ('"wmic logicaldisk where drivetype=4 get name,providername /format:csv"') do (
    FOR /F "tokens=2,3 delims=," %%H IN ("%%G") DO (
        IF EXIST "%%I\SpecialFolder\" echo %%I\SpecialFolder
    )
 )
 pause

Mapped drives are not available from an elevated prompt when UAC is configured to "Prompt for credentials" in Windows.

下一个代码片段应该可以工作即使在提升的命令提示符下:

@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion

set "_FolderToSearch=models"                  folder name to be searched for

echo no recursion: folder in the root of the drive share:

for /F "delims=" %%D in ('reg query "HKCU\Network"') do (
  for /F "tokens=1,2,*" %%f in ('reg query "%%~D" /v RemotePath ^| find /I "RemotePath"') do (
    if exist "%%~h\%_FolderToSearch%\" echo # FOUND [%%~nD:] "%%~h\%_FolderToSearch%"
  )
)

echo recursive search:

for /F "delims=" %%D in ('reg query "HKCU\Network"') do (
  for /F "tokens=1,2,*" %%f in ('reg query "%%~D" /v RemotePath ^| find /I "RemotePath"') do (
    for /F "delims=" %%# in ('dir /B /S /AD "%%~h\%_FolderToSearch%*" 2^>NUL') do (
        if /I "%%~nx#"=="%_FolderToSearch%" echo # found [%%~nD:] "%%~#"
    )
  )
)