Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Скрипт кнопки для частичного бэкапа и архивирования

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Jonmey



Joined: 27 Sep 2010
Posts: 45

Post (Separately) Posted: Sun Dec 19, 2010 01:55    Post subject: Скрипт кнопки для частичного бэкапа и архивирования Reply with quote

Есть следующая задача.
Имеется много папок одного уровня (назовем его верхним). Имена всеъ папок состоят из латиницы или цифр.
В каждой их этих папок имеется набок файлов с разными расширениями, а в некоторых имеются и подпапки с файлами.

Требуется скрипт, который делает с выделенными папками следующее

1. Создает файл контрольных сумм (напр. MD5) всех файлов и подпапок каждой из папок (отдельный для содержимого каждой из папок верхнего уровня), располагая его внутри каждой из папок верхнего уровня.

2. Архивирует согласно списку расширений файлы из каждой папки верхнего уровня (вклячая подпапки) в отдельный архив. То есть нужно архивировать не все содержимое папок верхнего уровня, а только файлы с указанными в списке расширениями.

3. Перемещает эти архивы в одноименноые с папками верхнего уровня папки, которые воссоздаются в противоложной панели ТС.

В результате работы скрипта на противоположной панели ТС должен появиться список папок идентичный выделенному в другой панели, а в каждой их этих папок будет находиться по одному архиву с файлами.

И все это соотвественно нужно повесить на одну кнопку.

Если найдутся желающие помочь, я был бы очень рад.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2586
Location: Большая деревня Москва

Post (Separately) Posted: Sun Dec 19, 2010 12:50    Post subject: Reply with quote

1. Пошукай в сети разные программы для резервного копирования - их там пруд пруди. Некоторые - очень мощные, снабженные различными опциями архивирования, переименования, управления уровнями вложенности, контрольными суммами, и т.д. Я их тоже когда-то перепробовал много, пока не нашел (см. п. 2);
2. Xxcopy - универсальная программа для управления файлами и директориями вообще и для их резервного копирования в частности. Описать любимую программу я позволил себе здесь. Xxcopy - конструктор: что захочешь, то и сделаешь. Правда, она не умеет считать контрольные суммы и архивировать, но это легко реализуется сторонними утилитами. Не секрет, что специализированная програма-архиватор делает это быстрее, качественнее и универсальнее, чем комбайн из п. 1.
3. PowerPro, хотя она создана несколько для другого, но настолько мощна, что справится и с поставленной задачей.
4. Если подобные задачи перед тобой встают частенько, есть смысл изучить что-нибудь: ту же XXcopy, PowerPro, vbs или хотя бы батники. Тогда при мало-мальском изменении целей (скажем,понадобится ограниичить копируемые файлы по дате создания), не придется приставать к спецам, а сделать все самому.
5. Если ни один из вариантов не подходит, жди наших добрых писателей - Batya и Tol!k'а. Хотя батники, которые мастерски пишет последний, сами не умеют архивировать, а вызывают внешние архиваторы.
Желаю удачи.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Dec 19, 2010 17:08    Post subject: Reply with quote

Тут алгоритм неточный. Должно быть как-то так:
1) Создание одноимённых выделенным папок в другой панели.
2) Подсчёт сумм файлов из каждой выделенной папки.
3) Упаковка файлов, содержащихся в каждой из выделенной папки, с указанием пути одноимённой папки из другой панели.
4) Перемещение каждого md5-файла в соответствующие папки другой панели.
Back to top
View user's profile Send private message
Jonmey



Joined: 27 Sep 2010
Posts: 45

Post (Separately) Posted: Sun Dec 19, 2010 21:36    Post subject: Reply with quote

Вахмурка
Спасибо за советы, но пока мои способности не позволяют написать самаостоятельно единый скрипт для этой задачи. А разбивать ее на несколько скриптов нет смысла - манипулятивно-временные затраты почти те же. Дело в том, что это не разовая операция, а регулярная, и время ее проведения, частота и количество папок произвольно. То есть это может быть и одна папка и несколько. Но всего папок много (пару тысяч).

Flasher
Я написал схему так, как я это делаю вручную. Как это будет делать скрипт - без разницы. Главное, что бэкапятся (архивируются) только те файлы, которые есть в списке допустимых типов файлов, а контролиные суммы считаются для всех файлов в каждой исходной папке, но при этом контрольная сумма считается, так как она считается находясь внутри папки верхнего уровня штатной коммандой TC (для сохранения относительных путей).
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Mon Dec 20, 2010 00:43    Post subject: Reply with quote

Code:
@echo off &chcp 1251 >nul
setlocal enableextensions

set "src=c:\src\"
set "dest=d:\dest\"
set "exts=doc xls bmp"

for /d %%d in ("%src%*") do (
cd /d %%d
rhash.exe -r -M --ansi *.* >"%%~nd.md5"
for %%e in (%exts%) do (
  zip.exe -R -S -q %%e.zip *.%%e
  if not exist "%dest%%%~nd" md "%dest%%%~nd"
  move %%e.zip "%dest%%%~nd"
)
)

