我想迭代一个以.txt而不是.old.txt结尾的文件列表。
应该列出file1.txt,但不应该列出file4.old.txt。
我知道这用于迭代文件:
for /r .\logs %%G in (*.txt ) do (
echo %%G
)
但是当我尝试添加if:
时for /r .\logs %%G in (*.txt ) do (
if x%%G:.old.txt=%==x%%G (
echo %%G
)
)
我得到:=G was unexpected at this time
我尝试将值分配给"正常"变量:
for /r .\logs %%G in (*.txt) do (
set F=%%G
if x%F:.old.txt=%==x%F% (
echo %F%
)
)
但无济于事,我只打印了几次文件......
有什么想法吗?谢谢!
答案 0 :(得分:2)
for /f "Delims=" %%a in ('dir /s /b /a-d *.txt^|findstr /ive "\.old\.txt"') do echo %%a
答案 1 :(得分:1)
for /r .\logs %%G in (*.txt ) do (
echo %%G|findstr /v /i /e /l ".old.txt"
)
)
应该过滤掉那些文件名。
真正的问题无疑是“为什么我试过的代码没有像我预期的那样工作?”
第一次尝试时,不可能对元变量进行子串(例如。%%G
)
对于第二个,您需要使用delayed expansion
才能在块中使用变量的更改值。在SO上有很多这种现象的例子 - 只需寻找delayed expansion
。
我建议的解决方案的工作方式是过滤%%G
到findstr
的值,该值正在寻找/e
- 结束的字符串,/i
不区分大小写,/v
NOT-matching /l
提供了文字字符串。
答案 2 :(得分:1)
setlocal EnableDelayedExpansion
for /r .\logs %%G in (*.txt) do (
set F=%%G
if "!F:.old.txt=!" == "!F!" (
echo !F!
)
)