Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- Endlocal
- SetLocal EnableDelayedExpansion
- chcp 1251
- :: меняем кодировку, чтобы нормально обрабатывались кириллические имена файлов
- :: вот что будет, если имена не латиница и не кириллица — даже не догадываюсь...
- :: хотя вроде можно обработать и их, используя маски вместо реальных имёи
- :: для запуска батника нужно указать хотя бы один параметр
- if [%1]==[] goto help
- :: указываем архиватор, можно поменять 7z на 7za и указать полный путь к программе, если она у вас не в %PATH%; теоретически, можно поменять и на другой (rar или ещё что), но очевидно, что какие-то части батника придётся переписывать под новую программу
- :: заодно указываем формат создаваемого архива, -t7z означает 7z-архив
- set archiver=7z a -t7z
- :: указываем список исключаемых путей и файлов; у меня он лежит в папке %WINDIR%
- :: здесь можно указать дополнительные опции, например, я указал -mx9 (максимальное сжатие), можно ещё добавить пароль с помощью ключа -p, например -pqwerty, или -p123 (но лучше пароли посложнее придумать :D ), ещё можно добавить -mhe, чтобы шифровались и имена файлов
- :: можно указывать дополнительные опции для каждого случая отдельно, см. ниже
- set options=-x@%WINDIR%\exclude.lst -mx9
- :: узнаём текущую дату; если бэкапы делаются часто, может потребоваться указывать и время, тогда берём %TIME% и распиливаем на кусочки по аналогии — можете скатать готовый код из cjpeg.bat из беты+
- set currdate=%DATE%
- set day=!currdate:~0,-8!
- set month=!currdate:~3,-5!
- set year=!currdate:~8!
- :: указываем папку с бекапами; переменная %prefix% будет передаваться 7z как путь к создаваемому архиву
- set prefix=I:\Uploads\Backups
- :: указываем конец имени файла, с расширением и датой
- set postfix=%day%_%month%_%year%.7z
- :: если первым параметром будет слово all, то сделаем все бекапы, иначе — только те, что были указаны юзером
- if [%1]==[all] (
- set cmdline=bsp icons mine src twice
- ) else (
- set cmdline=%*
- )
- :: собственно, делаем бэкапы
- for %%b in (%cmdline%) do (
- call :%%b
- )
- ::завершаем работу батника
- goto end
- :bsp
- :: указываем основную часть имени архива, по которой мы будем определять, что же он хранит
- set name=BSPquakeditor
- :: указываем то, что будем хранить; в данном случае — содержимое (не саму папку) каталога BSPquakeditor
- set paths=C:\Games\Mapping\BSPquakeditor\*
- :: проверяем, есть ли уже нас бэкапы этого добра; если есть — удаляем
- :: вероятно, вас может не устраивать подобная политика, переписывайте под себя
- if exist %prefix%\%name%_* del /Q /F %prefix%\%name%_*
- :: создаём бэкап; можно дописать в конец дополнительные опции, напр., те же пароль и шифрование, если мы не указываем их в переменной %options%
- %archiver% %prefix%\%name%_%postfix% %paths% %options%
- :: переходим в конец батника, чтобы выйти из "подпрограммы"
- goto eof
- :icons
- set name=icons
- :: здесь мы добавляем папку icons
- set paths="C:\Downloads\icons\"
- if exist %prefix%\%name%_* del /Q /F %prefix%\%name%_*
- %archiver% %prefix%\%name%_%postfix% %paths% %options%
- goto eof
- :mine
- set name=Minecraft
- :: мы можем добавить несколько путей и/или файлов
- set paths=C:\Games\Minecraft\.minecraft\ C:\Games\Minecraft\*.bat
- if exist %prefix%\%name%_* del /Q /F %prefix%\%name%_*
- %archiver% %prefix%\%name%_%postfix% %paths% %options%
- goto eof
- :src
- :: мы можем запустить и другие команды, батники, программы, если это вдруг требуется
- :: здесь мне пришлось перейти в папку на другом диске, чтобы обойти тупость 7-zip'a
- C:
- :: ставим бэкслэшик в начале, чтобы гарантированно попасть в папку, расположенную в корне диска
- cd \Games\Mapping\UltimateSSDKv2\
- set name=Source_mapping
- set paths="Source Engine 2006\hl2\materials\" "Source Engine 2006\hl2\sound\" SourceSDK_Content\generic\mapsrc\ SourceSDK_Content\oldarkinterval\mapsrc\ SourceSDK_Content\oldarkinterval\materials\xDDGx\ Uploads\
- if exist %prefix%\%name%_* del /Q /F %prefix%\%name%_*
- %archiver% %prefix%\%name%_%postfix% %paths% %options%
- goto eof
- :twice
- :: можно объединить два взаимосвязанных бэкапа под одной меткой
- set name=lectio
- set paths=C:\Files\lectio\*
- if exist %prefix%\%name%_* del /Q /F %prefix%\%name%_*
- %archiver% %prefix%\%name%_%postfix% %paths% %options%
- set name=documents
- set paths=C:\Files\documents\*
- if exist %prefix%\%name%_* del /Q /F %prefix%\%name%_*
- %archiver% %prefix%\%name%_%postfix% %paths% %options%
- goto eof
- :help
- :: здесь мы выводим все доступные цели, если запустили батч без параметров
- :: если хочется выводить русский текст, перекодируйте файл в CP866 (OEM866)
- echo.
- echo valid options are:
- echo all - backup all targets
- echo bsp
- echo icons
- echo mine
- echo src
- echo twice
- echo.
- :end
- Endlocal
- :eof
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement