Go中的代码
out, err := exec.Command("wmic", "computersystem", "where", "name=\"%computername%\"", "call", "rename", "name", "newname").CombinedOutput()
if err != nil {
fmt.Println("err: ", err)
fmt.Println("out: ", string(out))
}
error和output(err:
和out:
是我加的):
err: exit status 0x80041017
out: Node - S
ERROR:
Description = Invalid query
但直接在CMD中运行成功:
wmic computersystem where name="%computername%" rename newname
Executing (\\S\ROOT\CIMV2:Win32_ComputerSystem.Name="S")->rename()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ReturnValue = 0;
};
1条答案
按热度按时间62lalag41#
如
os/exec
文档所述:在Windows上,进程将整个命令行作为单个字符串接收,并自行进行解析。Command使用与使用CommandLineToArgvW的应用程序兼容的算法(这是最常见的方式)将Args组合并引用到命令行字符串中。值得注意的例外是msiexec.exe和cmd.exe(以及所有批处理文件),它们具有不同的取消引用算法。在这些或其他类似情况下,您可以自己使用引号,并在SysProcAttr.CmdLine中提供完整的命令行,而将Args留空。