PDA

Показать полную графическую версию : [решено] Отчет по целостности файлов


The_Immortal
20-03-2016, 21:43
Приветствую!

Необходимо через утилиту 7za.exe проверить все файлы расширения docx в каталоге и подкаталогах на целостность. Из получившегося списка необходимо выделить список (имена) файлов, у которых возникли ошибки или предупреждения.

Запуск утилиты произвожу таким образом:
7za t c:\DirToCheck\*.docx -bse0
Получаю такой результат:
7-Zip (a) [64] 15.14 : Copyright (c) 1999-2015 Igor Pavlov : 2015-12-31

Scanning the drive for archives:
3 files, 3045799 bytes (2975 KiB)

Testing archive: c:\DirToCheck\bad.docx
--
Path = c:\DirToCheck\bad.docx
Type = zip
Physical Size = 145588


Sub items Errors: 7

Testing archive: c:\DirToCheck\good.docx
--
Path = c:\DirToCheck\good.docx
Type = zip
Physical Size = 17139

Everything is Ok

Testing archive: c:\DirToCheck\warning.docx

WARNINGS:
There are data after the end of archive

--
Path = c:\DirToCheck\warning.docx
Type = zip
WARNINGS:
There are data after the end of archive
Physical Size = 20567
Tail Size = 2862505

Everything is Ok

Archives: 3
OK archives: 1
Archives with Errors: 1
Archives with Warnings: 1

Warnings: 1

Sub items Errors: 7
Из этого всего мне нужно получить лишь список следующих файлов:
c:\DirToCheck\bad.docx
c:\DirToCheck\warning.docx, потому как у этих файлов есть ошибки (Error) или предупреждения (Warning).

Теперь пытаюсь сделать это в скрипте:
for /f "delims=" %a in ('dir c:\DirToCheck\*.doc /b /s /a-d') do 7za t "%a" -bse0 | FIND "Warn"Здесь мне необходимо добавить как-то в условие FIND "Err", а также в случае нахождения одного из этих двух слов, перенаправлять имя файла в log.txt. Помогите, пожалуйста, это организовать.

Спасибо!

Iska
20-03-2016, 22:07
Почему не просто воспользоваться кодом возврата 7-Zip? Наподобие (пишу по памяти, не проверялось):
… do >nul 2>&1 7za.exe t "%a" -bse0 || echo %a

Georgio
20-03-2016, 22:45
Или так:

for /f "delims=" %%a in ('dir "C:\DirToCheck\*.doc" /b /s /a-d') do (
7za t "%%a" -bse0 | >nul find /i "Everything is Ok"|| >>"log.txt" echo %%a
)

.

The_Immortal
20-03-2016, 22:53
Iska, результатом такого скрипта будет следующее:c:\7z1514-extra\x64>7za t "c:\DirToCheck\bad.docx" -bse0 1>nul 2>&1 || echo c:\DirToCheck\bad.docx
c:\DirToCheck\bad.docx

c:\7z1514-extra\x64>7za t "c:\DirToCheck\good.docx" -bse0 1>nul 2>&1 || echo c:\DirToCheck\good.docx

c:\7z1514-extra\x64>7za t "c:\DirToCheck\warning.docx" -bse0 1>nul 2>&1 || echo c:\DirToCheck\warning.docxТ.е имя файла выдается в случае ошибки, а ещё нужно учитывать предупреждение...

Georgio, фраза "Everything is Ok" также фигурирует в случае, если файл имеет предупреждение, поэтому от неё отталкиваться нельзя...

Georgio
20-03-2016, 23:18
Тогда как-то так:

for /f "delims=" %%a in ('dir "C:\DirToCheck\*.doc" /b /s /a-d') do (
7za t "%%a" -bse0 | >nul findstr /i "error warning"&& >>"log.txt" echo %%a
)

.

The_Immortal
20-03-2016, 23:21
Georgio, большущее спасибо!

Iska
20-03-2016, 23:49
а ещё нужно учитывать предупреждение... »
Значит, Ваши «Warning» имеют какое-то другое происхождение, поскольку «Exit Codes from 7-Zip» трактует однозначно:
7-Zip returns the following exit codes:

Code Meaning
0 No error
1 Warning (Non fatal error(s)). For example, one or more files were locked by some other application, so they were not compressed.
2 Fatal error
7 Command line error
8 Not enough memory for operation
255 User stopped the process




© OSzone.net 2001-2012