批处理set中%的用法

经常看到这样的用法call set "str=%%str:%char1%=%char2%%%" ,最外层怎么需要两对百分号,不是因该set %PATH:str1=str2%么?

%是个ESCAPE字符,通常将之译为转义字符,但也有更形象的译名脱逸字符、逃逸字符等。也就是说%不仅仅将与其相关的特定字符串转义并替换为特定字符串,而且自身也会被“脱逸”。而且类似于C语言中的转义字符"\",双%会转义并脱逸为单%,四%则脱为双%。

除了for循环变量外,批处理变量的脱逸符要成对使用,就像数学四则运算的括号一样。
call set b=%%a:~0,%c%%%
就你举得这个例子来讲,最里面一对单%相当于四则运算里的小括号,外面的一对双%相当于中括号,再有3 个%就相当于大括号
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-05
是set %PATH:str1=str2%没错,只是str1被%char1%代替,str2被%char2%代替,PATH被%str%代替了而已。
第2个回答  2011-12-05
因为他是变量里面还有变量
于是最外围的变量就是用的两个了啊
同样的
还能用到3个%的追问

比如这一段
@echo off
set c=2
set a=123
call set b=%%a:~0,%c%%%
echo %b%
pause
%a:~0,%c%%不就是12吗,那最外层%12%怎么解释

相似回答