|
|
本帖最后由 qzwqzw 于 2013-2-3 13:40 编辑
前不久的一个小代码里出现了一个运行时错误
由此引出set/p对提示字符串中含双引号时的特殊处理
首先看以下测试内容
D:\>set /p var="test"<nul
test
D:\>set /p var="te st"<nul
te st
D:\>set /p var="te st",other<nul
te st
D:\>set /p var=pre "te st",other<nul
pre "te st",other
D:\>set /p var=" s1 " s2 " s3 "<nul
s1 " s2 " s3
D:\>set /p var=" s1 < s2 > s3 "<nul
s1 < s2 > s3
D:\>set /p var=" s1 " ; , = " s3 "<nul
s1 " ; , = " s3
D:\>
总的来说
如果set/p中的提示字符串中的首字符是双引号
则它会自动脱去提示字符串中第一个以及最后一个双引号
并可以脱去最后一个双引号之后的字符串内容
简单的说
它会自动脱去字符串最外层的双引号
这与变量修饰符%~var的作用相似
也与for/f对字符串引号的处理规则相似
相比前二者它可以一般化处理内部引号对中含分隔符的情况
也就是说这个含有内部分隔符的字符串不会被切分 |
|