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