在不使用反引号的情况下运行具有包含Jenkins Pipeline中空格的路径的PowerShell脚本文件

时间:2018-12-03 10:40:25

标签: powershell jenkins jenkins-pipeline

我想从Jenkins Pipeline运行以下PowerShell脚本文件:

".\Folder With Spaces\script.ps1"

我已经可以通过以下步骤定义做到这一点:

powershell(script: '.\\Folder` With` Spaces\\script.ps1')

所以我必须记住:

  • 使用双反斜杠转义反斜杠(Groovy语法)
  • 使用反引号(PowerShell语法)逃逸空间

我希望至少避免这种情况。例如,是否可以避免使用反引号转义? (出于某种原因,将其放在“”之间似乎无效。)

2 个答案:

答案 0 :(得分:1)

我发现可以像这样使用&运算符或调用运算符:

powershell(script: "& '.\\Folder With Spaces\\script.ps1'")

这消除了反引号的转义,并且应该使生活稍微容易些。

答案 1 :(得分:1)

为避免转义反斜杠,可以如下使用slashy stringsdollar slashy strings。但是,不能将反斜杠用作斜杠字符串中的最后一个字符,因为它会转义/。当然,在使用slashy strings时也必须转义斜线。

String slashy = /String with \ /
echo slashy
assert slashy == 'String with \\ '

// won't work
// String slashy = /String with \/

String dollarSlashy = $/String with / and \/$
echo dollarSlashy
assert dollarSlashy == 'String with / and \\'

当然,您将失去使用\n在字符串中包含换行符\和其他特殊字符的可能性。但是,由于斜线和美元斜线字符串都具有多行支持,因此至少可以包含换行符,如:

String slashyWithNewline = /String with \/ and \ 
with newline/
echo slashyWithNewline
assert slashyWithNewline == 'String with / and \\ \nwith newline'

String dollarSlashyWithNewline = $/String with / and \ 
with newline/$
echo dollarSlashyWithNewline
assert dollarSlashyWithNewline == 'String with / and \\ \nwith newline'

如果将其与您自己的答案结合在一起,则不需要两个转义。