在Jenkins文件中调用批处理脚本时,不会获取星号后的值

enyaitl3  于 9个月前  发布在  Jenkins
关注(0)|答案(2)|浏览(84)

当在Jenkins文件中调用批处理脚本时,它不会捕获/读取blog k *之后的值。
下面是我的批处理代码的几行:

SET HOUSE=GREENVILLA
SET NUMBER=10
SET HOUSE_NAME=%HOUSE%-%NUMBER%.*.y

我只看到HOUSE_NAME被设置为GREENVILLA-10.*.y而不是GREENVILLA-10.44.6.y
实际路径是\\servername\c\house\name,包含特定文件greenvilla-10.44.6.y。我希望将greenvilla-10.44.6.y赋值给环境变量HOUSE_NAME
批处理文件编码对我来说是一个新事物。我不确定是否错过了一些基本的东西。

jxct1oxe

jxct1oxe1#

处理批处理文件的 *Windows命令处理器 * cmd.exe不会像Linux shell解释器那样,将包含参数字符串的参数字符串替换为在文件系统中找到的所有文件/文件夹,这些文件/文件夹与参数模式匹配,但包含参数字符串的参数字符串包含在'中。批处理文件中必须使用代码才能获取与一个模式匹配的文件/文件夹名称。

set "HOUSE=GREENVILLA"
set "NUMBER=10"
set "HOUSE_NAME="
for %%I in ("\\servername\c\house\name\%HOUSE%-%NUMBER%.*.y") do set "HOUSE_NAME=%%I"
if defined HOUSE_NAME echo "%HOUSE_NAME%"

在目录\\servername\c\house\name中找到的最后一个非隐藏文件匹配的搜索模式GREENVILLA-10.*.y被分配给环境变量HOUSE_NAME与完整路径,因为已经指定了搜索模式与文件夹路径。
最后找到的与该模式匹配的文件是由文件系统确定的。NTFS返回与FAT 16、FAT32和exFAT驱动器不同的模式匹配的文件列表。但是,我认为目录总是只包含一个与该模式匹配的文件。
要了解所使用的命令及其工作方式,请打开command prompt窗口,在那里执行以下命令,并仔细阅读显示的每个命令的帮助页面。

  • echo /?
  • for /?
  • if /?
  • set /?
rm5edbpk

rm5edbpk2#

解决方案是我必须替换/删除任何额外的字符(空格,*),当传递一个输入。我有一个特殊的字符(“)与数字一起传入,其中批处理认为这是路径的结束,并没有给我给予其他值。在将值传递给jenkinsfile中的批处理脚本之前使用了Inputval = Inputval.replaceAll("\\W", "")

相关问题