在名为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命令?
答案 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
的行,而不包含任何其他行。