函数调用中使用%与变量:批处理set /a命令变量替换问题
批处理变量动态截取的正确写法
在批处理里,直接用%嵌套引用变量做字符串截取会因为变量解析顺序问题失效,以下是两种可行的解决方法:
方法1:启用延迟扩展
- 先在脚本开头开启延迟扩展功能:
setlocal enabledelayedexpansion
- 用
!替代%引用动态变量d和l:
set mm=!r:~%d%,%l%!
如果r也是在同一个代码块(比如if/for循环)里定义的,就把r也用!包裹:
set mm=!r:~!d!,!l!!
注意:如果截取的结果不是数字,别用set /a,直接用set即可,避免算术解析报错。
方法2:用call命令二次解析变量
不需要开启延迟扩展,通过call让命令二次解析变量:
call set mm=%%r:~%d%,%l%%%
这里的%%会在第一次解析时变成单个%,二次解析时就会把%d%和%l%替换成实际数值,最终等效于set mm=%r:~2,3%。
内容的提问来源于stack exchange,提问作者Global.access.software
相关产品推荐
相关产品推荐

