Batch file 在jenkins管道中将局部变量传递给带有returnStdout的批处理

Batch file 在jenkins管道中将局部变量传递给带有returnStdout的批处理,batch-file,jenkins-pipeline,Batch File,Jenkins Pipeline,当我尝试在如下所示的batch命令中替换date\u append变量时,它并没有准确地检索日期,而是显示为Snapshot-${date\u append}.onp 确切的问题在哪里 stage('test') { steps { script { date_append= "${new Date().format('yyyyMMdd_hhmmss')}"

当我尝试在如下所示的batch命令中替换date\u append变量时,它并没有准确地检索日期,而是显示为Snapshot-${date\u append}.onp

确切的问题在哪里

 stage('test') {
        steps {
                script
                {
                    date_append= "${new Date().format('yyyyMMdd_hhmmss')}"
                    echo "${date_append}"

                    issue=bat(label: '', returnStdout: true, script: '''echo off
             "C:\\Desktop\\eme.exe" /v 
         /source:SYS/dbname@localhost:port/env{test} AS SYSDBA 
        /target:C:\\desktop\\file-${date_append}.xml{test}  
       /scriptfile:C:\\script\\oldscript.sql
        @IF  %ERRORLEVEL% NEQ 61 (
   @echo "issue is FALSE"
  )''')
              }     
           }
       }

要在goovy中使用变量内部shell脚本,您需要使用gstring,即
而不是

因此,您的代码只需要将
'
的用法替换为
”,或者将当前使用的
替换为
,(以下我已将您的双引号替换为双引号):

有关GString的更多信息,请参阅:

这对我很有用

  issue=bat(label: '', returnStdout: true, script: """echo off
         "C:\\Desktop\\eme.exe" /v
     /source:SYS/dbname@localhost:port/env{test} AS SYSDBA
    /target:C:\\desktop\\file-${date_append}.xml{test}
   /scriptfile:C:\\script\\oldscript.sql
    IF  %ERRORLEVEL% NEQ 61 (
   echo \"issue is FALSE\"
  )""")

这看起来不像…它是一个管道代码。在脚本中,iam正在执行bat,issue=bat(标签:“”,returnStdout:true,脚本:“”“echo off”C:\\Desktop\\eme.exe”/v/source:SYS/dbname@localhost:port/env{test}AS SYSDBA/target:C:\\desktop\\file-${date\u append}.xml{test}/scriptfile:C:\\script\\oldscript.sql如果%ERRORLEVEL%NEQ 61(echo“issue is FALSE”)“”)谢谢@metalisticpain。它根据需要使用变量,但文件名/目录在某些地方不可读,因为我在执行此命令时遇到了下面的问题,默认情况下,它移动到if循环,文件名、目录名或卷标语法不正确。我不知道抱歉。除非你需要做更多的事情,否则可能会提出一个新问题\escape?在'C:\\\`上,它的工作原理如下,谢谢!!issue=bat(标签:'',returnStdout:true,脚本:''echo off“C:\\Desktop\\eme.exe”/v/来源:SYS/dbname@localhost:port/env{test}AS SYSDBA/target:C:\\desktop\\file-${date\u append}.xml{test}/scriptfile:C:\\script\\oldscript.sql如果%ERRORLEVEL%NEQ 61(echo \“issue is FALSE\”)
  issue=bat(label: '', returnStdout: true, script: """echo off
         "C:\\Desktop\\eme.exe" /v
     /source:SYS/dbname@localhost:port/env{test} AS SYSDBA
    /target:C:\\desktop\\file-${date_append}.xml{test}
   /scriptfile:C:\\script\\oldscript.sql
    IF  %ERRORLEVEL% NEQ 61 (
   echo \"issue is FALSE\"
  )""")