在groovy中转义双反斜杠

时间:2018-10-16 16:06:05

标签: groovy

我有一个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

1 个答案:

答案 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