Jenkins Pipeline中关于“\”的转义字符
这个点有点绕,我帮你分三层来拆开(Groovy → Windows CMD → Python):
1️⃣ Groovy 里
你写的:
folderPath = "\\\\bosch.com\\dfsrb\\DfsCN\\loc\\Wx8..."
在 Groovy 字符串里,\
也有转义作用。
"\\"
→ 实际上是一个\
。"\\\\"
→ 实际上是两个\
。
所以 folderPath
的实际值是:
\\bosch.com\dfsrb\DfsCN\loc\Wx8...
(这是 Windows UNC 路径的正确写法)
2️⃣ 传给 Windows bat """ ... """
时
你这样拼:
--prcomment "Find PR SW(Non-Signed) from: ${folderPath}"
此时 Groovy 会替换 ${folderPath}
→
--prcomment "Find PR SW(Non-Signed) from: \\bosch.com\dfsrb\DfsCN..."
接着 cmd.exe
会解释这一行。
在 Windows CMD 里,\\
不会完全保留,最终传到 Python 时只剩一个 \
。
所以 Python 拿到的是:
\bosch.com\dfsrb...
3️⃣ 为什么要写 \\\\${folderPath}
如果你写成:
--prcomment "Find PR SW(Non-Signed) from: \\\\${folderPath}"
展开过程是:
-
Groovy 先把
\\\\${folderPath}
里的${folderPath}
替换 →\\\\ \\bosch.com\dfsrb...
-
Groovy 自身也会把
\\\\
解析成\\
。
所以整个字符串变成:--prcomment "Find PR SW(Non-Signed) from: \\bosch.com\dfsrb..."
-
到了 Windows
cmd.exe
时,\\
会再被解释一层 → Python 里拿到\\
。
这样最终 Python 里保留了双反斜杠 ✅。
🔑 关键点总结
- Groovy 字符串:
"\\\\"
→\\
- Windows CMD:
\\
→\
- Python 最终接收:所以必须多写一层
\\
,才能保证最后是\\
。
所以才要用:
--prcomment "Find PR SW(Non-Signed) from: \\\\${folderPath}"
要不要我画一张 流程图,把 \\
在 Groovy → CMD → Python 的变化过程直观展示?