gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:42:40 24 4
gpt4 key购买 nike

我正在尝试检查批处理文件中的变量是否以 " 开头,某处包含 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 通过。

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

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

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

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

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

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

我使用 && 在 FINDSTR 成功时有条件地采取行动,而 || 在 FINDSTR 失败时有条件地采取行动。

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

请注意,在某些情况下,批处理解析器还要求您将双引号转义为 ^",这意味着完全转义的引号将类似于 \^"。但是您的情况不需要这种并发症。 FINDSTR 转义规则实际上有点不稳定。参见 What are the undocumented features and limitations of the Windows FINDSTR command?了解更多信息。

我的测试代码进行区分大小写的搜索。所以 beta 将不匹配 BETA。如果您想要不区分大小写的搜索,则只需添加 /I 选项即可。

编辑: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 在结尾检查 ")。唯一棘手的事情是弄清楚如何在引号数量为奇数时转义比较字符串。

关于Windows 批处理检查变量是否以特定字符串开头、结尾并包含特定字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15707742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com