我试图修改文件列表from here上的for循环,并添加它,检查文件名中是否存在子字符串:
for /r %%i in (*) do echo %%i
如何修改上面的windows bat脚本以检查文件名中是否存在子字符串?
答案 0 :(得分:2)
我相信你正在寻找这个:
for /r %i in (*sub_string*) do echo %i
或者如果您使用的是批处理文件:
for /r %%i in (*sub_string*) do echo %%i
这是我的目录结构:
运行以下命令的输出:
for /r %i in (*test*) do echo %i
如下:
C:\Users\czimmerman\Development\CMDTest>for /r %i in (*test*) do echo %i
C:\Users\czimmerman\Development\CMDTest>echo C:\Users\czimmerman\Development\CMD
Test\test1.txt
C:\Users\czimmerman\Development\CMDTest\test1.txt
C:\Users\czimmerman\Development\CMDTest>echo C:\Users\czimmerman\Development\CMD
Test\test2.txt
C:\Users\czimmerman\Development\CMDTest\test2.txt
C:\Users\czimmerman\Development\CMDTest>
请注意,未列出notthisone.txt
。
答案 1 :(得分:1)
一种方法是使用字符串替换(检查[SS64]: Variable Edit/Replace或[SO]: Batch file: Find if substring is in string (not in a file)以获取更多详细信息)。
因为它发生在for
循环中,所以必须考虑延迟扩展([SS64]: EnableDelayedExpansion)。
例如,以下代码过滤包含“ text ”的文件名,并丢弃其余文件(每个找到的文件名在开头打印)。
code.bat :
@echo off
setlocal enabledelayedexpansion
for /r %%f in (*) do (
echo Found: %%f
set __CURRENT_FILE=%%f
if not "!__CURRENT_FILE:text=!" == "!__CURRENT_FILE!" (
echo Filtered: !__CURRENT_FILE!
)
)
<强>输出强>:
e:\Work\Dev\StackOverflow\q049137405>code.bat Found: e:\Work\Dev\StackOverflow\q049137405\code.bat Found: e:\Work\Dev\StackOverflow\q049137405\other code.py Found: e:\Work\Dev\StackOverflow\q049137405\other text.txt Filtered: e:\Work\Dev\StackOverflow\q049137405\other text.txt Found: e:\Work\Dev\StackOverflow\q049137405\text.txt Filtered: e:\Work\Dev\StackOverflow\q049137405\text.txt