Первая ошибка в строке:
set path="C:\Program Files\WinRAR\";%path%
Правильно будет
set "path=C:\Program Files\WinRAR;%path%"
Путь к папке в списке разделенных точкой с запятой путей к папкам, назначенных переменной среды PATH
, не должензаключать в двойные кавычки, за исключением того, что путь к папке содержит одну или несколько точек с запятой.Путь к папке также должен быть без обратной косой черты в конце.
Однако эта строка на самом деле не является проблемой и, конечно, также не нужна вообще, как это видно из кода пакетного файла ниже.
См. Также Почему нет строкового вывода с 'echo% var%' после использования 'set var = text' в командной строке? для объяснения, почему остался один "
, оставленный именем переменной средыи еще один "
в конце строки аргумента.
Вторая ошибка - вся строка:
set gerDate=%date:~0,2%-%date:~3,2%-%date:~6,4%
Эта строка, скорее всего, является реальной проблемой.
Я полагаю, что для вашей учетной записи пользователя настроена страна Германия, в результате чего формат даты DD.MM.YYYY
означает 25.09.2018
.
Но Jenkins работает как служба с системной учетной записью, которая, скорее всего, используетдругой формат даты, такой как, например, английский, США, в результате чего строка даты Tue, 09/25/2018
.
Итак, getDate
равно Tu-, -9/25
вместо 25-09-2018
, а /
интерпретируется как разделитель каталогов, такой как \
, которыйнастоящий разделитель каталогов в Windows.
По этой причине Jenkins_%gerDate%_.zip
становится при исполнении Jenkins Jenkins_Tu-, -9/25_.zip
и Rar.exe
не может найти в текущем каталоге подкаталог Jenkins_Tu-, -9
для создания файла 25_HH-MM.zip
в этом каталоге.
См. также % date% приводит к другому результату в пакетном файле при запуске из запланированных задач на сервере 2016 .
Третья ошибка заключается в использованииRar.exe
с указанием расширения файла .zip
.Инструкция для консольной версии Rar.exe
представляет собой текстовый файл Rar.txt
в папке с программными файлами WinRAR .В верхней части этого текстового файла можно прочитать, что Rar.exe
поддерживает только RAR
формат файла архива.Таким образом, все созданные архивы представляют собой RAR, а не ZIP-архивы, хотя расширение файла .zip
.
Интересно, что переключатель -ag
используется с HH-MM
, хотя Rar.exe
также поддерживаетдобавление не только текущего часа и минуты, но и текущей даты в настраиваемом формате с использованием -ag
для архивирования имени файла перед расширением файла.
Таким образом, командная строка set gerDate=...
вообще не требуется при создании пакетаприведенный ниже код не зависит от настроек региона используемой учетной записи.
Далее руководство по Rar.exe
описывает, что *.*
не интерпретируется как *
, как это делает командный процессор Windows.*.*
означает, что на самом деле файл для добавления в архив должен иметь точку в имени файла, или Rar.exe
игнорирует файл.Похоже, что каталог должен быть рекурсивно добавлен в архив с обновлением существующих файлов в архиве и с исключением двух каталогов.По этой причине следует использовать только *
или не использовать подстановочный знак в конце пути к папке для архива, так как *
является значением по умолчанию, когда подстановочный знак не используется.
См. Также Просто сожмите 1 папкув пакете с командной строкой WinRAR? для объяснения, почему указанный путь к папке в приведенном ниже коде пакетного файла заканчивается обратной косой чертой.
Rar.exe
может создать файл архива в любом существующем каталоге.Нет необходимости создавать его в текущем каталоге и затем перемещать файл в каталог назначения.
Руководство Rar.txt
содержит в нижней части возможные коды выхода.
Так что этоможно проверить, произошла ли какая-либо ошибка с if errorlevel 1
, что означает, что код завершения больше или равен 1 , как описано с помощью команды IF , выводится при запуске в окне командной строки if /?
.
if not errorlevel 1
противоположен, то есть код выхода ниже 1 , что означает равное 0
, так как Rar.exe
никогда не завершается с отрицательным значением, так как почти все приложения и команды.
Итак, давайте объединим всю эту информацию в новый пакетный файл:
@echo off
color 1f
title [Backup for Jenkins]
rem WinRAR backup, base folder skipped
"C:\Program Files\WinRAR\rar.exe" u -agYYYY-MM-DD_HH-MM -ep1 -r -inul -x"C:\[Path for 1st skipped folder]\" -x"C:\[Path for 2nd skipped folder]" "C:\[Path to destination folder - network drive]\Jenkins_.rar" "C:\[Path to compress all the following files]\"
if not errorlevel 1 color 2f & title [Backup successful]
echo Backup completed on %DATE% %TIME%
echo/
pause
Я также добавил -inul
, который отключает весь вывод на консоль и неявно приводит к тому, что пользователь никогда не запрашивает, как при использовании дополнительно переключателя -y
, который в противном случае должен использоваться здесь, например при использовании -icdpq
вместо -inul
чтобы получить выходные сообщения об ошибках, которые захватывает Дженкинс, но никакой другой информации о состоянии.