如何在Windows Shell中迭代一组文件夹?

sha*_*oth 7 windows shell scripting cmd

我目前正在尝试编写一个.cmd Windows Shell脚本,它将迭代一组文件夹.但是,即使是以下最简单的脚本:

echo "%ROOT%"
for %%f in ("%ROOT%\Binaries\" ) do (
    echo "%%f"
    if not exist "%%f\Subfolder"
        md "%%f\Subfolder"
)
Run Code Online (Sandbox Code Playgroud)

输出:

CurrentDir>echo "<ActualPathToRoot>"
"<ActualPathToRoot>"
%f\Subfolder was unexpected at this time
CurrentDir>if exists "%f\Subfolder"
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如何更改该脚本以使其迭代该文件夹,一旦看到没有名为"Subfolder"的子文件夹,它就会创建该子文件夹?还有一个关于编写这样的脚本的好教程吗?

Den*_*s G 8

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

所以如果你想列出C的所有目录:你应该这样做:

for /d %%A in (C:\*) do echo %%A
Run Code Online (Sandbox Code Playgroud)

请注意/d指示目录的参数.要进入子目录,您需要进行递归/r

for /r C:\Windows %%A in (*.jpg) do echo %%A
Run Code Online (Sandbox Code Playgroud)

这将遍历所有寻找JPG的Windows子目录.你应该能够做到一点/d /r,这个参考建议你可以 - 我根本不能,但也许你能做到这一点?

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

for /f "delims=" %%A in ('dir /ad/s/b') do echo %%A
Run Code Online (Sandbox Code Playgroud)

请注意,dir它与/ad/s/b执行目录的递归列表一起使用,打印找到的目录的名称.
有了这些工具,您就可以使用if-subfolder构造了.请注意,您可能需要


det*_*zed 4

这对我有用:

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