2 回答
TA贡献1911条经验 获得超7个赞
好的,从德国论坛得到了一些启发。
在这种情况下回声不起作用的原因是:
echo 尝试将其值输出到 stdout - 它应该链接到 UI 元素。在远程机器上调用后,没有可以访问的 UI 元素。所以所有的输出都将进入涅盘。
这就是为什么它写入文件但没有内容的原因。
TA贡献1921条经验 获得超9个赞
问题出在您为 CMD 命令行构建的字符串中。让我们看看
{ "CMD.EXE /C " + '"' + "echo.exe test 123 4 5 6 7" + '"' + " " + "> " + '"' + @"C:\temp10\Pythontest.py" + '"' }
这将是实际的字符串:
CMD.EXE /c "echo.exe test 123 4 5 6 7" > "C:\temp10\Pythontest.py"
CMD 有自己的处理命令行参数的规则。这是来自 CMD 帮助的描述,可以通过CMD /?
在命令提示符下键入来查看
如果指定了 /C 或 /K,则切换后的命令行的其余部分将作为命令行处理,其中使用以下逻辑处理引号 (") 字符:
如果满足以下所有条件,则保留命令行上的引号字符:
没有 /S 开关
正好两个引号字符
两个引号字符之间没有特殊字符,其中 special 是以下之一: &<>()@^|
两个引号字符之间有一个或多个空格字符
两个引号字符之间的字符串是可执行文件的名称。
否则,旧的行为是查看第一个字符是否是引号字符,如果是,则去掉前导字符并删除命令行上的最后一个引号字符,保留最后一个引号字符之后的任何文本。
显然,案例 1 未涵盖您的字符串,因此案例 2 将应用于您的命令行字符串。这意味着 CMD 将/C
在执行 switch 之前删除第一个和最后一个引号。所以CMD会尝试执行这个:
echo.exe test 123 4 5 6 7" > "C:\temp10\Pythontest.py
现在您看到重定向运算符位于引号之间,它现在只是一个>
用引号括起来的文字,因此不会执行重定向,这将打印在控制台上:
exe 测试 123 4 5 6 7" > "C:\temp10\Pythontest.py
请注意,这echo
是 CMD 的内部命令,Windows 确实有任何名为echo.exe
. 通过使用,echo.exe
您实际上是在使用内部echo
命令,这.exe
是它的参数。echo
总是跳过第一个字符,因此.
被消除并exe
打印。
所以这将是按预期工作的正确字符串:
CMD.EXE /c echo test 123 4 5 6 7 > "C:\temp10\Pythontest.py"
因此
object[] theProcessToRun2 = { "CMD.EXE /C " + "echo test 123 4 5 6 7" + " > " + '"' + @"C:\temp10\Pythontest.py" + '"' };
- 2 回答
- 0 关注
- 277 浏览
添加回答
举报