如何在Jenkins中向批处理文件传递含双引号的参数?
解决Jenkins传递含双引号的JSON参数给批处理的问题
问题根源是Windows批处理的参数解析规则:当参数包含双引号时,直接传递会导致内部引号被当作参数分隔符,拆分原本的完整内容。要解决动态内容的引号转义问题,只需在Jenkins脚本中对返回的JSON字符串做批量替换,把每个双引号替换成两个连续双引号(批处理的转义规则)。
修改后的完整脚本如下:
stage('test-stage') { steps { script { final String response = bat(script:'curl -X "GET" "www.someworkingurl.com" -H "accept: application/json"', returnStdout: true).trim() echo response // 转义字符串中的双引号,适配Windows批处理参数要求 final String escapedResponse = response.replace('"', '""') bat """ "C:\\somepathto\\mybatchfile.cmd" "${escapedResponse}" """ } } }
原理说明
Windows批处理中,用双引号包裹参数时,参数内部的双引号必须用""(两个连续双引号)来转义。这样批处理会将整个转义后的字符串识别为单个参数,并且在读取参数(比如用%1)时,自动把""还原为单个",保证JSON内容的完整性。
比如原JSON内容{"name":"test"},转义后变为{""name"":""test""},传递给批处理后,%1获取到的内容就是原始的{"name":"test"}。
内容的提问来源于stack exchange,提问作者Shadow
相关产品推荐
相关产品推荐