rem rhash: http://sourceforge.net/projects/rhash/files/
rem zip: ftp://ftp.info-zip.org/pub/infozip/win32/



Для более тесного использования с ТС
Code:
rem set "src=c:\src\"
rem set "dest=d:\dest\"
rem set "exts=doc xls bmp"
set "src=%~1"
set "dest=%~2"
set "exts=%~3"
if "%exts%"=="" (echo Use: %~nx0 c:\src\ d:\dest\ "doc xls bmp" &pause &exit)
rem пример параметров для ТС: "%P" "%T" "doc xls bmp"
Back to top
View user's profile Send private message
Jonmey



Joined: 27 Sep 2010
Posts: 45

Post (Separately) Posted: Mon Dec 20, 2010 14:17    Post subject: Reply with quote

Tol!k
Снова вы меня выручаете. Огромное спасибо.
Однако есть небольшая проблема при работе - архивы упаковываются по расширениям файлов (сколько имеется типов файлов - столько и архивов). А хотелось бы чтобы файлы выбранных расширений из каждой папки упаковывались в один архив, то есть в бэкапе получалась каждая папка с одним архивом, причем имя архива могло бы быть одноименным с именем папки в которой он расположен.
И второе - нельзя произвольно выбрать папки для бэкапа (бекапятся все имеющиеся в папке).
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Mon Dec 20, 2010 21:49    Post subject: Reply with quote

Code:
@echo off &chcp 1251 >nul
setlocal enableextensions

set "src=%~1"
set "dest=%~2"
set "exts=%~3"
if "%exts%"=="" (
echo Use: %~nx0 folders4backup.list d:\destination\ "*.ext *.ext2"
pause &exit )
rem Пример параметров для ТС: %L "%T" "*.doc *.xls"

for /f "delims=" %%d in (%src%) do call :d "%%d."
goto :eof

:d
cd /d %1
rhash.exe -r -M --ansi *.* >"%~n1.md5"
zip.exe -R -S -q "%~n1.zip" %exts%
if not exist "%dest%%~n1" md "%dest%%~n1"
move "%~n1.zip" "%dest%%~n1"
goto :eof

rem rhash: http://sourceforge.net/projects/rhash/files/
rem zip: ftp://ftp.info-zip.org/pub/infozip/win32/
Back to top
View user's profile Send private message
Jonmey



Joined: 27 Sep 2010
Posts: 45

Post (Separately) Posted: Tue Dec 21, 2010 03:53    Post subject: Reply with quote

Tol!k
Вы волшебник! Все чудесно и как надо работает.
Единственное, чего мне непонятно - для чего точка в конце %%D: "%%d."?

P.S. Я его с WinRar использую
Code:
WinRAR.exe a "-cpBackup" "%~n1.rar" "*.*"

где ключ -cp задает название профиля архивирования WinRar, в котором указаны исключаемые из архивирования типы файлов и проч. параметры сжатия. Поэтому нет необходимости в третьем параметре для кнопки TC.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Tue Dec 21, 2010 04:13    Post subject: Reply with quote

Jonmey wrote:
для чего точка в конце %%D: "%%d."?

http://www.dostips.com/forum/viewtopic.php?p=4683#p4683
Back to top
View user's profile Send private message
Jonmey



Joined: 27 Sep 2010
Posts: 45

Post (Separately) Posted: Thu Dec 23, 2010 13:40    Post subject: Reply with quote

Обнаружилась маленькая проблема при работе скрипта, если имя папки содержит точку, то имена файлов контрольных сумм, архивов и создаваемых папок не содержат той части имени, которая идет после точки в названии папки верхнего уровня. Sad
Не знаю, насколько это правильно, но для решения этой проблемы я заменил все %~n1 на %~nx1

И еще есть некоторая проблема, если папка верхнего уровня содержит архив одноименный тому, в который упаковывается бэкап (то есть одноименный с папкой верхнего уровня). Каким-то корявым образом решил это так:
Code:
rem Пример параметров для ТС: %L "%T"
@echo off & chcp 1251 >NUL
setlocal enableextensions

set "src=%~1"
set "dest=%~2"
for /f "delims=" %%d in (%src%) do call :d "%%d."
goto :eof

:d
cd /d %1
rhash.exe -r -M --ansi *.* >"%~nx1.md5"
if exist "%~nx1.rar" winrar.exe a "-cpBackup" "%~nx1.bak.rar" "*.*"
if not exist "%~nx1.rar" winrar.exe a "-cpBackup" "%~nx1.rar" "*.*"
if not exist "%dest%%~nx1" md "%dest%%~nx1"
if exist "%~nx1.bak.rar" (
  if exist "%~nx1.rar" (
    move "%~nx1.bak.rar" "%dest%%~nx1"
    goto :eof
)
)
move "%~nx1.rar" "%dest%%~nx1"
goto :eof
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group