|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Архивирование файлов в каталоге |
|
Любой язык - [решено] Архивирование файлов в каталоге
|
Ветеран Сообщения: 1384 |
Профиль | Отправить PM | Цитировать Здравствуйте.
Есть необходимость архивировать все файлы (кроме уже существующих архивов) в исходном каталоге. Имя архива должно полностью повторять имя файла за исключением расширения. Скрипт должен работать только в определённый промежуток времени (ночью). При создании архива исходный файл должен удаляться. Также нужно вести логи всего происходящего. Не желательно обращаться к WinRar т.к. это программа платная, а на работе с этим строго. Есть опыт написание BAT-ников, и VBS-скриптов, но только исходя из готовых примеров. Хотелось бы чтобы вы дали какие нибудь полезные ссылочки или учебники где всё подробно объясняется. Буду очень признателен |
|
------- Отправлено: 11:36, 09-09-2010 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить 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 Лог будет дописываться при каждом запуске. Если в исходной папке будут несколько файлов с одинаковым именем, но разным расширением, то они будут упакованы в один архив. Этого можно избежать, если присваивать имя архиву равное имени и расширению исходного файла. В постановке задачи это не оговорено. Архив можно создавать не 7z, а zip, для этого нужно просто заменить в скрипте расширение. Запускать скрипт через планировщик. Исходная папка и папка назначения могут быть и одной папкой |
Последний раз редактировалось gora, 09-09-2010 в 13:55. Отправлено: 12:52, 09-09-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1273
|
Профиль | Отправить PM | Цитировать Цитата Tonny_Bennet:
@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:
Опоздал... |
||||
Последний раз редактировалось El Sanchez, 09-09-2010 в 13:23. Причина: Ошибка Отправлено: 13:01, 09-09-2010 | #3 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать El Sanchez, архивы 7z он не заархивирует повторно, а удалить их ему ни кто не помешает.
|
Отправлено: 13:06, 09-09-2010 | #4 |
Ветеран Сообщения: 1273
|
Профиль | Отправить PM | Цитировать gora, спасибо. Отпуск расхолаживает. Пост исправлен.
|
|
Отправлено: 13:24, 09-09-2010 | #5 |
Ветеран Сообщения: 1384
|
Профиль | Отправить PM | Цитировать Зпуск в планировщике это конечно хорошо но
Цитата Tonny_Bennet:
gora, скрипт работает. Спасибо.... но он только и файл логов архивирует и сам файл скрипта если он лежит в папке |
|
------- Отправлено: 14:24, 09-09-2010 | #6 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата Tonny_Bennet:
1 Вынесите скрипт из папки (лог создается рядом со скриптом) 2 Добавьте расширения скрипта и лога (у лога оно может быть произвольным) в строку Цитата Tonny_Bennet:
Тогда укажите временнЫе границы работы скрипта. |
||
Отправлено: 14:39, 09-09-2010 | #7 |
Ветеран Сообщения: 2726
|
Профиль | Отправить 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 ) 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 |
Ветеран Сообщения: 1384
|
Профиль | Отправить PM | Цитировать megaloman, Вот ОНО!!! Благодарю
|
------- Отправлено: 11:55, 10-09-2010 | #9 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Как можно упаковать каталог с файлами через lzma? Не просто каталог а именно каждую файл отдельно в свою каталог упаковать и удалить упакованный файл. Например, C:\temp\*.* там есть:
примерно так: А WCX SSSR LZMA плагин через Total CMD так упакует: и не может удалить оригинал файлы. |
Отправлено: 15:36, 18-10-2010 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|