我有几个文件,例如:
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命令行执行此操作?谢谢!
答案 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
,所以我也想提供基于powershell的想法。
直接在powershell中:
Get-Content -Path 'C:\Users\Xiagao\Desktop\*.txt' -Exclude '*$*.txt'
在cmd / batch-file中,但利用powershell:
PowerShell -NoP "GC 'C:\Users\Xiagao\Desktop\*.txt' -Ex '*$*.txt'"
您显然会修改源文件位置的路径(对于当前目录使用.\*.txt
)。