Dos批处理脚本排除某些扩展名的文件

时间:2012-12-19 12:02:53

标签: batch-file cmd dos

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

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

问题是:如何使用该特定文件扩展名单独排除该文件,并对除排除的文件扩展名以外的所有扩展名的所有文件执行for命令?

2 个答案:

答案 0 :(得分: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个字符的扩展名。

答案 1 :(得分:1)

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

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

/v的{​​{1}}选项会打印与参数不匹配的任何内容。该匹配基于一个正则表达式,该表达式仅匹配包含findstr的行,而不包含任何其他行。