Используйте 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 может отличаться на вашем компьютере.

 forfiles /d +0 /c "cmd /c echo @path"

Увидеть forfiles /?

Другие вопросы по тегам