在 Windows 批处理文件中查找包含子字符串的字符串

Posted

技术标签:

【中文标题】在 Windows 批处理文件中查找包含子字符串的字符串【英文标题】:Find a string containing a substring in windows batch file 【发布时间】:2016-02-25 23:11:21 【问题描述】:

我有一个文本文件 (filename.txt),其中包含

ProductABC_Test.txt
ProductDEF_Test.txt
ProductHIG_Test.txt
ProductIJK_Test.txt

我将传递一个变量(例如:product=ABC,它将是 ProductABC_Test.txt 的子字符串)。所以我需要从 filename.txt 中获取正确的测试名称(ProductABC_Test.txt)。

我试过下面的代码-

SETLOCAL ENABLEEXTENSIONS
@echo off
set product=ABC
SETLOCAL EnableDelayedExpansion
for /F "tokens=*" %%A in (filename.txt) do 
(
    set str=%%A
    if NOT %str% == !%str:product=% 
    (
        set test_suite=%%A
    )
)
ENDLOCAL
echo %test_suite%

但我没有得到正确的结果。

【问题讨论】:

您需要Delayed Variable Expansion,因为您正在设置读取代码块中的变量,所以!str!而不是%str%,还有!str:%product%=!。 .. @aschipfl - 你的观点看起来很棒。现在我了解了延迟变量扩展。非常感谢 请注意DOS是80/90年代的操作系统!请改用标签 Windows。 【参考方案1】:

您可以使用以下代码查找包含您的子字符串的行:

@echo off
SETLOCAL ENABLEEXTENSIONS
set product=ABC
set test_suite="not found"
SETLOCAL EnableDelayedExpansion
for /F "tokens=*" %%A in (filename.txt) do (
    set str=%%A
    Echo.!str! | findstr /C:"!product!">nul
    if !errorlevel!==0 set test_suite=!str!
)
echo %test_suite%
pause

【讨论】:

非常感谢@Dennis。你给了我所需要的。

以上是关于在 Windows 批处理文件中查找包含子字符串的字符串的主要内容,如果未能解决你的问题,请参考以下文章

Windows批处理脚本在子文件夹中查找最大的PDF文件并使用Ghostscript和`pdftk`在页脚中打印路径

批处理文件:查找子字符串是不是在字符串中(不在文件中)

c++ 文本文件中查找字符串

如何通过在 Windows 中使用批处理替换子字符串来重命名文件 [关闭]

如何使用 Windows 批处理文件查找特定目录?

如何在包含子字符串的数据框中查找所有行?