Windows命令行中的文件名模式匹配

时间:2019-07-17 00:00:56

标签: batch-file cmd

我有几个文件,例如:

a.txt
a$.txt
a$b.txt
b.txt
b$.txt
b$c.txt

我想使用Windows命令行打印名称不包含“ $”的文件,以进行文件名模式匹配,例如正则表达式:

for %%f in ([^$]+.txt) do type %%f

for %%f in ([a-zA-Z]+.txt) do type %%f

但是它不起作用。如何使用Windows命令行执行此操作?谢谢!

2 个答案:

答案 0 :(得分:1)

for loop与几乎所有cmd命令一样,不支持正则表达式。唯一支持其中一个简短摘录的命令是findstr,可以将其与dir一起使用以获得所需的结果:

for /F "delims= eol=|" %%f in ('
    dir /B /A:-D "*.txt" ^| findstr /I /V "^[^$][^$]*\.txt$"
') do (
    >&2 echo/%%f
    type "%%f"
)

这甚至可以通过用find findstr /I /V "^[^$][^$]*\.txt$"替换/V "$"来简化。

答案 1 :(得分:0)

由于“ Windows命令行”既包含powershell.exe也包含cmd.exe,所以我也想提供基于的想法。

直接在中:

Get-Content -Path 'C:\Users\Xiagao\Desktop\*.txt' -Exclude '*$*.txt'

/ 中,但利用

PowerShell -NoP "GC 'C:\Users\Xiagao\Desktop\*.txt' -Ex '*$*.txt'"

您显然会修改源文件位置的路径(对于当前目录使用.\*.txt)。