Недавно довелось проверять почтовые архивы на dvd дисках. Дисков много, а файлов еще больше. Надо было убедиться что все из них читабельны, чтобы от этих архивов был еще толк в будущем. Архивы создавал и записывал то один администратор почты то другой, поэтому там сейчас мирно живут и zip-ы, и arj, и rar. Этакая архивная солянка.
Но все мы знаем что у любого из архиваторов есть опция проверки архива на целостность (t: Test integrity of archive). Поэтому написать командный файл для их проверки не составляет труда. Даже нашел похожий файлик с кодами возврата ERRORLEVEL где каждый тип архива проверял родной архиватор: PkunZip, ARJ и WinRAR соответственно.
Более того, можно использовать WinRAR для проверки всех трех типов архивов. Ну для вас это не секрет.
Но я захотел внести что-то новое в существующее решение. Причин этому несколько.
Первая - PkunZip, ARJ и WinRAR являются платными утилитами. Вы не знали? Знали, знали, просто вовремя забыли.)
Вторая - при ошибках в архивах WinRAR выбрасывает дополнительное окно, что для полной автоматизации проверки совсем не кстати.
Начнем поиск решения со второго пункта. Для WinRAR есть консольная версия RAR, которая работает с теми же ключами проверки. Уже лучше. Но и консольная версия RAR требует лицензию. Хм, что же делать? Не было печали, для WinRAR есть консольная бесплатная версия распаковщика UnRAR. Cупер! И она тоже годится для проверки всех трех типов? А вот и нет, версия UnRAR проверяет только RAR-архивы. Ладно, что есть то есть.
Теперь решаем первый вопрос - ищем бесплатную утилиту. Предлагаю 7Zip Игоря Павлова. Не может быть! Оказывается может. Берем консольную версию 7Z и проверяем... все три типа архивов. Чудненько!
Ниже привожу финальную версию командного файла. Оставляю весь код что был, и что добавил сам. Разобраться вам будет не трудно.
Параметром %1 задается имя папки с архивами.
Результатом будут соответствующие файлы-журналы *.log
@echo off
if %1.==. goto noparam
проверка c помощью ARJ
For /R %1 %%f in (*.arj) Do Call :ARJLog %%f MCD-arj.log
проверка c помощью UnRAR
For /R %1 %%f in (*.rar) Do Call :unRARLog %%f MCD-unrar.log
проверка c помощью UnZip
For /R %1 %%f in (*.zip) Do Call :PKZLog %%f MCD-unzip.log
проверка c помощью WinRAR
For /R %1 %%f in (*.rar *.zip *.arj) Do Call :RARLog %%f MCD-rar.log
проверка c помощью 7Z
For /R %1 %%f in (*.rar *.zip *.arj) Do Call :7ZLog %%f MCD-7z.log
GoTo :EOF
:noparam
@echo No folder for checking ?!?
GoTo :EOF
:7ZLog
7z.exe t %1
GoTo PointZ%Errorlevel%
:PointZ0
Echo %Date% %Time% %~f1 No error>> %2
Goto :End
:PointZ1
Echo %Date% %Time% %~f1 Warning error>> %2
Goto :End
:PointZ2
Echo %Date% %Time% %~f1 Fatal error>> %2
Goto :End
:PointZ7
Echo %Date% %Time% %~f1 Command line error>> %2
Goto :End
:PointZ8
Echo %Date% %Time% %~f1 Not enough memory for operation>> %2
Goto :End
:PointZ255
Echo %Date% %Time% %~f1 Unexpected exit by Control-Break>> %2
Goto :End
:unRARLog
UnRAR.exe t -ibck %1
GoTo PointuAR%Errorlevel%
:PointuAR0
Echo %Date% %Time% %~f1 No error>> %2
Goto :End
:PointuAR1
Echo %Date% %Time% %~f1 Warning error>> %2
Goto :End
:PointuAR2
Echo %Date% %Time% %~f1 Fatal error>> %2
Goto :End
:PointuAR3
Echo %Date% %Time% %~f1 CRC error>> %2
Goto :End
:PointuAR4
Echo %Date% %Time% %~f1 Modify attempt>> %2
Goto :End
:PointuAR5
Echo %Date% %Time% %~f1 Write error>> %2
Goto :End
:PointuAR6
Echo %Date% %Time% %~f1 Open error>> %2
Goto :End
:PointuAR7
Echo %Date% %Time% %~f1 Command line error>> %2
Goto :End
:PointuAR8
Echo %Date% %Time% %~f1 Not enough memory for operation>> %2
Goto :End
:PointuAR9
Echo %Date% %Time% %~f1 Create archive error>> %2
Goto :End
:PointuAR255
Echo %Date% %Time% %~f1 Unexpected exit by Control-Break>> %2
Goto :End
:RARLog
WinRAR.exe t -ibck %1
GoTo PointuRAR%Errorlevel%
:PointuRAR0
Echo %Date% %Time% %~f1 No error>> %2
Goto :End
:PointuRAR1
Echo %Date% %Time% %~f1 Warning error>> %2
Goto :End
:PointuRAR2
Echo %Date% %Time% %~f1 Fatal error>> %2
Goto :End
:PointuRAR3
Echo %Date% %Time% %~f1 CRC error>> %2
Goto :End
:PointuRAR4
Echo %Date% %Time% %~f1 Modify attempt>> %2
Goto :End
:PointuRAR5
Echo %Date% %Time% %~f1 Write error>> %2
Goto :End
:PointuRAR6
Echo %Date% %Time% %~f1 Open error>> %2
Goto :End
:PointuRAR7
Echo %Date% %Time% %~f1 Command line error>> %2
Goto :End
:PointuRAR8
Echo %Date% %Time% %~f1 Not enough memory for operation>> %2
Goto :End
:PointuRAR9
Echo %Date% %Time% %~f1 Create archive error>> %2
Goto :End
:PointuRAR255
Echo %Date% %Time% %~f1 Unexpected exit by Control-Break>> %2
Goto :End
:PKZLog
unzip.exe -t %1
GoTo PointPKZ%Errorlevel%
:PointPKZ0
Echo %Date% %Time% %~f1 No error>> %2
Goto :End
:PointPKZ1
Echo %Date% %Time% %~f1 Warning error>> %2
Goto :End
:PointPKZ2
Echo %Date% %Time% %~f1 Fatal error>> %2
Goto :End
:PointPKZ4
Echo %Date% %Time% %~f1 Insufficient Memory>> %2
Goto :End
:PointPKZ9
Echo %Date% %Time% %~f1 File not found>> %2
Goto :End
:PointPKZ10
Echo %Date% %Time% %~f1 Bad or illegal parameters specified>> %2
Goto :End
:PointPKZ11
Echo %Date% %Time% %~f1 File not found for extracting>> %2
Goto :End
:PointPKZ50
Echo %Date% %Time% %~f1 Full disk>> %2
Goto :End
:PointPKZ51
Echo %Date% %Time% %~f1 Unexpected EOF in ZIP file>> %2
Goto :End
:PointPKZ255
Echo %Date% %Time% %~f1 Unexpected exit by Control-Break>> %2
Goto :End
:ARJLog
Arj.exe t %1
GoTo PointARJ%Errorlevel%
:PointARJ0
Echo %Date% %Time% %~f1 No error>> %2
Goto :End
:PointARJ1
Echo %Date% %Time% %~f1 Warning error>> %2
Goto :End
:PointARJ2
Echo %Date% %Time% %~f1 Fatal error>> %2
Goto :End
:PointARJ3
Echo %Date% %Time% %~f1 CRC/Password error>> %2
Goto :End
:PointARJ4
Echo %Date% %Time% %~f1 Modify error>> %2
Goto :End
:PointARJ5
Echo %Date% %Time% %~f1 Write error>> %2
Goto :End
:PointARJ6
Echo %Date% %Time% %~f1 Open error>> %2
Goto :End
:PointARJ7
Echo %Date% %Time% %~f1 Command line error>> %2
Goto :End
:PointARJ8
Echo %Date% %Time% %~f1 Insufficient Memory>> %2
Goto :End
:PointARJ9
Echo %Date% %Time% %~f1 It's not ARJ-file>> %2
Goto :End
:PointARJ10
Echo %Date% %Time% %~f1 DOS: XMS error>> %2
Goto :End
:PointARJ11
Echo %Date% %Time% %~f1 Unexpected exit by Control-Break>> %2
Goto :End
:PointARJ12
Echo %Date% %Time% %~f1 Overload limit in 250 copies>> %2
:End
No comments:
Post a Comment
А что вы думаете по этому поводу?