是否对某些扩展名的文件进行批处理脚本排除

问题描述 投票:1回答:2

在名为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命令在除扩展名之外的所有扩展名的所有文件上执行?

batch-file cmd dos
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!
)

这是规定文件中没有其他点,否则也会删除它们。尽管不是所有文件都具有3个字符的扩展名,但是这比从末尾删除第4个字符更加坚固。


1
投票

您可以像这样通过dir /b传递findstr命令的输出:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.