[英]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.