我正在尝试运行cmd.exe "D:a.bat"
但我没有得到任何东西。
通过双击运行批处理文件时,它可以正常工作。
批处理文件中的代码是:
echo teztttttt >> a.txt
有人可以帮助我理解为什么使用cmd.exe运行命令不会产生预期的结果。
答案 0 :(得分:5)
通常,您无需调用cmd.exe来执行批处理脚本。一个批处理脚本调用另一个批处理脚本的典型方法是使用call "D:a.bat" >> a.txt
。
但我会假设您有充分的理由通过cmd.exe运行脚本。
阅读文档(cmd /?
从命令提示符处),您将看到必须在命令前添加/C
。
cmd.exe /c "D:a.bat"
您所显示的代码不是问题,但如果您仔细阅读帮助,您会发现cmd.exe如何处理报价有一些有趣的业务。
如果由于空格和/或毒药字符而必须引用脚本,并且后面的参数也带有引号,那么您可能无法获得所需内容,因为cmd.exe将删除第一个和最后一个引号。
例如:
cmd.exe /c "my script.bat" "this&that"
将尝试(并且很可能失败)执行
my script.bat" "this&that
,其中
my
是第一个程序名称,script.bat" "this
是第一个参数&
是命令连接运算符(未引用或转义)that
是第二个命令通过将整个命令行包含在一组额外的转义引号中来解决问题:
cmd.exe /c ^""my script.bat" "this&that"^"
外部引号最初是转义的,因此&
已正确引用。然后,当cmd.exe剥离外引号时,将保留正确的命令字符串。