Показать полную графическую версию : [решено] Архивирование файлов в каталоге
kmc, уточним: Вам нужно архивировать всё содержимое одной папки (например, «D:\Ser\Source»), включая все вложенные папки и файлы, в один архив, который нужно помещать в некую папку (например, «D:\Ser\Arch») в создаваемую подпапку с именем, основанным на текущей дате (например, «…%Date:~6,4%%Date:~3,2%%Date:~0,2%»)?
P.S. Код на форуме оформляется тэгом «code» (http://forum.oszone.net/misc.php?do=bbcode#code).
Подскажите пожалуйста у меня похожая задача, но есть небольшая разница, требуется: архивировать директорию с вложеными папками и кучей файлов, чтобы каждый файл получался как отдельный архив с сохранением структуры папок.
я взял скрипт от gora, слегка изменил:
@Echo Off
ChCp 1251>Nul
SetLocal EnableDelayedExpansion
Set src=F:\users_backup\dv\src
Set arch=F:\users_backup\dv\temp
Set ar7z=C:\Program Files\7-Zip\7z.exe
(For /R "%src%" %%a In (*.*) Do (
"%ar7z%" a "%arch%%%~pa%%~na.7z" `%%a`>Nul
Echo !Date! !Time! Файл "%%a" заархивирован в "%arch%%%~pa%%~na.7z"
Del /F/Q "%%a">Nul
Echo !Date! !Time! Исходный файл %%a удален
)
)>>log.txt
Всё работает, но есть косяк, с обработкой файлов содержащих в названии спецсимволы, как можно это обойти и обрабатывать их нормально?
есть косяк, с обработкой файлов содержащих в названии спецсимволы, как можно это обойти и обрабатывать их нормально? »
@Echo Off
ChCp 1251>Nul
Set src=F:\users_backup\dv\src
Set arch=F:\users_backup\dv\temp
Set ar7z=C:\Program Files\7-Zip\7z.exe
(for /r "%src%" %%a in (*) do (set "$pna=%%~pna"& set "$a=%%a"
SETLOCAL EnableDelayedExpansion
"%ar7z%" a "%arch%!$pna!.7z" "!$a!">nul
if exist "%arch%!$pna!.7z" (
echo !date! !time! Файл "%%a" заархивирован в "%arch%!$pna!.7z"
del /f/q "!$a!">nul
echo !date! !time! Исходный файл "!$a!" удален)
ENDLOCAL
))>>log.txt
P.S. для кода используйте теги CODE
amel27, большое спасибо всё работает
Iska,хочу также уточнить,чтобы структура папок оставалось той же
kmc, выбирайте вариант:@Echo Off
Set src=e:\Temp\src
Set arch=e:\Temp\arch
Set ar7z=c:\Program Files\7-Zip\7z.exe
:: Упаковка содержимого папки "src" с самой папкой "src"
"%ar7z%" a "%arch%\with_folder_%Date:~6,4%%Date:~3,2%%Date:~0,2%.7z" "%src%" >Nul
:: Упаковка содержимого папки "src" без самой папкой "src"
"%ar7z%" a "%arch%\without_folder_%Date:~6,4%%Date:~3,2%%Date:~0,2%.7z" "%src%\*" >Nul
gora,Спасибо.
Я адаптирую под данный код Ваш пример ,получается "%PgmArc%" a "%Arch%\with_folder_%Date:~6,4%%Date:~3,2%%Date:~0,2%.7z" "%Source%" >Nul и что-то никак не пойму куда закодить, туда куда вроде бы надо он не архивыриует,создаёт только папку,понятное дело что не там прописываю.
Set Source=D:\Ser\Source
Set Arch=D:\Ser\Arch
Set ExtArc=7Z
Set LogFile=D:\Ser\Log\{Archives.log
Set PgmArc="C:\Program Files\7-Zip\7z.exe"
Set DirDay=%Arch%\%Date:~6,4%%Date:~3,2%%Date:~0,2%
md "%DirDay%"
FOR %%i IN ("%Source%\*.*") DO Call :Arhivator "%%i"
GoTo :Eof
:Arhivator
Set N=%DirDay%\%~nx1.%ExtArc%
%PgmArc% a "%N%" %1
If Exist "%N%" (
Echo %Date% %Time% %N% >>%LogFile%
)
gora,Спасибо.
Я адаптирую под данный код Ваш пример ,получается "%PgmArc%" a "%Arch%\with_folder_%Date:~6,4%%Date:~3,2%%Date:~0,2%.7z" "%Source%" >Nul и что-то никак не пойму куда закодить, туда куда вроде бы надо он не архивыриует,создаёт только папку,понятное дело что не там прописываю.
Set Source=D:\Ser\Source
Set Arch=D:\Ser\Arch
Set ExtArc=7Z
Set LogFile=D:\Ser\Log\{Archives.log
Set PgmArc="C:\Program Files\7-Zip\7z.exe"
Set DirDay=%Arch%\%Date:~6,4%%Date:~3,2%%Date:~0,2%
md "%DirDay%"
FOR %%i IN ("%Source%\*.*") DO Call :Arhivator "%%i"
GoTo :Eof
:Arhivator
Set N=%DirDay%\%~nx1.%ExtArc%
%PgmArc% a "%N%" %1
If Exist "%N%" (
Echo %Date% %Time% %N% >>%LogFile%
)
Необходимо создать 7z sfx ( или rar sfx ) содержимого папки с подпапками с запуском батника из самой папки. Сам батник должен быть в архиве. Исходную папку очистить. Архив создать в корне диска С.
Такое возможно?
п.с. Чтобы сам батник не был занят системой и попал в архив, может быть всё скопировать в временную папку для дальнейшей архивации?
megaloman
19-05-2011, 00:19
Имя екзешника=имени батника. Екзешник с архивом в самой папке@Echo off
start "Rar" "C:\Program Files\Winrar\Winrar.exe" M -r -sfx "%~n0.exe" "%~dp0" В корне C:@Echo off
start "Rar" "C:\Program Files\Winrar\Winrar.exe" M -r -sfx "C:\%~n0.exe" "%~dp0" Для 7-Zip несколько сложнее и ненадёжнее, я не знаю у 7-zip ключа, который отвечает за удаление файлов после архивации@Echo Off
Set Dir="%~dp0"
Set Name="C:\%~n0.exe"
CD /D %Dir%
"C:\Program Files\7-Zip\7z.exe" a -r -sfx %Name% %Dir%
rd %Dir% /S /Q >nul 1>nul 2>nul
Как сделать, чтобы сама папка, в которой батник не архивировались, а архивировались в sfx только её содержимое с подпапками? Как добавить комментарий и значёк иконки?
megaloman
19-05-2011, 09:19
а архивировались в sfx только её содержимое с подпапками »@Echo off
start "Rar" "C:\Program Files\Winrar\Winrar.exe" M -r -ep1 -sfx "C:\%~n0.exe" "%~dp0"
Вопрос добавления комментария к rar sfx решен. Информация взята отсюда (http://www.forum.mista.ru/topic.php?id=227495)
@Echo off
start "Rar" "C:\Program Files\Winrar\Winrar.exe" M -r -ep1 -z"komm.txt" -sfx "C:\%~n0.exe" "%~dp0"
Осталась не решеной задача добавления значка ico в sfx
отправил запрос в службу поддержки RAR
задача добавления значка ico в sfx »
ResHacker.exe -addoverwrite "C:\%~n0.exe", "C:\%~n0.exe", 100.ico, Icon, 100,
Для WinRAR есть специальный ключ для смены иконки:Ключ -IICON<имя> — указать значок для SFX-архива
Данный ключ позволяет указать значок для создаваемого или обновляемого SFX-архива. Параметр <имя> означает имя файла со значком (.ico). При этом SFX-модуль не должен быть сжат с помощью какой-либо программы упаковки исполняемых файлов (например, UPX).
megaloman, gora, спасибо за помощь. Вопрос добавления значка ярлыка тоже решен.
@Echo off
start "Rar" "C:\Program Files\Winrar\Winrar.exe" M -r -ep1 -sfx -iicon"1.ico" -z"komm.txt" "C:\%~n0.exe" "%~dp0"
Подскажите, как отследить окончание работы RAR и вывести Echo?
С пингом не всегда угадывается.
start "Rar" /wait "%ProgramFiles%\Winrar\Winrar.exe"
echo WinRAR closed
pause>nul
amel27, не получается. С wait после архивирования, командная строка сразу закрывается.
start "Rar" /wait "C:\Program Files\Winrar\Winrar.exe" M -r -ep1 -sfx -iicon"1.ico" -z"komm.txt" "C:\%Arhiv%" "%~dp0"
Echo.
Echo.
Echo Самоустанавливающийся архив %Arhiv%
Echo создан в корне диска С
ping 127.0.0.1 -n 35 > nul
командная строка сразу закрывается »
Так и должно быть.
Вы используете ключ M который удаляет после архивации все файлы из текущей папки в том числе и сам батник. Поэтому батник и не может выполнить ни чего после строки архивирования ибо его (батника) после архивации больше нет.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.