批处理脚本在子文件夹中查找文件夹并获取路径

时间:2015-10-05 11:15:25

标签: windows batch-file command-line cmd command-prompt

我正在尝试获取包含 .snapshot 文件夹的目录路径。应在所有父目录和子目录中搜索.snapshot。

我的目录结构类似于以下树命令输出(只是更复杂,部署处理巨大的NAS驱动器)

enter image description here

我的脚本,如下所示,到目前为止只列出了包含.snapshot的潜在100个目录中的一个

set Dir=C:\Vol
cd %Dir%
for /d  /r "%Dir%" %%a in (*) do if /i "%%~nxa"==".snapshot" set "folderpath=%%a"
echo "%folderpath%"

输出:

C:\Vol\xnd76540\u44753\mike.smith\.snapshot

我的问题

如何查看.snapshot文件夹的所有子目录,返回到父级并按照另一个路径再次搜索其他子目录集中的.snapshot,依此类推? 表现提示赞赏。

无法找到更相关的代码段。

2 个答案:

答案 0 :(得分:3)

你差不多完成了

for /d  /r "%Dir%" %%a in (*) do if /i "%%~nxa"==".snapshot" (
    echo %%~dpa
)

或者,

for /d /r "%Dir%" %%a in (.snapshot) do if exist "%%~fa" (
    echo %%~dpa
)

问题中原始for的问题在于它在迭代时分配变量,并且当for结束时,回显的值是最后一次分配,因为在每次迭代中值是覆盖。

相反,回显正在运行的for内的值,您将获得完整列表。

答案 1 :(得分:0)

使用

set Dir=%1
cd %Dir%
for /d  /r "%Dir%" %%a in (*) do if /i "%%~nxa"==".snapshot" set "folderpath=%%a"
echo "%folderpath%"

保存此批处理文件说temp.bat

现在在另一个批处理文件中通过传递

之类的参数来调用它
temp.bat "C:\Vol1"
temp.bat "another location"