为了账号安全,请及时绑定邮箱和手机立即绑定

CMD /C 和 echo 在远程机器上调用命令

CMD /C 和 echo 在远程机器上调用命令

C#
小唯快跑啊 2021-12-05 14:50:39
如果我要将文件写入远程计算机上的共享文件夹,则会出现一个神秘现象。object[] theProcessToRun2 = { "CMD.EXE /C " + '"' + "echo.exe test 123 4 5 6 7" + '"' + " " + "> " + '"' + @"C:\temp10\Pythontest.py" + '"' };using (var managementClass = new ManagementClass(serviceScope, new ManagementPath("Win32_Process"), new ObjectGetOptions())){managementClass.InvokeMethod("Create", theProcessToRun2);}如果我在远程机器的 cmd 行上写相同的代码,它会写一个文件。ServiceScope 等是正确的(我在远程机器上用 python 脚本尝试过它并且工作正常......所以这里不是错误)。我做错了什么,或者没有正确地看到它?
查看完整描述

2 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

好的,从德国论坛得到了一些启发。

在这种情况下回声不起作用的原因是:

echo 尝试将其值输出到 stdout - 它应该链接到 UI 元素。在远程机器上调用后,没有可以访问的 UI 元素。所以所有的输出都将进入涅盘。

这就是为什么它写入文件但没有内容的原因。


查看完整回答
反对 回复 2021-12-05
?
郎朗坤

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,则切换后的命令行的其余部分将作为命令行处理,其中使用以下逻辑处理引号 (") 字符:

  1. 如果满足以下所有条件,则保留命令行上的引号字符:

    • 没有 /S 开关

    • 正好两个引号字符

    • 两个引号字符之间没有特殊字符,其中 special 是以下之一: &<>()@^|

    • 两个引号字符之间有一个或多个空格字符

    • 两个引号字符之间的字符串是可执行文件的名称。

  2. 否则,旧的行为是查看第一个字符是否是引号字符,如果是,则去掉前导字符并删除命令行上的最后一个引号字符,保留最后一个引号字符之后的任何文本。

显然,案例 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" + '"' };



查看完整回答
反对 回复 2021-12-05
  • 2 回答
  • 0 关注
  • 236 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信