1

У меня есть простой пакетный скрипт Windows, который запускается программой резервного копирования как предварительное резервное копирование. Он просто ищет последние дампы SQL, сжимает их в 10-кратный меньший по размеру архив 7zip, а затем резервное копирование в облачном хранилище берет его и отправляет в облачное хранилище для архивирования.

BATCH создает имя файла с датой DATE:07-10-2018-bak.7z

Но у меня проблема с файлом BATCH:

  • когда я запускаю его вручную, он работает очень хорошо и создает имя файла 07-10-2018-bak.7z в предоставленной папке
  • но когда я запускаю его с помощью программного обеспечения для резервного копирования (как пользователя SYSTEM) в качестве действия перед резервным копированием, вместо этого он создает подпапки для каждого DASH, например: \07\10\2018-bak.7z

Я сделал ECHO каждой командной строки, и она отрисовывается просто отлично. Даже если я запускаю отраженные строки вручную, они НЕ создают папки, но, как и должно быть, полное имя файла с указанием даты:

"c:\Program Files\7-Zip\7z.exe" a -mx7 -stl -y "D:\SQL\Backup-Last-Only\\**07-10-2018-bkp.7z**" "D:\SQL\Backup\SklSistem_FULL_sob.BAK"

Есть идеи, где я упустил смысл?

@echo off & setlocal enabledelayedexpansion
del D:\SQL\Backup-Last-Only\*.7z /Q
time/t|find "M" && set t=1,4* || set t=1,3*
for /f "skip=1 tokens=%t%" %%a in ('dir/a-d/tw/o-d D:\SQL\Backup\*FULL*.BAK^|find ":"') do (
 if %%a==%date:~-10% (
  set archdate=%%a
  set archdate=!archdate:.=-!
  "c:\Program Files\7-Zip\7z.exe" a -mx7 -stl -y "D:\SQL\Backup-Last-Only\!archdate!-bkp.7z" "D:\SQL\Backup\%%c" 
 ) else goto:eof
)

1 ответ1

0

Эта проблема, вероятно, вызвана различием в « формате даты » и выводе переменной среды %DATE% который генерирует сценарий при использовании « учетной записи, с которой вы запускаете его вручную », по сравнению с форматом, установленным для « учетной записи пользователя, которой программа резервного копирования выполняет его ".

Вам просто нужно использовать set archdate=!archdate:/=-! вместо того, чтобы set archdate=!archdate:.=-! заменить " / с - " вместо " . на - " из-за разницы в формате даты для проблемы, которую вы испытываете, и которую вы объясняете своей текущей логикой.

Кроме того, вам также следует рассмотреть возможность использования чего-то более универсального, такого как wmic os get LocalDateTime чтобы установить переменную, которая не зависит от формата даты / языкового стандарта, установленного для каждого профиля учетной записи пользователя - см. Locale-unaware% DATE% и% TIME% в пакетных файлах для некоторых деталей.

скрипт

@echo off & setlocal enabledelayedexpansion
del D:\SQL\Backup-Last-Only\*.7z /Q
time/t|find "M" && set t=1,4* || set t=1,3*
for /f "skip=1 tokens=%t%" %%a in ('dir/a-d/tw/o-d D:\SQL\Backup\*FULL*.BAK^|find ":"') do (
 if %%a==%date:~-10% (
  set archdate=%%a
  set archdate=!archdate:/=-!
  "c:\Program Files\7-Zip\7z.exe" a -mx7 -stl -y "D:\SQL\Backup-Last-Only\!archdate!-bkp.7z" "D:\SQL\Backup\%%c" 
 ) else goto:eof
)

Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .