1

在名为 my.bat 的 Windows cmd 批处理脚本中,我想对当前目录中的所有文件执行命令,但批处理文件 my.bat 除外。我目前在 my.bat 中使用以下命令仅针对 *.txt *.ppt 运行命令,但实际上可能会将不同扩展名的新文件添加到文件夹中,因此通过排除一种类型的文件扩展名来执行此命令(在我的情况下 *.bat) 会更具可读性/帮助。

FOR /F "delims=|" %%i IN ('dir /b *.txt *.ppt') DO echo %%i

问题是:如何仅使用该特定文件扩展名排除该文件,并使 for 命令在所有扩展名的所有文件上执行,但排除的文件除外?

4

2 回答 2

3
FOR /F "tokens=* delims=|" %%i IN ('dir /b *.*') do if not %%~xi==.bat echo %%i

我也添加tokens=*了,否则如果它们有空格,您将无法获得完整的文件名。

不带点回声

setlocal enabledelayedexpansion
FOR /F "tokens=* delims=|" %%i IN ('dir /b *.*') do (
set e=%%~xi
set e=!e:.=!
echo !e!
)

这是假设文件没有任何其他点,否则它也会删除它们。不过,这比仅从末尾删除第 4 个字符要坚固一些,因为并非所有文件都具有 3 个字符的扩展名。

于 2012-12-19T12:10:10.007 回答
1

您可以通过 传递dir /b命令的输出findstr,如下所示:

FOR /F "delims=|" %%i IN ('dir /b ^| findstr /v /r "^my.bat$"') DO echo %%i

打印与参数不匹配的任何内容的/v选项。findstr匹配基于正则表达式,该正则表达式仅匹配包含的行,不匹配my.bat其他任何内容。

于 2012-12-19T12:10:18.813 回答