簡體   English   中英

Windows bat腳本,如果字符串中包含子字符串,則進行循環

[英]Windows bat script for loop if substring in string

我正在嘗試從此處修改文件列表上的for循環,並添加到其中,以檢查文件名中是否存在子字符串:

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

如何修改上述Windows bat腳本以檢查文件名中是否存在子字符串?

我相信您正在尋找:

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

一種方法是使用字符串替換(有關更多詳細信息,請檢查[SS64]:變量Edit / Replace[SO]:批處理文件:查找子字符串是否在字符串中(不在文件中) )。
因為它發生在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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM