Вопрос или проблема
Я пытаюсь написать оболочку скрипта, которая будет работать на машине 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%
Пояснение:
- @echo off – Отключает вывод команд в консоли, чтобы скрипт выглядел аккуратнее.
- setlocal enabledelayedexpansion – Позволяет использовать отложенную обработку переменных, что полезно при работе с динамически изменяемыми значениями переменных внутри циклов.
- Получение даты – С помощью цикла
for
мы разбиваем строку даты и сохраняем значения месяца, дня и года в отдельные переменные. - Формирование имени файла – Мы создаем строку
datestr
, которая будет использоваться как имя выходного ZIP-файла. - Проверка существования каталога – Скрипт проверяет, существует ли каталог
D:\Daily
. Если нет, он выводит сообщение об ошибке и завершает выполнение. - Сжатие файлов с помощью PowerShell – Используется команда
Compress-Archive
, которая берет все файлы изD:\Daily
и создает ZIP-файл с ранее заданным именем. - Вывод сообщения об успешном завершении – В конце скрипта выводится сообщение об успешном создании архива.
Запустите этот скрипт, и он выполнит все необходимые действия по созданию ZIP-архива с указанным именем файла. Если у вас есть дополнительные вопросы или нужна помощь, не стесняйтесь спрашивать!