Windows bat脚本for循环,如果字符串中的子字符串

时间:2018-03-06 18:11:54

标签: windows batch-file cmd

我试图修改文件列表from here上的for循环,并添加它,检查文件名中是否存在子字符串:

for /r %%i in (*) do echo %%i

如何修改上面的windows bat脚本以检查文件名中是否存在子字符串?

2 个答案:

答案 0 :(得分:2)

我相信你正在寻找这个:

for /r %i in (*sub_string*) do echo %i

或者如果您使用的是批处理文件:

for /r %%i in (*sub_string*) do echo %%i

这是我的目录结构:

enter image description here

运行以下命令的输出:

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