Perl Windows 命令失败

Perl Windows command fails

我正在尝试 运行 在网络计算机上进行简单查询以获取其 Windows 版本。从命令行使用时,此命令 运行s 和 returns 预期结果:

psexec \comp_name reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId

但是当 运行 从 Perl 使用:

system("psexec \\$comp_name reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v ReleaseId")

我从 REG 得到错误 ERROR: Invalid key name. 考虑到这两个命令是相同的,我无法弄清楚为什么当从 Perl 运行 中使用它时我会收到错误。我唯一的假设是它解决报价的方式。请注意,无论我使用 system、exec 还是 ``,此问题都存在。有什么建议吗?

您需要将所有反斜杠加倍:

system("psexec \\$comp_name reg query 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v ReleaseId")

将所有反斜杠加倍将解决问题是的,但是当使用单个外部引号和内部双引号时无需添加双反斜杠并且更易于阅读。

system('psexec \$comp_name reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ReleaseId');