反转 FOR 命令的意义?

问题描述 投票:0回答:3

使用批处理文件,处理所有在文件名或扩展名中共享字符串的文件就足够简单了,例如:

FOR /R %F IN (*.EXE) DO @ECHO %F

但是,如果我想反转文件集的含义怎么办?比如,处理所有以.EXE结尾的文件?

FOR /R %F IN (anything-but-exe) DO @ECHO %F

通过阅读

FOR /?

的输出,我找不到任何似乎是我正在寻找的东西
windows batch-file for-loop command-prompt
3个回答
4
投票

这应该是另一种选择:

FOR /R %F IN (*.*) DO @if /i not "%~xF"==".exe" ECHO %F

4
投票
for /f "tokens=* delims=" %a in ('dir /s /b /a:-d^|findstr /i/e/v ".exe" ') do @echo %a

0
投票

我添加了这个答案,因为当前提供的

findstr.exe
答案存在潜在问题。它使用搜索模式
.exe
,但没有规定这应该是文字搜索模式。
Findstr.exe
默认使用正则表达式模式,这意味着字符
.
成为通配符(对于任何字符)。这意味着它也可以忽略不需要的文件,虽然文件名以
jexe
lexe
_exe
等结尾的可能性不大,但健壮的代码不应假定它不可能。

这是应该如何使用

findstr.exe
完成。

作为文字搜索模式:

For /F "EOL=? Tokens=* Delims=" %G In ('Dir /A:-D /B /S 2^>NUL ^| %SystemRoot%\System32\findstr.exe /VLIE ".exe"') Do @Echo %G

或者作为正则表达式模式,(其中

\
转义通配符
.
$
匹配行尾)

For /F "EOL=? Tokens=* Delims=" %G In ('Dir /A:-D /B /S 2^>NUL ^| %SystemRoot%\System32\findstr.exe /VRIC:"\.exe$"') Do @Echo %G

我还使用了

2>NUL
,将任何潜在的文件定位失败重定向到 NUL 设备,而不是将错误消息传递给管道
findstr.exe
命令。

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