Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Архивирование файлов в каталоге

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

Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177


Конфигурация

Профиль | Отправить PM | Цитировать


Здравствуйте.

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


Есть опыт написание BAT-ников, и VBS-скриптов, но только исходя из готовых примеров.

Хотелось бы чтобы вы дали какие нибудь полезные ссылочки или учебники где всё подробно объясняется. Буду очень признателен

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 11:36, 09-09-2010

 

Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
ChCp 1251>Nul
SetLocal EnableDelayedExpansion
Set src=c:\Temp\src
Set arch=c:\Temp\arch
Set ar7z=c:\Program Files\7-Zip\7z.exe
:: Типы архивов, которые могут быть в исходной папке
Set ext=7z zip rar

(For /R "%src%" %%a In (*.*) Do (
	Set flg=
	For %%i In (%ext%) Do If /I .%%i==%%~xa Set flg=1& Echo !Date! !Time! Архив %%a пропущен
	If Not Defined flg (
		"%ar7z%" a "%arch%\%%~na.7z" "%%a">Nul
		Echo !Date! !Time! Файл %%a заархивирован в %arch%\%%~na.7z
		Del /F/Q "%%a">Nul
		Echo !Date! !Time! Исходный файл %%a удален
	)
)
)>>log.txt
Архиватор можно заменить на автономный 7zr.exe или 7za.exe, положив его в любое место и прописав к нему путь.
Лог будет дописываться при каждом запуске.
Если в исходной папке будут несколько файлов с одинаковым именем, но разным расширением, то они будут упакованы в один архив. Этого можно избежать, если присваивать имя архиву равное имени и расширению исходного файла. В постановке задачи это не оговорено.
Архив можно создавать не 7z, а zip, для этого нужно просто заменить в скрипте расширение.
Запускать скрипт через планировщик.
Исходная папка и папка назначения могут быть и одной папкой

Последний раз редактировалось gora, 09-09-2010 в 13:55.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:52, 09-09-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


Цитата Tonny_Bennet:
Есть необходимость архивировать все файлы (кроме уже существующих архивов) в исходном каталоге. Имя архива должно полностью повторять имя файла за исключением расширения. »
Tonny_Bennet, в качестве примера используется консольный архиватор 7za:
Код: Выделить весь код
@Echo Off
Set Source=C:\Source
Set Logs=C:\Logs

For /F "Tokens=*" %%A In ('Dir /B /S /A-D "%Source%"') Do (
	7za a "%Source%\%%~nA" "%%A" -x!*.7z 1>>"%Logs%\_%Date%_Log.log" 2>>"%Logs%\_%Date%_ErrorLog.log"
	If /I Not "%%~xA"==".7z" Del /F /Q "%%A" >nul
)
Цитата Tonny_Bennet:
Скрипт должен работать только в определённый промежуток времени (ночью) »
Настройте запуск батника через планировщик задач.

Цитата Tonny_Bennet:
Хотелось бы чтобы вы дали какие нибудь полезные ссылочки или учебники где всё подробно объясняется. Буду очень признателен »
Ссылки


Цитата Tonny_Bennet:
Не желательно обращаться к WinRar т.к. это программа платная, а на работе с этим строго. »
Угу, везде так. К WinRAR'у придираются, а стоят пиратские винды и оффисы.


Опоздал...

Последний раз редактировалось El Sanchez, 09-09-2010 в 13:23. Причина: Ошибка


Отправлено: 13:01, 09-09-2010 | #3


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


El Sanchez, архивы 7z он не заархивирует повторно, а удалить их ему ни кто не помешает.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:06, 09-09-2010 | #4


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


gora, спасибо. Отпуск расхолаживает. Пост исправлен.

Отправлено: 13:24, 09-09-2010 | #5


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177

Профиль | Отправить PM | Цитировать


Зпуск в планировщике это конечно хорошо но
Цитата Tonny_Bennet:
Скрипт должен работать только в определённый промежуток времени (ночью) »
т.е. запуститься он запуститься а вот кто его остановит неизвестно...

gora, скрипт работает. Спасибо.... но он только и файл логов архивирует и сам файл скрипта если он лежит в папке

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 14:24, 09-09-2010 | #6


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Цитата Tonny_Bennet:
и файл логов архивирует и сам файл скрипта если он лежит в папке»
А зачем он там лежит?! В задаче это не оговорено.
1 Вынесите скрипт из папки (лог создается рядом со скриптом)
2 Добавьте расширения скрипта и лога (у лога оно может быть произвольным) в строку
Код: Выделить весь код
Set ext=7z zip rar bat txt
Цитата Tonny_Bennet:
запуститься он запуститься а вот кто его остановит неизвестно »
Он сам остановится после выполнения работы. Или у Вас там столько файлов, что он за одну ночь их все не упакует и нужно переносить работу на следующую ночь?

Тогда укажите временнЫе границы работы скрипта.

Отправлено: 14:39, 09-09-2010 | #7


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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

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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 10-09-2010 в 09:43.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:38, 09-09-2010 | #8


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177

Профиль | Отправить PM | Цитировать


megaloman, Вот ОНО!!! Благодарю

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 11:55, 10-09-2010 | #9


Аватара для X-myRzA

Новый участник


Сообщения: 15
Благодарности: 1

Профиль | Отправить PM | Цитировать


Как можно упаковать каталог с файлами через 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
и не может удалить оригинал файлы.

Отправлено: 15:36, 18-10-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Архивирование файлов в каталоге

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] узнать количество файлов в каталоге через CMD toro Скриптовые языки администрирования Windows 5 04-12-2013 06:31
Разное - [решено] Как получить список файлов находящихся в каталоге? Kocuk Microsoft Windows 2000/XP 8 27-02-2012 23:25
FreeBSD - PAX архивирование файлов BaguM Общий по FreeBSD 1 05-02-2008 17:33
Проблема в корневом каталоге Pavel1471 Microsoft Windows 95/98/Me (архив) 3 27-10-2004 19:19
Root в корневом каталоге BSOD Microsoft Windows NT/2000/2003 6 08-02-2003 16:34




 
Переход