Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата 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

Отправлено: 11:51, 16-04-2009 | #4