- ·上一篇文章:批处理建立无名文件
- ·下一篇文章:批处理调整分辨率
- ·百度中搜索更多的关于“复合语句内部子语句的括号问题”相关内容
- ·谷歌中搜索更多的关于“复合语句内部子语句的括号问题”相关内容
- ******申明******
- 本站文章内容有部分为收录网络中其他网友内容,DOS资源站不保证所有的代码都适合你使用。
- 由于编辑匆忙,有可能造成某些脚本文件出现丢失代码或代码无法运行的情况,请网友根据情况自行修改。
- 如果能将出错部分反馈给我,那就更好了。
复合语句内部子语句的括号问题
先看几个会产生问题的例子,这几例都含有子语句:
1、
for /f "tokens=1-4" %%a in ("1 2 3 9") do (
set /p anwser=请输入答案:
set /a result=(%%a+%%b)/%%c
if %anwser%==%result% echo 100分
)
2、
set /p n=请输入QQ号:
if %n%==10001 (
echo 你好,马总!(你真是马总吗?)
start http://www.cmdos.net
) else rem do something else
3、
if 1==1 (
start /w /min mshta vbscript:createobject("wscript.shell").run("notepad")(window.close)
)
4、
@echo off
(echo dim ws
echo set ws=WScript.CreateObject("WScript.Shell")
echo ws.run "notepad")>test.vbs
运行结果分别出现
第一例:此时不应有 /%c。
第二例:不管输入是否为10001,都会打开http://www.cmdos.net
第三例:此时不应有run("notepad")(window.close)。
第四例:在命令行上显示了dim ws
set ws=WScript.CreateObject("WScript.Shell"
而test.vbs里面只有ws.run "notepad")
解决办法是:
在子语句的反括号“)”前面加上转义符号^,即写成“^)”
原因:如果子语句本身是一个复合语句(比如if、for之类),则它的反括号“)”会被正确保留。
但如果子语句本身不是一个复合语句,却含有反括号“)”,则它的“)”会被当成复合语句的结束标志。

