DOS在脚本中和交互模式下对“%”的处理差异

DOS是个正宗鸡肋。就说那个echo已经足够让人讨厌的了。今天我在试图输出“%”的时候遇到了很多的困难。说起来是我自己的水平太差,不过“%”这个特殊字符的行为着实非常怪异。现描述如下:

大家都知道,在DOS中,类似%PATH%这样的是环境变量,如果你echo %PATH%,它将输出%PATH%的值,而非%PATH%本身。不过如果我就是要输出“%PATH%”本身,那么应该怎么做呢?经过一番探索,我终于摸索出了方法:

set pa=%PA
set th=TH%
echo %pa%%th% > test.txt

也就是把字符串分割为两段,分别保存在两个变量中,然后将这两个变量串接。

不过新的问题来了。这三行命令在交互模式下,运行正常,一切OK,当你保存为bat文件的时候,你就会发现,执行的结果中,“%PATH%”的“%”没有了,成了光秃秃的“PATH”!

又是经过一番尝试,把上面的命令修改如下,并保存为bat文件:

set pa=%%PA
set th=TH%%
echo %pa%%th% > test.txt

这时输出正常了。原来,DOS命令在交互模式下和在脚本模式下会有所不同,所以,需要对百分号进行转义。

经过进一步的探索,我发现,在脚本模式下,所有的命令执行前,其中的变量都会被替换,然后才如同交互模式下一样的执行命令。而且重定向符号之前,都加上了输出设备信息如:»被替换成了 1»,等。

DOS真是诡异。。。

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License