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

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

prokazzza 11-04-2009 16:42 1091005

Не сохраняет лог батника и вопрос по перепаковке файлов
 
В UpdatePack-XPSP3-Rus создаю новый аддон, прописываю сценарий выполнения в SpecCase, для открытия нового окна:

Код:

Start /Wait Addons\TEST\TEST.CMD %1 >Addons\TEST\log\TEST.log
Почему лог сохраняется на винт, но он пустой, может что я забыл прописать в TEST.CMD или неправильно прописываю команду?

В этом же батнике есть функция:

Код:

Echo Упаковка файлов.
For /F "UseBackQ Delims=" %%I In (`Dir %WorkDir%\Tmp /B /ON 2^`) Do Call :PackFiles %%~I

:PackFiles
Set J=%~1
For /F "Delims=" %%K In (%WorkDir%\PackList) Do if /I "%%~K"=="%J:~0,-1%_" (
MakeCab /D CompressionMemory=21 /D CompressionType=LZX %WorkDir%\Tmp\%J% %WorkDir%\Tmp\%J:~0,-1%_
)
Goto :EOF

В этом случае перепаковка показана в консольном окне, каждый файл упаковывается на отдельной строке, файлов 400. Как переделать эту команду чтобы файлы упаковывались на манер UpdatePack-XPSP3-Rus, то есть показывало кол-во файлов и обработку, а не растягивало экран лога на полкилометра.

Petya V4sechkin 11-04-2009 18:54 1091123

Цитата:

Цитата prokazzza
Start /Wait Addons\TEST\TEST.CMD %1 >Addons\TEST\log\TEST.logПочему лог сохраняется на винт, но он пустой

Потому что в лог записывается вывод команды Start (которая ничего не выводит), не TEST.CMD.

Цитата:

Цитата prokazzza
чтобы файлы упаковывались на манер UpdatePack-XPSP3-Rus, то есть показывало кол-во файлов и обработку

Это только при создании .CAB архива.
При упаковке отдельных файлов можно либо выводить их список, либо не выводить (в nul).

amel27 13-04-2009 11:11 1092595

prokazzza
1. Например так, только неясен смысл "Start /WAIT", если ожидание батник сам держит :dont-know
Код:

Start "" /Wait CMD /C ("Addons\TEST\TEST.CMD" %1 1^>"Addons\TEST\log\TEST.log")
2. AFAIK тоже можно, но у вас многое осталось "за бортом" - нужен 100% рабочий пример

ADD: в вашем примере есть одна странность - цикл по файлам каталога TMP, содержимое которого меняется в процессе работы батника (архивы ложатся туда же), в таких случаях желательно сначала сохранять результат в текстовый файл и работать уже с ним, а не "вживую"

amel27 16-04-2009 11:51 1095607

Цитата:

Цитата prokazzza
чтобы файлы упаковывались на манер UpdatePack-XPSP3-Rus »

где то так, сделал через временный файл (как сказал выше): =)

Код:

@Echo Off

Set $WRK=C:\WORK
Set $TMP=%$WRK%\TMP
Set $LST=%$WRK%\PackList
Set $TMF=%$WRK%\PackList.$$$

Call :FStatNew "%$LST%" "ШАГ 1: Упаковка файлов"
2>Nul Dir /B "%$TMP%\*"|FindStr /VRC:"_$" >"%$TMF%"
For /F "UseBackQ Delims=" %%i In ("%$TMF%") Do Call :FilePack "%%i" "%$LST%"

EXIT

:FilePack
:: -------------------------
:: Упаковка одного файла
:: -------------------------
:: %1 - краткое имя файла
:: %2 - имя файла со списком
:: -------------------------
  Set $FilePack=%~1
  FindStr /IX "%$FilePack:~,-1%_" "%~2">>1
  If ErrorLevel 1 GoTo :EOF
  MakeCab /D CompressionMemory=21 /D CompressionType=LZX "%$TMP%\%$FilePack%" "%$TMP%\%$FilePack:~0,-1%_" >Nul

  Call :FStatUpd "%~1"
GoTo :EOF

:FStatNew
:: -------------------------
:: Создание статусной строки
:: -------------------------
:: %1 - файл со списком
:: %2 - текст заголовка
:: -------------------------
  Set $FStatBar=------------------------------------------------------------------------------
  Set $FStatCLS=                                                                             
  Set $FStatBST=
  Call :StringLen "%~2"
  Call Set $FStatBar=%%$FStatBar:~,%$StringLen%%%
  Echo.
  Echo %$FStatBar%
  Echo %~2
  Echo %$FStatBar%
  Set FStatFile=%~dpnx1
  For /F "Tokens=3 Delims=:" %%A In ('Find /V /C "" "%FStatFile%"') Do Set /A $FStatMax=%%A+0
  Call :StringLen %$FStatMax%
  Set $FStatLen=%$StringLen%
  Set $FStatCnt=0
Goto :EOF

:FStatUpd
:: -------------------------
:: Обновить статусную строку
:: -------------------------
:: %1 - рабочее имя элемента
:: -------------------------
  Set /A $FStatCnt+=1
  Set /A $FStatPcn=100*%$FStatCnt%/%$FStatMax%
  Set $FStatCnt=  %$FStatCnt%
  Set $FStatPcn=  %$FStatPcn%

  Call Set $FStatTxt=%$FStatPcn:~-3%%%%% [%%$FStatCnt:~-%$FStatLen%%% из %$FStatMax% файлов] - "%~1"
  Call :StringLen "%$FStatTxt:"=_%"
  Call Set $FStatTxt=%%$FStatTxt%%%%$FStatCLS:~%$StringLen%%%
  <Nul Set /P $FStatTxt=%$FStatTxt%%$FStatBST%
Goto :EOF

:StringLen
:: -----------------------
:: Нахождение длины строки
:: -----------------------
:: %1 - текстовая строка
:: -----------------------
  If ""=="%~1" GoTo :EOF
  Set $StringLen=0&Set $StringBuf=%~1
:StringLenLoop
  Set /A $StringLen+=1
  Call Set $StringChr=%%$StringBuf:~%$StringLen%%%
  If ""=="%$StringChr%" GOTO :EOF
GoTo :StringLenLoop



Время: 07:46.

Время: 07:46.
© OSzone.net 2001-