在Jenkins管道中执行文件名中有空格的批处理

Posted

技术标签:

【中文标题】在Jenkins管道中执行文件名中有空格的批处理【英文标题】:Execute Batch which have spaces in the file name in Jenkins pipeline 【发布时间】:2022-01-18 13:28:05 【问题描述】:

我在 Jenkins 管道中有以下批处理脚本。

echo Release Candidate : %some_env_var%
D:
CD D:\\abc\\def
cmd /c "3. Release to Framework Branch.cmd" %some_env_var%

当管道被执行时,我收到了这个错误。

'3.' is not recognized as an internal or external command,

我想我有问题,因为文件名有空格。我在互联网上找到错误。很多人都回答了当文件路径中有空格时该怎么办。不是文件名。

我也尝试了单引号之间的文件名。仍然得到同样的错误。我该如何解决这个问题?

这就是我的管道代码的样子。

pipeline 
    agent any

    stages 
        stage('9.3.ReleaseCodegenerator')
            steps
                bat """
                    echo Release Candidate : %some_env_var%
                    D:
                    CD D:\\abc\\def
                    cmd /c "3. Release to Framework Branch.cmd" %some_env_var%
                """
            
        
    


【问题讨论】:

试试cmd /D /S /C ""3. Release to Framework Branch.cmd" %some_env_var%"cmd /D /S /C ^""3. Release to Framework Branch.cmd" %some_env_var%^"N. B.: CD D:\\abc\\def 应改为 cd "D:\abc\def";当您写cd /D "D:\abc\def" 时,您甚至不需要先通过D: 切换驱动器...... call "3. Release to Framework Branch.cmd" %some_env_var% 我看不出有任何理由在 cmd 中使用 cmd。 【参考方案1】:

您遇到了无法转义嵌套在其他" 中的" 的问题。您没有插入任何管道/Groovy 变量,因此bat step 方法的多行字符串参数可以是文字字符串:

bat '''
  echo Release Candidate : %some_env_var%
  D:
  CD D:\\abc\\def
  cmd /c "3. Release to Framework Branch.cmd" %some_env_var%
'''

这将解决问题中的错误。

【讨论】:

以上是关于在Jenkins管道中执行文件名中有空格的批处理的主要内容,如果未能解决你的问题,请参考以下文章

linux 在批处理中,完整路径有空格的处理方式(加引號)

使用 jenkins 管道在 Windows 服务器上部署 jar

Jenkins多分支管道脚本

在 Jenkins 管道中处理秘密

Jenkins 管道函数 fileExist 可以处理通配符吗?

如何在声明性 Jenkins 管道的各个阶段之间传递变量?