2010-12-07 132 views
7

我目前正在尝试编写一个可以遍历一组文件夹的.cmd Windows Shell脚本。然而即使是最简单的如下脚本:如何迭代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" 

我在做什么错?如何修改该脚本,以便它遍历该文件夹,并且一旦看到没有名为“Subfolder”的子文件夹,它就会创建该子文件夹?还有写这样的脚本的一个很好的教程?

回答

4

这个工作对我来说:

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

它应该全部在一条线上吗? – sharptooth 2010-12-07 11:41:37

8

对于(子)文件夹迭代,你需要使用不同的参数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你可以 - 我根本做不到,但也许你能做到这一点?

一种解决方法我赶紧记下来是刚刚做的所有目录的dir在for循环中:

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

注意dir结合使用与/ad/s/b执行目录的递归上市,印刷找到的目录名称。
手中有这些工具,你应该可以做你的子文件夹结构。请注意,您可能需要

相关问题