Windows 批量检查变量是否以特定字符串开头、结尾并包含特定字符串

2023-11-25

我正在尝试检查批处理文件中的变量是否以"包含BETA某处并结束于").

是否可以? 如果是的话,有人可以帮我吗?


假设您的变量不包含任何换行符或回车符,那么所需要的只是一个 FINDSTR 命令。它具有有限的正则表达式支持,足以解决这个问题。

@echo off
setlocal
set test1=abc
set test2="abc"
set test3="")
set test4=")"
set test5=abc")"
set test6=xyzBETAzyx
set test7="xyz BETA zyx"
set test8=xyzBETAzyx")"
set test9=xyzBETAzyx")"
set test10="xyzbetazyx")
set test11="xyzBETAzyx")

for /l %%N in (1 1 11) do call :test test%%N
exit /b

:test  variableName
setlocal enableDelayedExpansion
echo !%1!|>nul findstr /rx \".*BETA.*\") && set "result=PASS" || set "result=FAIL"
echo %1 = !result!: !%1!
exit /b

仅 TEST11 通过。

The /R选项强制将搜索字符串视为正则表达式。

The /X选项意味着它必须是完全匹配 - 整个字符串必须与搜索字符串匹配。

.*是将匹配任何字符串的正则表达式通配符表达式。

我将 FINDSTR 输出重定向到 NUL,因为我们不需要查看该行。我们只想要返回码

FINDSTR 需要将双引号文字转义为\"

使用延迟扩展,以便您可以安全地回显变量内的任何值。

I use &&当 FINDSTR 成功时有条件地采取行动,并且||当 FINDSTR 失败时有条件地采取行动。

My :TEST例程将变量的名称作为唯一的参数。

请注意,在某些情况下,批处理解析器还要求您将双引号转义为^",这意味着完全转义的引用看起来像\^"。但在你的情况下不需要这种复杂化。 FINDSTR 转义规则实际上有点不稳定。看Windows FINDSTR 命令有哪些未记录的功能和限制?了解更多信息。

我的测试代码进行区分大小写的搜索。所以beta不会匹配BETA。如果您想要不区分大小写的搜索,只需添加/I option.

编辑:2015-07-22

当且仅当您想忽略大小写时,另一种选择是结合使用变量扩展搜索/替换和扩展子字符串操作。下面的test10和test11都通过了。

@echo off
setlocal
set test1=abc
set test2="abc"
set test3="")
set test4=")"
set test5=abc")"
set test6=xyzBETAzyx
set test7="xyz BETA zyx"
set test8=xyzBETAzyx")"
set test9=xyzBETAzyx")"
set test10="xyzbetazyx")
set test11="xyzBETAzyx")

for /l %%N in (1 1 11) do call :test test%%N
exit /b

:test  variableName
setlocal enableDelayedExpansion
set "result=FAIL"
if "!%1:beta=!" neq "!%1!" if "!%1:~0,1!" equ ^""" if "!%1:~-2!" equ ^"")" set "result=PASS"
echo %1 = !result!: !%1!
exit /b

第一个 IF 检查beta任何地方(不区分大小写)。第二个 IF 检查"在开始处,最后一个 IF 检查")在最后。唯一棘手的事情是弄清楚当比较字符串具有奇数个引号时如何转义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 批量检查变量是否以特定字符串开头、结尾并包含特定字符串 的相关文章

随机推荐