批处理循环遍历具有预定义列表或扩展名集的所有文件并忽略所有其他文件类型

Batch to loop through all files with predefined list or set of extensions and ignore all other file types

我有以下 windows-批处理脚本来遍历当前目录中的所有文件:

FOR %%F in (%CD%\*.*) DO (
    :: I am doing my process here
)

我知道我可以使用 *.ext 遍历特定文件类型,但我需要遍历下面所有给定的文件类型并忽略所有其他类型,这也是单个 FOR仅循环:

php
phtml
css
js
sql
xml

如何通过对我的代码进行尽可能少的修改来实现这一点?

我不是一个批处理脚本编写者,所以任何帮助将不胜感激。

在你的批处理文件中使用这个命令行怎么样?

for %%I in (*.php *.phtml *.css *.js *.sql *.xml) do echo "%%I"

或者更好,这取决于你想做什么:

for /F "delims=" %%I in ('dir /A-D /B *.php *.phtml *.css *.js *.sql *.xml 2^>nul') do echo "%%I"

带有 DIR 的版本也适用于设置了隐藏属性的文件,并且当当前目录中的文件被重命名、移动或删除时更好,即当前目录文件列表由于FOR 循环主体中的命令,因为 FOR 处理的文件列表不会更改一次 DIR 命令被执行,这不是使用第一个解决方案的情况。当在当前目录中重命名、移动、修改或删除文件时,第一个解决方案很容易导致意外行为,例如双重处理文件、跳过意外文件或无休止的 运行 循环。

运行 在命令提示符 window for /?dir /? 中寻求有关这两个命令的帮助,这两个命令都支持在参数列表上指定多个通配符模式。