findstr:如何转义点?

joh*_* j. 4 command-line cmd.exe

我不明白为什么findstr不能如我所愿。

我的测试目录中有以下文件:

aaa.jpg
bbb.png
ccc.svg

aaa_s.jpg
bbb_s.png
ccc_s.svg

aaa_small.jpg
bbb_small.png
ccc_small.svg
Run Code Online (Sandbox Code Playgroud)

我有以下行直接传递给 cmd.exe:

for /f "delims=" %f in ('dir /b /a:-d ^| findstr /ile "gif jpg png svg" ^| findstr /ie "_s.*"') do echo "%f"
Run Code Online (Sandbox Code Playgroud)

在我看来,它应该匹配以下文件:

aaa_s.jpg
bbb_s.png
ccc_s.svg
Run Code Online (Sandbox Code Playgroud)

然而,它实际上是匹配的

aaa_s.jpg
bbb_s.png
ccc_s.svg

aaa_small.jpg
bbb_small.png
ccc_small.svg
Run Code Online (Sandbox Code Playgroud)

是的,我知道问题在于点作为“任何字符”工作,而不是按字面意思处理。

findstr /ie "_s.*"
Run Code Online (Sandbox Code Playgroud)

机器人我怎么能逃脱呢?使用反斜杠,即将其更改为

findstr /ie "_s\.*"
Run Code Online (Sandbox Code Playgroud)

不起作用。

Dav*_*ill 5

如何转义通配符.以匹配文字.字符?

您在使用 a 的正确行上\,但是您需要额外.的才能找到剩余的字符。

findstr /ie "_s\..*"
Run Code Online (Sandbox Code Playgroud)

示例(类型和cmd外壳):

F:\test>dir /b /a:-d | findstr /ile "gif jpg png svg" | findstr /ie "_s.*"
aaa_s.jpg
bbb_s.jpg
ccc_s.jpg
aaa_small.jpg
bbb_small.jpg
ccc_small.jpg

F:\test>dir /b /a:-d | findstr /ile "gif jpg png svg" | findstr /ie "_s\..*"
aaa_s.jpg
bbb_s.jpg
ccc_s.jpg
Run Code Online (Sandbox Code Playgroud)

所以你的批处理文件应该包含:

for /f "delims=" %f in ('dir /b /a:-d ^| findstr /ile "gif jpg png svg" ^| findstr /ie "_s\..*"') do echo "%f"
Run Code Online (Sandbox Code Playgroud)