为什么字符串操作在 if 语句中内联工作而不使用延迟扩展变量 - 但否则会失败。例如:
set test=testString
if %test:~0,4%==test echo Success
这可以正常工作;返回成功
。但是,如果我执行以下操作:
setLocal enableDelayedExpansion
set test=testString
if !test:~0,4!==test echo Success
我收到错误 - 4!==此时测试出现意外。
显然,您可以通过执行诸如 set comp=!test:~0,4!
之类的操作来解决此问题,然后仅在 if 语句中使用 !comp!
变量.
最佳答案
npocmaka 正确诊断了 IF 命令有自己的特殊解析阶段以及变量扩展中的标记分隔符导致问题的问题。
替换也会导致问题:
:: This fails
if !test:String=!==test echo Success
正常扩展之所以有效,是因为它发生在IF解析之前,而延迟扩展发生在IF解析之后。
使用引号的另一种方法是转义有问题的字符。
:: Both of these work
if !test:~0^,4!==test echo Success
if !test:String^=!==test echo Success
关于batch-file - 为什么在 if 语句中无法获取延迟扩展变量的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20339341/