我有一个Groovy脚本,该脚本应该从远程计算机上的注册表项读取值。当我在本地计算机上或从网络上的另一台计算机上运行reg query命令时,我会获得正确的值。当我在本地计算机上运行Groovy脚本时,我也会得到正确的值(删除“ \\” +主机名+“ \”)。
运行下面列出的代码时,出现以下错误:
java.io.IOException: Cannot run program "\HKEY_LOCAL_MACHINE\SOFTWARE\Application\": CreateProcess error=2, The system cannot find the file specified
这使我相信我无法正确逃脱这条路。如果是正确的话,我该如何避免出现双反斜杠?
这是脚本:
def hostname = '10.1.1.2'
def outVal = ''
try {
output = 'reg query \\\\' + hostname + '\\HKEY_LOCAL_MACHINE\\SOFTWARE\\SynAEM\\UDF1 -v PatchGroup'.execute().text
outVal = output.tokenize(' ')[-1]
}
catch(Exception e) {
outVal = 'NotSpecified'
println e
}
println 'PatchGroup=' + outVal
return 0
答案 0 :(得分:2)
您的问题与反斜杠无关。这与优先级有关。您写的内容等同于:
output = 'reg query \\\\' + hostname +
('\\HKEY_LOCAL_MACHINE\\SOFTWARE\\SynAEM\\UDF1 -v PatchGroup'.execute().text)
execute()
方法正在尝试运行最后一个字符串,即注册表名称。您需要的是:
output = ('reg query \\\\' + hostname + '\\HKEY_LOCAL_MACHINE\\SOFTWARE\\SynAEM\\UDF1 -v PatchGroup').execute().text
或者可能更清晰一些:
output = "reg query \\\\$hostname\\HKEY_LOCAL_MACHINE\\SOFTWARE\\SynAEM\\UDF1 -v PatchGroup".execute().text