【问题标题】:How do I iterate over a set of folders in Windows Shell?如何遍历 Windows Shell 中的一组文件夹?
【发布时间】:2011-05-21 12:37:27
【问题描述】:

我目前正在尝试编写一个可以遍历一组文件夹的 .cmd Windows Shell 脚本。然而,即使是以下最简单的脚本:

echo "%ROOT%"
for %%f in ("%ROOT%\Binaries\" ) do (
    echo "%%f"
    if not exist "%%f\Subfolder"
        md "%%f\Subfolder"
)

输出:

CurrentDir>echo "<ActualPathToRoot>"
"<ActualPathToRoot>"
%f\Subfolder was unexpected at this time
CurrentDir>if exists "%f\Subfolder"

我做错了什么?如何更改该脚本以使其遍历该文件夹,并且一旦看到没有名为“子文件夹”的子文件夹,它就会创建该子文件夹?还有编写此类脚本的好教程吗?

【问题讨论】:

    标签: windows shell scripting cmd


    【解决方案1】:

    这对我有用:

    echo %ROOT%
    for /D %%f in (%ROOT%\Binaries\*) do echo %%f && if not exist %%f\Subfolder md %%f\Subfolder
    

    【讨论】:

    • 应该全部放在一行上吗?
    • 是的。至少在我的版本中它是这样工作的。也许现在有一种方法可以在多行中做到这一点,但经典的批处理文件就是这样工作的。通常人们会使用goto 来写很多行。
    • 非常感谢。问题是我没想到换行符很重要。
    【解决方案2】:

    对于(子)文件夹迭代,您需要使用不同的for 参数。

    因此,如果您想列出 C: 的所有目录,您应该这样做:

    for /d %%A in (C:\*) do echo %%A
    

    注意参数/d,它表示一个目录。要进入子目录,您需要使用 /r 进行递归

    for /r C:\Windows %%A in (*.jpg) do echo %%A
    

    这将遍历所有 Windows 子目录以查找 JPG。瞧,你应该可以做到/d /rthis reference suggests 你可以 - 我根本做不到,但也许你可以做到这一点?

    我快速记下的一种解决方法是在 for 循环中对所有目录执行 dir

    for /f "delims=" %%A in ('dir /ad/s/b') do echo %%A
    

    请注意,dir/ad/s/b 结合使用,后者执行目录的递归列表,打印找到的目录的名称。
    有了这些工具,您应该能够构建 if 子文件夹。请注意,您可能需要

    【讨论】:

      猜你喜欢
      • 2021-07-01
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 2017-02-25
      相关资源
      最近更新 更多