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

时间:2016-10-05 18:07:13

标签: batch-file find directory unc

我想知道是否可以使用批处理文件在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

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

Microsoft Windows [版本10.0.14393] (c)2016 Microsoft Corporation。保留所有权利。

C:\ Users \ Admin> net use 将记住新的联系。

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已关闭)测试系统,是否为Admin。作为非管理员Win10(UAC打开),工作作为“管理员”工作。

在任何地方工作,无论管理与否,都适用于两种环境。

原始代码建议工作正常(FYI),但我只是需要它输出没有引号或附加文本的路径,所以我只是添加作者慷慨的努力(稍微调整)来结束原始问题符合我的原意。

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

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

三江源!

2 个答案:

答案 0 :(得分:2)

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:] "%%~#"
    )
  )
)

答案 1 :(得分:1)

我在想代码。使用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