Используйте 7zip для включения файлов только с * текущей датой *
Я создаю и архивирую файл с отметкой текущей даты 7-zip. Я могу использовать следующий переключатель, чтобы создать ZIP-файл для добавления:
7z -tzi C:\RACHAEL\my_work\dbs\MyDb\%DATE:~11,4%\%DATE:~5,2%\MyDb_bak_%DATE:~11,4%-%DATE:~5,2%-%DATE:~8,2%.bak.zip
но добавив "-i!" команда не находит указанный файл
7z -tzi C:\RACHAEL\my_work\dbs\MyDb\%DATE:~11,4%\%DATE:~5,2%\MyDb_bak_%DATE:~11,4%-%DATE:~5,2%-%DATE:~8,2%.bak.zip -i!C:\RACHAEL\my_work\dbs\MyDb_bak_<get_current_date_in_correct_format>.bak
Как добиться расположения файла в этом каталоге, содержащем текущую отформатированную дату из пакетного файла? Есть ли побег персонажа? "%" Не обеспечивает эту цель в 7zip, что, как я предполагал, будет.
Заранее спасибо!
3 ответа
Пропал символ побега ^
до пути, который я пытался добавить в успешно заархивированный каталог, созданный с помощью 7zip.
Это исправленное утверждение:
echo Using 7-zip to compress today's backup folder...
7z a -tzip C:\RACHAEL\my_work\dbs\MyDb\%DATE:~11,4%\%DATE:~5,2%\MyDb_bak_%DATE:~11,4%-%DATE:~5,2%-%DATE:~8,2%.bak.zip -i!^C:\RACHAEL\my_work\dbs\MyDb\%DATE:~11,4%\%DATE:~5,2%\MyDb_bak_%DATE:~11,4%-%DATE:~5,2%-%DATE:~8,2%.bak
^missing escape character right here so that path could actually be parsed per date format.
Формат строки даты переменной среды DATE зависит от языковых настроек Windows.
Выполнение командного файла с 2 строками ниже на немецкой Windows XP
@echo %DATE%
@echo %DATE:~6,4%-%DATE:~5,2%-%DATE:~8,2%
результаты в выходе
16.08.2014
-.2-14
Это недопустимая строка даты в формате ГГГГ-ММ-ДД, которая явно указана в вашей команде.
Мне нужно было изменить вторую строку на
@echo %DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%
получить вывод при запуске командного файла в окне командной строки
16.08.2014
2014-08-16
Пояснение к указанной выше строке даты с извлечением подстроки:
%DATE:~6,4%
... извлекает из строки переменной окружения DATE четыре символа, начиная с седьмого символа. Первый символ имеет индекс символа 0.
%DATE:~3,2%
... извлекает из строки переменной окружения DATE два символа, начиная с четвертого символа.
%DATE:~0,2%
... извлекает из строки переменной окружения DATE два символа, начиная с первого символа.
Теперь вы знаете, что делает код извлечения подстроки даты в ваших командах. Также вы можете увидеть, как проверить вывод кода извлечения подстроки с помощью небольшого пакетного файла, выполненного из окна командной строки или из проводника Windows после добавления третьей строки с командой pause
чтобы увидеть результат.
Это должно помочь вам найти правильный код для построения строки даты на вашем компьютере в соответствии с запрошенным форматом даты в зависимости от формата строки даты переменной среды DATE.
символ !
имеет особое значение в пакетных файлах, так как используется для ссылки на значение переменной среды с отложенным расширением. Чтобы интерпретировать его как буквальный символ в пакетном файле, его необходимо экранировать с помощью ^
что означает положить налево !
характер ^
в результате чего ^!
,
Поэтому команда
7z.exe a -tzip C:\RACHAEL\my_work\dbs\MyDb\%DATE:~11,4%\%DATE:~5,2%\MyDb_bak_%DATE:~11,4%-%DATE:~5,2%-%DATE:~8,2%.bak.zip -i^!C:\RACHAEL\my_work\dbs\MyDb_bak_%DATE:~11,4%-%DATE:~5,2%-%DATE:~8,2%.bak
может быть правильным в командном файле на вашем компьютере.
Но на немецкой Windows XP правильная команда:
7z.exe a -tzip C:\RACHAEL\my_work\dbs\MyDb\%DATE:~6,4%\%DATE:~3,2%\MyDb_bak_%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%.bak.zip -i^!C:\RACHAEL\my_work\dbs\MyDb_bak_%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%.bak
Одно последнее замечание: в пакетном файле часто лучше указывать исполняемые файлы с полным путем. Поэтому здесь лучше указать не просто 7x.exe
, но что-то вроде "C:\Program Files\7-Zip\7z.exe"
, Путь к 7x.exe
может отличаться на вашем компьютере.