*** ВНИМАНИЕ: Блог переехал на другой адрес - demin.ws ***

понедельник, 6 июля 2009 г.

Скрипты для архивации проектов под Windows

Архивировать папку с проектом очень удобно и полезно. Для себя я давно выбрал следующий формат имен архивов: имя проекта + дата и время с точностью до секунды, например:
easy-coding-2009.07.06-10.27.12.rar
Долгое время я использовал вот такой скрипт backup.cmd:
rem Берем имя родительского каталога без полного пути.
for %%I in (.) do set CWD=%%~nI
rem Архивируем.
winrar a -v -r -s -ag-YYYY.MM.DD-HH.MM.SS -x*.rar -x*.7z %CWD%
Просто бросаешь какой скрипт в каталог любого проекта (имя каталога должно быть сообразно проекту) и все, можно архивировать. Скрипт берет имя каталога как базу и добавляет к ней дату и время с помощью удобной опции архиватора RAR.

Последнее время я все чаще использую 7z как основной архиватор, но у него я не нашел схожего ключа на добавление в имя архива даты и времени. Пришлось слегка извратиться.

В этоге родился скрипт backup-7z.cmd:
@echo off
setlocal
set line=%DATE%
rem Проходимся по строке вида DD/MM/YYYY и
rem превращаем ее в YYYY.MM.DD.
:parse_date
for /F "delims=/ tokens=1,*" %%a in ("%line%") do (
set line=%%b
set now=%%a.%now%
)
if "%line%" neq "" goto parse_date
rem Отрезаем хвостовую точку от даты.
set now=%now:~0,10%
rem Добавляем время. Оно уже в формате HH:MM:SS.ms. Отрезаем доли секунды.
set now=%now%-%TIME:~0,8%
rem Заменяем двоеточие на точку
set now=%now::=.%
rem Берем имя родительского каталога без полного пути.
for %%I in (.) do set CWD=%%~nI
rem Архивируем.
7z a -mx9 -r -x!*.rar -x!*.7z %CWD%-%now%.7z
endlocal
Это скрипт делает все как и раньше, но только для 7z.

Конечно, под UNIX'ом есть море путей сделать подобное, да и в Windows можно Cygwin использовать, но я всегда сначала пытаюсь сделать native решение, если это возможно.

4 комментария:

  1. а зачем подобный backup?
    не лучше ли всё коммитить в какой-нибудь subversion?

    ОтветитьУдалить
  2. Можно. Если использовать distributed систему, то можно коммитить просто локально. А это простецкий вариант для нелюбителей контроля версий, а такие еще встречаются (сам таким был когда-то). ;-)

    ОтветитьУдалить
  3. Не понял такого усложнения... чем Winrar не угодил?

    ОтветитьУдалить
  4. Heretic: Потому, что 7z лучше во всех отношениях чем Winrar.

    ОтветитьУдалить