【发布时间】:2021-09-29 19:14:51
【问题描述】:
我昨天问了这个问题,但它被标记为重复,我得到了一个问题的链接,该问题讨论了类似的问题,但不是专门讨论变量替换和子字符串,所以我再次发布。
我正在尝试使用延迟扩展变量进行变量替换
通常情况下,我会有这样的东西:
REM Sub 123 for bcd
SET Myvar=abcdefg
SET MyNewVar=%MyVar:bcd=123%
echo %MyNewVar%
REM Just get all but the last 2 chars of the string
SET MyShortVar=%Myvar:~0,-2%
echo %MyShortVar%
根据这篇文章 (Variables Are Not Behaving As Expected),我尝试了这个:
SET MyShortVar=%%Myvar:~0,-1%%
ECHO MyShortVar=[%MyShortVar%] or [!MyShortVar!]
得到这个输出:
MyShortVar=[%Myvar:~0,-1%] or [%Myvar:~0,-1%]
但是在使用变量时,由于延迟扩展而必须使用 bang 符号,我该怎么做呢?
【问题讨论】:
-
正如我们在上一个问题中所说,最简单的解决方案是使用
SETLOCAL命令启用延迟扩展,然后使用感叹号而不是百分比符号来引用变量。将百分比符号加倍的唯一情况是,如果您尝试转义百分比符号,或者您尝试使用CALL命令进行延迟扩展。 -
不管您的代码中实际上没有 NEEDING 延迟扩展的 minimal reproducible example。
-
如果您没有发布我们都可以复制的实际代码和足够的附加信息以用于重现您遇到的问题,那么我们将无法提供除另一个重复链接之外的任何内容同样的问题,再次。
-
不要重新发布您的问题,而是编辑您的原始问题以明确您的实际问题,然后它将重新打开。顺便问一下,你试过
setlocal EnableDelayedExpansion,然后是set MyVar=abcdefg,然后是echo !MyVar:bcd=123!或echo !MyVar:~0,-2!吗? -
您链接的文章准确描述了如何使用
%%var%%(即使用call命令),甚至解释了原因。请再次阅读并遵循说明。但正如其他人已经评论的那样,您的代码不需要延迟扩展。
标签: windows batch-file cmd string-substitution delayedvariableexpansion