这是似乎变得更加复杂的要求之一,每次我发现需要“解决”的 Windows/cmd shell hack 时。本质上...我需要遍历 DOS Shell FOR 循环中的特定文件夹列表。这是我想出的循环:
echo ^ [start for test]
for /F "usebackq " %%f IN (`dir /b /adh "w:\sandbox\tmp\"`) DO (
echo ^ do with file: %%f
rem <do something>
)
echo ^ [for test done]
主要需要遍历源文件夹中的隐藏目录(这里是sandbox\tmp)。
结果既令人惊讶又令人沮丧。这是在控制台命令行上使用此 FOR 指令的结果。
W:..> for /F "usebackq " %f
IN (`dir /b /adh "w:\sandbox\tmp\"`) DO echo ^ folder = %f
File Not Found <1>
folder = C:\WINDOWS\system32\cmd.exe <2>
folder = any <4>
folder = hidden-folder-01 <3>
folder = hidden-folder-02 <3>
folder = morph <4>
folder = practice-northwind <4>
其中列出了五个文件夹。伟大的!还有一个cmd.exe在标签:< 2 > 和一个谜在标签:< 1 >。我应该解释一下我认为的DIR开关。
- / b ....... 裸格式,只是文件/文件夹名称。
- /a dh ..... 隐藏和目录,都试过了——没用。
/一个高清 - /a d ...... 具有 Directory 属性的项目(文件夹)。
- / ah ......隐藏文件/文件夹(看似)。
我已经标记了输出,这是我到目前为止所做的。
- “找不到文件”.. .. .. .. .. .. .. .. 我不知道。我发现“找不到文件”。< 1 > 是/ah开关的产物。当我只是说:
IN (dir /b /adh "w:\sandbox\tmp\"
) - C:\WINDOWS\system32**cmd.exe** .. .. 虚假迭代器 ( %%f ); 此错误仅在FOR /F命令版本中显示。我想找到隐藏目录,文件集列表不返回隐藏文件(d'oh)。所以,到目前为止,我坚持使用FOR /F的usebackq版本。
- 隐藏文件夹... .. .. .. .. .. .. 这些文件夹是预期的输出_。
- 目录文件夹。.. .. .. .. .. .. 这些文件是虚假的结果,而不是想要的。
CMD 行版本(或示例 DOS 脚本)的预期结果只是 < 3 > 项。
W:..> for /F "usebackq " %f
IN (`dir /b /adh "w:\sandbox\tmp\"`) DO echo ^ folder = %f
folder = hidden-folder-01 <3>
folder = hidden-folder-02 <3>
不幸的是,我也“可以”获取目标文件夹中的任何文件。我认为这又与 HIDDEN 开关 (/ah) 有关。
如何仅列出设置目录中的隐藏文件夹(而不是文件);并像 FOR 命令一样遍历列表?
在此先感谢/将