在名为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命令在除扩展名之外的所有扩展名的所有文件上执行?
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!
)
这是规定文件中没有其他点,否则也会删除它们。尽管不是所有文件都具有3个字符的扩展名,但是这比从末尾删除第4个字符更加坚固。
您可以像这样通过dir /b
传递findstr
命令的输出:
FOR /F "delims=|" %%i IN ('dir /b ^| findstr /v /r "^my.bat$"') DO echo %%i
/v
的findstr
选项将打印与参数不匹配的所有内容。匹配基于一个正则表达式,该正则表达式仅匹配包含my.bat
的行,不匹配其他任何行。