Jenkins Groovy脚本删除文件名子串报0XFFFF错误如何解决?
错误原因
你遇到的unexpected char : 0XFFFF报错是因为在sh块的shell脚本片段中直接混合了Groovy字符串替换逻辑,GString插值解析和shell语法产生了冲突。你当前的写法将Groovy的字符串替换操作直接嵌入到了sh脚本的引号内部,Jenkins流水线在解析执行时出现了字符识别异常。
正确实现方式
所有Groovy层面的路径计算、字符串替换操作建议提前在Groovy代码层完成,再将处理完成的变量传递给sh命令执行,避免两种语法混合产生冲突:
findFiles(glob: filePattern).each { file -> // 提前在Groovy层完成路径读取和子串替换 def originalPath = file.path def targetPath = originalPath.replace("-unsigned", "") // 仅将最终处理好的路径传入shell命令执行 sh "mv '${originalPath}' '${targetPath}'" }
如果路径中包含空格、特殊符号,也可以改用如下更安全的参数化sh写法:
findFiles(glob: filePattern).each { file -> def originalPath = file.path def targetPath = originalPath.replace("-unsigned", "") sh( script: "mv \$1 \$2", args: [originalPath, targetPath] ) }
额外注意点
- 正式执行重命名前可以先加
println "原路径:${originalPath},新路径:${targetPath}"打印路径,确认替换逻辑符合预期 - 如果需要批量处理大量文件,可以先加
if(originalPath.contains("-unsigned"))判断,避免对不需要重命名的文件执行mv操作
内容的提问来源于stack exchange,提问作者sai kumar
相关产品推荐
相关产品推荐

