【问题标题】:Batch Script to Find a Folder inside Sub Folders and get Path用于在子文件夹中查找文件夹并获取路径的批处理脚本
【发布时间】:2015-10-05 11:15:24
【问题描述】:

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

我有一个类似于树命令输出的目录结构(只是更复杂,部署涉及一个巨大的 NAS 驱动器)

到目前为止,我的脚本如下所示,仅列出了可能包含 .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 等等? 感谢您提供性能提示。

找不到更相关的代码 sn-p。

【问题讨论】:

  • 你可以使用任何其他脚本语言,例如 python、php 等吗?
  • 托比·艾伦,不幸的是,一个大的NO。客户甚至拒绝了 VBScript 和 PowerShell。
  • 如果您在此处修改答案stackoverflow.com/questions/7664929/…,您应该能够获取所有名为 .snapshot 的子文件夹(只需 google 搜索)

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


【解决方案1】:

你差不多完成了

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 中回显该值,您将获得完整列表。

【讨论】:

  • 太棒了。谢谢 MC ND。您在当前情况下知道的任何性能提示?它将在可能包含数百 Tera 字节数据的 nas 驱动器上运行。
  • @AbdullahLeghari,您的问题不是驱动器中有多少数据,而是要处理的文件夹数量。您可以使用先前代码的任何变体,或使用for /f 处理dir 输出,或者,...但无论如何您都必须迭代文件夹结构。除非您知道.snapshot 文件夹将始终处于精确的深度以便您可以减少递归,否则没有太多选择。
【解决方案2】:

使用

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"

【讨论】:

  • 感谢阿米特的回答。经历它
  • 确保在双引号中传递参数(以避免目录路径可能包含空格的情况)
  • 此代码也只返回 last 项,就像原始问题中的 sn-p 一样;所以您需要在for 的主体中包含echo,或者您只需跳过临时变量folderpath 的赋值,只需输入echo "%%~fa" 而不是set 命令(~f 修饰符返回完整的路径,不带引号);并且应该省略for 之前的cd 命令以避免相对路径参数出现问题...
  • 如果您只想查找第一次出现而不是最后一次出现,请使用:set "folderpath=" & for /d /r "%Dir%" %%a in (*) do if not defined folderpath if /i "%%~nxa"==".snapshot" set "folderpath=%%a"
猜你喜欢
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
相关资源
最近更新 更多