Любой язык - [решено] Архивирование файлов в каталоге

Аватара пользователя
Tonny_Bennet

Re: Любой язык - [решено] Архивирование файлов в каталоге

Сообщение Tonny_Bennet »

Добрый день!!!

В данных рассуждениях идёт речь об архивации файлов в определённой папке.Всё работает,спасибо.



Но вот вопрос,как переделать код для задачи архивации файлов и папок с вложенными файлов,хранящихся в одной папке.

То есть у меня есть папка допустим D:/Source,а в свою очередь в этой папке есть и файлы и папки в которых хранятся файлы.

И также стоит задача архивировать все данные в один файл.



За ранее благодарен
Аватара пользователя
gora

Re: Любой язык - [решено] Архивирование файлов в каталоге

Сообщение gora »

Цитирую:


Цитата 7-Zip Command Line Version User's Guide:



a (Add) command

Adds files to archive.



Switches that can be used with this command



-r (Recurse)

Аватара пользователя
megaloman

Re: Любой язык - [решено] Архивирование файлов в каталоге

Сообщение megaloman »

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

Код:

Код: Выделить всё

Set Source=D:\Source
Set Arch=D:\Source\Arch
Set ExtArc=7Z
Set LogFile=D:\Source\Arch\{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%
  Del %1
)

Source - где исходные файлы

Arch - где архивы

ExtArc - расширение, с которым создаётся архив

LogFile - куда пишется лог-файл

PgmArc - где архиватор (я делал для 7Z)



Например, файл D:\Source\траляля.exe

будет заархивирован в файл D:\Source\Arch\20100909\траляля.exe.7Z

и если файл D:\Source\Arch\20100909\траляля.exe.7Z существует, то удалим D:\Source\траляля.exe



Батник помещаем в назначенные задания, где укажем время его выполнения.

Можно при желании сделать в лог файле выдачу размера каждого файла до и после архивации.
Аватара пользователя
Tonny_Bennet

Re: Любой язык - [решено] Архивирование файлов в каталоге

Сообщение Tonny_Bennet »

kmc, да. Вы пробовали?



Для цитирования используйте
тэг «quote»
.
Аватара пользователя
X-myRzA

Re: Любой язык - [решено] Архивирование файлов в каталоге

Сообщение X-myRzA »

Как можно упаковать каталог с файлами через lzma? Не просто каталог а именно каждую файл отдельно в свою каталог упаковать и удалить упакованный файл. Например, C:\temp\*.* там есть:





Код:

Код: Выделить всё

C:\temp\file.exe
C:\temp\distrib\file.nfo
C:\temp\distrib\folder\file.txt

примерно так:



Код:

Код: Выделить всё

C:\temp\file.exe.lzma
C:\temp\distrib\file.nfo.lzma
C:\temp\distrib\folder\file.txt.lzma

А WCX SSSR LZMA плагин через Total CMD так упакует:



Код:

Код: Выделить всё

C:\temp\file.exe.lzma
C:\temp\file.nfo.lzma
C:\temp\file.txt.lzma

и не может удалить оригинал файлы.
Аватара пользователя
Iska

Re: Любой язык - [решено] Архивирование файлов в каталоге

Сообщение Iska »

Цитирую:


Цитата 7-Zip Command Line Version User's Guide:



a (Add) command

Adds files to archive.



Switches that can be used with this command



-r (Recurse)

Аватара пользователя
Iska

Re: Любой язык - [решено] Архивирование файлов в каталоге

Сообщение Iska »

Цитата kmc:



Честно говоря не пойму куда этот код вставлять-имеется ввиду после как строчек
Любой язык - [решено] Архивирование файлов в каталоге




Примеры есть непосредственно в справке 7-Zip:


читать дальше »



Цитата -r (Recurse subdirectories) switch:





Examples



Код:

Код: Выделить всё

7z l archive.zip *.doc -r-

lists all *.doc files that belong to the archived root directory in the archive.zip archive.



Код:

Код: Выделить всё

7z a -tzip archive.zip -r src\*.cpp src\*.h

adds all *.cpp and *.h files from directory src and all it's subdirectories to the archive.zip archive.



Код:

Код: Выделить всё

7z a archive.7z folder1\

adds all files from directory folder1 and all it's subdirectories to the archive.7z archive.



Код:

Код: Выделить всё

7z a archive.7z -r folder2\

searches all folder2 directories in all subdirectories, and adds them (including all subdirectories) to the archive.7z archive.

Аватара пользователя
kmc

Re: Любой язык - [решено] Архивирование файлов в каталоге

Сообщение kmc »

Вот исходник,он в принципе такой же как здесь приводят в пример,единственное он не удаляет файлы которые берёт для архивирования.

Где здесь нужно поставить -r(.......) ????



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%



)
Аватара пользователя
Iska

Re: Любой язык - [решено] Архивирование файлов в каталоге

Сообщение Iska »

Нет не пробовал.Честно говоря не пойму куда этот код вставлять-имеется ввиду после как строчек
Ответить

Вернуться в «Скриптовые языки администрирования Windows»