При вызове пакетного скрипта внутри файла Jenkins не получает значения после звездочки - PullRequest
0 голосов
/ 14 февраля 2020

При вызове пакетного скрипта из файла Jenkins он не перехватывает / не читает значение после звездочки *.

Ниже приведены несколько строк моего пакетного кода:

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.

Кодирование пакетных файлов - это новое для меня. Я не уверен, что пропущу некоторые базовые вещи c здесь.

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Командный процессор Windows cmd.exe, обрабатывающий пакетный файл, не заменяет строки аргументов, содержащие подстановочный знак, всеми файлами / папками, найденными в файловой системе, которые соответствуют шаблону подстановочного знака, как это делают интерпретаторы оболочки Linux, кроме строки аргумента, содержащей подстановочный знак заключен в '. В пакетном файле должен использоваться код для получения имен файлов / папок, соответствующих шаблону с подстановочными знаками.

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 возвращает список файлов, соответствующих шаблону, отличному от дисков FAT16, FAT32 и exFAT. Тем не менее, я предполагаю, что каталог всегда содержит только один файл, соответствующий шаблону подстановки.

Чтобы понять используемые команды и их работу, откройте окно командной строки , выполните следующие команды: и внимательно прочитайте все справочные страницы, отображаемые для каждой команды.

  • echo /?
  • for /?
  • if /?
  • set /?
0 голосов
/ 14 февраля 2020

решение было, я должен заменить / удалить любые дополнительные символы (пробел, *), при передаче ввода. У меня был специальный символ ("), переданный с номером, где пакет решил, что это конец пути и не дал мне другие значения. Использовал Inputval = Inputval.replaceAll("\\W", "") перед передачей значения в пакетный скрипт в jenkinsfile.

...