batch-file - 为什么在 if 语句中无法获取延迟扩展变量的子字符串?

标签 batch-file if-statement cmd delayedvariableexpansion

为什么字符串操作在 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/

相关文章:

IOS 应用程序运行时命令行失败

powershell - 从批处理文件运行 Powershell 脚本中的参数

c# - 如何通过 C# 将字符串传递给批处理文件以及批处理文件如何接受字符串参数?

batch-file - 输出变量的 CMD 子串提取

python - 将一个值引用到列表时,是否可以在 python 中快速检查一个值是否等于另一个值?

windows - 通过批处理文件关机进入无限循环?

mysql - 2273 毫秒插入 7679 条记录,这是快还是慢?

c# - 在 if 语句中检查多个数组是否为 null

javascript - 如果未使用 Protractor 选择,请选择复选框

windows - 在 Windows 7 命令行中更改 Putty session 的标题文本