Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Сортировка файлов по результату Errorlevel (http://forum.oszone.net/showthread.php?t=297231)

Herheinz 21-03-2015 01:58 2485458

Сортировка файлов по результату Errorlevel
 
Добрый вечер!
Возникла острая потребность в скрипте, который будет создавать папку с текущей датой, перемещать туда архивы с файлами с регионального ресурса, распаковывать и копировать на локальные. Есть вероятность того, что в архиве будут "битые" файлы, нахождение которых в базе недопустимо, для этого бьюсь с той частью скрипта, которая, по моим скромным задумкам, должна тестировать архивы посредством архиватора и далее раскладывать их на , условно, "хорошие" и "плохие", пытаюсь для этого использовать переменную Errorlevel, разумеется. безуспешно

********************************************************************
set InDir=d:\test\d\
set log=d:\test\log.txt
echo "Start" >>%log%
for /f %i in ('dir %InDir% /b') do ("C:\Program Files\7-Zip\7z.exe" t -r %InDir%%i
IF %ERRORLEVEL% neq 0 goto BAD else goto OK)

:OK
xcopy d:\test\d\ d:\test\c\ok >>%log%

:BAD
xcopy d:\test\d\ d:\test\c\Bad >>%log%

pause

********************************************************************

Спасибо!!

gora 21-03-2015 06:54 2485472

Цитата:

Цитата Herheinz
тестировать архивы посредством архиватора »

Код:

@Echo Off
SetLocal EnableDelayedExpansion
set InDir=s:\test\d\
set log=s:\test\log.txt

echo "Start" >%log%
For /F "tokens=* delims=" %%i In ('dir /S /A:-D /B "%InDir%" 2^>Nul') Do (
        "C:\Program Files\7-Zip\7z.exe" t -r -ba "%%i">Nul
        Echo
"%%i"        !ERRORLEVEL!
        IF !ERRORLEVEL! neq 0 (Call :BAD "%%i") else (Call :OK "%%i")
)

Pause

:OK
Echo Archive is OK        %1 >>%log%
rem xcopy s:\test\d\ s:\test\c\ok >>%log%
GoTo :EOF

:BAD

Echo Archive is BAD        %1 >>%log%
rem xcopy s:\test\d\ s:\test\c\Bad >>%log%
GoTo :EOF


Georgio 21-03-2015 13:11 2485573

Код:

@echo off

set "InDir=d:\test\d\"
set "log=d:\test\log.txt"

>"%log%" echo "Start"
pushd "%InDir%"
for /f "delims=" %%i in ('dir/a-d/b') do (
 "C:\Program Files\7-Zip\7z.exe" t -r "%%i"|>nul find/i "Everything is Ok"&& call:# "%%i" ok|| call:# "%%i" bad
)
popd

pause& exit/b

:#
>>"%log%" xcopy/y "%~1" "..\c\%2\"& goto:eof


Herheinz 21-03-2015 14:44 2485601

2 gora: спасибо, но что то тут не так.
вот результат ЛОГа: ""Start"
Archive is OK "d:\test\d\test.LZH"
Archive is OK "d:\test\d\test.rar"
Archive is OK "d:\test\d\test.zip"
Archive is OK"

Вся беда в том что архив test.LZH заведомо поврежден и не может быть в порядке((

gora 21-03-2015 14:49 2485605

Цитата:

Цитата Herheinz
архив test.LZH заведомо поврежден »

Выложите его на обменник и приведите ссылку здесь.

Herheinz 22-03-2015 10:02 2485926

2 gora:
http://www.fayloobmennik.net/4716849

0000

gora 22-03-2015 10:10 2485931

Herheinz, результат:
Код:

"Start"
Archive is OK        "s:\test\d\35234t6.7z"
Archive is OK        "s:\test\d\d_sl2_150321_12-12.7z"
Archive is OK        "s:\test\d\pr.7z"
Archive is BAD        "s:\test\d\Temp 1.7z"
Archive is OK        "s:\test\d\Temp11.7z"
Archive is BAD        "s:\test\d\test.lzh"
Archive is OK        "s:\test\d\Test_7zip.7z"

ps
7-Zip Ver 9.38 beta

Herheinz 22-03-2015 15:00 2486040

Вложений: 2
gora, поменял версию, теперь ErrorLevel всегда выдает 7, что приводит к тому, что ВСЕ архивы становятся плохими
(во вложении скрин с ходом выполнения команды в cmd)

gora 22-03-2015 15:07 2486045

Цитата:

Цитата Herheinz
поменял версию »

Не информативно! На какую? :dont-know
Цитата:

Цитата Herheinz
теперь ErrorLevel всегда выдает 7, что приводит к тому, что ВСЕ архивы становятся плохими »

Логично, ибо:
Цитата:

Цитата справка
7 - Ошибка командной строки

Что-то Вы там поменяли в скрипте, но я этого не вижу.
Цитата:

во вложении скрин с ходом выполнения
Не вижу вложения.

Herheinz 22-03-2015 15:12 2486050

gora,

Цитата:

Цитата gora
Не информативно! На какую? »

на рекомендованную) 9,38 Beta

Цитата:

Цитата gora
Не вижу вложения. »

вот ссылка на файлообменник

http://www.fayloobmennik.net/4717292

Цитата:

Цитата gora
Что-то Вы там поменяли в скрипте, но я этого не вижу. »

вот тот вид скрипта, в котором я его запускаю

rem @Echo Off
SetLocal EnableDelayedExpansion
set InDir=d:\test\d\
set log=d:\test\log.txt

echo "Start" >>%log%
For /F "tokens=* delims=" %%i In ('dir /S /A:-D /B "%InDir%" 2^>Nul') Do (
"C:\Program Files\7-Zip\7z.exe" t -r -ba %InDir%\"%%i">Nul
Echo "%%i" !ERRORLEVEL!
IF !ERRORLEVEL! neq 0 (Call :BAD "%%i") else (Call :OK "%%i")
)
Pause

:OK
Echo Archive is OK %1 >>%log%
rem xcopy s:\test\d\ s:\test\c\ok >>%log%
GoTo :EOF

:BAD
Echo Archive is BAD %1 >>%log%
rem xcopy s:\test\d\ s:\test\c\Bad >>%log%
GoTo :EOF

Foreigner 22-03-2015 15:13 2486054

Herheinz, А зачем %errorlevel% ?
Код:

7z t test.lzh 1>nul && echo archieve: OK || echo archieve: BAD

gora 22-03-2015 15:14 2486055

PS
Не нужно ни чего дописывать перед переменной в этой строке
Код:

        "E:\Program Files\7-Zip\7z.exe" t -r -ba %InDir%\"%%i">Nul
Удалите.
Начните с моего скрипта без модификаций. Не меняйте ни чего кроме своих путей в первых строках и все.

Herheinz 22-03-2015 20:23 2486177

gora, спасибо огромное, разобрался, все работает :clapping:

З.Ы. буду благодарен если направите мои мысли в правильном направлении в вопросе дальнейшего копирования

Спасибо еще раз!


Время: 12:09.

Время: 12:09.
© OSzone.net 2001-