groovy 如何将目录路径作为参数传递给批处理文件

ujv3wf0j  于 2023-06-05  发布在  其他
关注(0)|答案(1)|浏览(177)

我正在编写一个管道脚本来调用一个批处理文件,该批处理文件又将调用.wsf脚本。我正在尝试执行一个带有一个参数的批处理文件。参数是文件路径。我可以让Jenkins脚本执行批处理文件,但我不能成功地将文件路径作为参数传递。
.wsf脚本(使用VBScript)使用输入目录构建完整的文件路径。它使用反斜杠,因此我假设传递给批处理文件的路径应该使用反斜杠定义。
我已经尝试了许多不同的建议语法,但没有任何工作。该脚本要么由于语法错误而无法运行,要么只是将变量名作为文字字符串传递,而不是我期望的赋值。
实际的.bat文件的名称中确实有一个&符号,因此我以类似的方式命名了这个示例。
这是我目前正在尝试的:

environment {
        ROOT_DIR = 'http:\\\\myserver.mycity.mycompany.com\\svn\\PRODUCT\\trunk'
    }
...
        stage('Copy my files') {
            steps {
                bat script: "ABC_123\\Rock^&Roll42.bat", args: "\"${env.ROOT_DIR }\""
            }
        }
4ktjp1zp

4ktjp1zp1#

根据文档,args参数不存在,因此您可能想尝试:

bat script: "ABC_123\\Rock^&Roll42.bat ${env.ROOT_DIR}"

作为另一种选择,当变量在environment块中定义时,它不仅可以在管道中使用env.ROOT_DIR,而且还可以在您使用的shell中创建为环境变量。因此,它可以直接在cmd/powershell/sh shell中访问(取决于shell语法),使用变量作为普通shell变量,一些示例:

  1. cmd可以通过在变量名的末尾和开头附加%来使用环境变量,因此它将是%ROOT_DIR%
  2. sh可以通过使用$来使用环境变量,因此它将是$ROOT_DIR
    所以,我会试试这个:
bat script: "ABC_123\\Rock^&Roll42.bat %ROOT_DIR%"

在上面的例子中,变量替换并没有发生在Groovy上,而是直接由正在执行的shell完成。建议将机密传递给 shell 步骤。

相关问题