Windows bat:如何循环子目录中的文件

时间:2017-06-06 09:33:20

标签: windows batch-file

我需要使用名为process.bat的蝙蝠来处理某些子目录中的所有jpg文件。

dir
 |---subdir1
 |     |-----a.jpg
 |     |-----b.jpg
 |
 |---subdir2
       |-----c.jpg
       |-----d.jpg

process.bat dir/subdir1/a.jpg dir/subdir1/b.jpg
process.bat dir/subdir2/c.jpg dir/subdir2/d.jpg

在Linux中,我可以创建这样一个脚本:

find $1 -type d | while read dir; do
    files=("$dir"/*.jpg)
    if [ ${#files[@]} -gt 0 ]; then
        if ! [[ $files =~ \* ]]; then
            process.bat "${files[@]}"
        fi
    fi
done

但我不知道如何在Windows中做同样的事情 我已经知道如何在Windows bat中循环文件:for /r %%i in (*) do echo %%i

1 个答案:

答案 0 :(得分:0)

dir应该是绝对的道路:

> tree . /F
C:\TEST\DIR
├───subdir1
│       a.jpg
│       b.jpg
│
├───subdir2
│       c.jpg
│       d.jpg
│
└───subdir3
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
For /d %%A in (C:\Test\dir\*) Do (
  Set "Files="
  For %%B in ("%%~fA\*.jpg") Do Set Files=!Files! "%%~fB"
  If defined Files echo process.bat !Files!
)

带echo的示例输出:

process.bat  "C:\Test\dir\subdir1\a.jpg" "C:\Test\dir\subdir1\b.jpg"
process.bat  "C:\Test\dir\subdir2\c.jpg" "C:\Test\dir\subdir2\d.jpg"