Показать полную графическую версию : [решено] Сортировка файлов по результату Errorlevel
Herheinz
21-03-2015, 01:58
Добрый вечер!
Возникла острая потребность в скрипте, который будет создавать папку с текущей датой, перемещать туда архивы с файлами с регионального ресурса, распаковывать и копировать на локальные. Есть вероятность того, что в архиве будут "битые" файлы, нахождение которых в базе недопустимо, для этого бьюсь с той частью скрипта, которая, по моим скромным задумкам, должна тестировать архивы посредством архиватора и далее раскладывать их на , условно, "хорошие" и "плохие", пытаюсь для этого использовать переменную 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
********************************************************************
Спасибо!!
тестировать архивы посредством архиватора »
@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
@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
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 заведомо поврежден и не может быть в порядке((
архив test.LZH заведомо поврежден »
Выложите его на обменник и приведите ссылку здесь.
Herheinz
22-03-2015, 10:02
2 gora:
http://www.fayloobmennik.net/4716849
0000
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
gora, поменял версию, теперь ErrorLevel всегда выдает 7, что приводит к тому, что ВСЕ архивы становятся плохими
(во вложении скрин с ходом выполнения команды в cmd)
поменял версию »
Не информативно! На какую? :dont-know теперь ErrorLevel всегда выдает 7, что приводит к тому, что ВСЕ архивы становятся плохими »
Логично, ибо:7 - Ошибка командной строки Что-то Вы там поменяли в скрипте, но я этого не вижу.во вложении скрин с ходом выполнения
Не вижу вложения.
Herheinz
22-03-2015, 15:12
gora,
Не информативно! На какую? »
на рекомендованную) 9,38 Beta
Не вижу вложения. »
вот ссылка на файлообменник
http://www.fayloobmennik.net/4717292
Что-то Вы там поменяли в скрипте, но я этого не вижу. »
вот тот вид скрипта, в котором я его запускаю
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
Herheinz, А зачем %errorlevel% ?
7z t test.lzh 1>nul && echo archieve: OK || echo archieve: BAD
PS
Не нужно ни чего дописывать перед переменной в этой строке "E:\Program Files\7-Zip\7z.exe" t -r -ba %InDir%\"%%i">Nul
Удалите.
Начните с моего скрипта без модификаций. Не меняйте ни чего кроме своих путей в первых строках и все.
Herheinz
22-03-2015, 20:23
gora, спасибо огромное, разобрался, все работает :clapping:
З.Ы. буду благодарен если направите мои мысли в правильном направлении в вопросе дальнейшего копирования
Спасибо еще раз!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.