Нужна помощь в написании простого пакетного сценария оболочки.

Вопрос или проблема

Я пытаюсь написать оболочку скрипта, которая будет работать на машине Windows Server; скрипт будет делать следующее:

Создать текстовую строку, которая будет путем и именем файла, которое будет следующим:

fms25_daily_20240922.zip

И я хочу, чтобы он записывал в D:\Daily:

Вот что я написал и что частично решает задачу:

for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
     set month=%%j
     set day=%%k
     set year=%%l
)
set datestr=D:\fms25_daily_%year%%month%%day%.zip
powershell Compress-Archive -LiteralPath ‘D:\Daily’ -DestinationPath %datestr%"

Когда я использую команду PowerShell для записи в конкретное местоположение, эта часть работает, но я хочу использовать имя файла, как описано выше.

Ответ или решение

Конечно! Давайте создадим простой пакетный скрипт, который будет формировать строку с именем файла на основе текущей даты и затем использовать этот файл для сжатия содержимого каталога D:\Daily в ZIP-архив.

Вот корректный пример вашего сценария:

@echo off
setlocal enabledelayedexpansion

:: Получаем текущую дату
for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
    set month=%%j
    set day=%%k
    set year=%%l
)

:: Формируем строку с именем файла
set datestr=D:\fms25_daily_%year%%month%%day%.zip

:: Проверяем, существует ли каталог
if not exist D:\Daily (
    echo Каталог D:\Daily не найден.
    exit /b
)

:: Сжимаем файлы в ZIP-архив
powershell -Command "Compress-Archive -LiteralPath 'D:\Daily\*' -DestinationPath '%datestr%'"

echo Архив успешно создан: %datestr%

Пояснение:

  1. @echo off – Отключает вывод команд в консоли, чтобы скрипт выглядел аккуратнее.
  2. setlocal enabledelayedexpansion – Позволяет использовать отложенную обработку переменных, что полезно при работе с динамически изменяемыми значениями переменных внутри циклов.
  3. Получение даты – С помощью цикла for мы разбиваем строку даты и сохраняем значения месяца, дня и года в отдельные переменные.
  4. Формирование имени файла – Мы создаем строку datestr, которая будет использоваться как имя выходного ZIP-файла.
  5. Проверка существования каталога – Скрипт проверяет, существует ли каталог D:\Daily. Если нет, он выводит сообщение об ошибке и завершает выполнение.
  6. Сжатие файлов с помощью PowerShell – Используется команда Compress-Archive, которая берет все файлы из D:\Daily и создает ZIP-файл с ранее заданным именем.
  7. Вывод сообщения об успешном завершении – В конце скрипта выводится сообщение об успешном создании архива.

Запустите этот скрипт, и он выполнит все необходимые действия по созданию ZIP-архива с указанным именем файла. Если у вас есть дополнительные вопросы или нужна помощь, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...