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

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

Ветеран


Contributor


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

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


В соответствии с Вашим техзаданием
Код: Выделить весь код
@Echo Off
CLS

Set "P0=%~dp0"

Set /A SMax=7500
Set /A SAve=10
Set /A Perc=80

Set /A NIn=%SMax%*100/%SAve%/%Perc%

rem       Set /A NIn=111

Set "DirIn=E:\Games\Сокровища Монтесумы\Data"
Set "DirArc=E:\Delete"

Set ARC="C:\Program Files\WinRAR\Rar.exe" a -r

FOR /F "usebackq tokens=2,3,* delims=\" %%i IN ('%DirIn%') DO (
	Set "NArc=%Date:~6,4%%Date:~3,2%%Date:~0,2%_%%i"
	Set "NDir=%%i"
	Set "PDir=%%j\%%k"
	Set "PTmp=%Tmp%\%%i"
)

SetLocal EnableExtensions EnableDelayedExpansion

Call :OutTmp "%DirIn%"

xcopy "%DirIn%\*.*" "%OTmp%\" /t /e /y  >nul
cd /d "%PTmp%"

Set /A N=1
Set /A M=0
FOR /F "usebackq delims=" %%i IN (`dir "%DirIn%\" /b /A:-D /s 2^>nul`) DO (
	Call :OutTmp "%%i"
	Copy "%%i" "!OTmp!" >nul
	Set /A M=!M!+1
	If !M! GEQ %NIn% (
		Call :OutTmp "%DirIn%"
		echo !M! "%DirArc%\%NArc%!N!.rar" "%PDir%\"
		%ARC% "%DirArc%\%NArc%!N!.rar" "%PDir%\*.*" >nul
		rd "%OTmp%" /s /q
		xcopy "%DirIn%\*.*" "%OTmp%\" /t /e /y >nul
		Set /A N=!N!+1
		Set /A M=0
	)  
)

If NOT !M!==0 (
	echo !M! "%DirArc%\%NArc%!N!.rar" "%PDir%\"
	%ARC% "%DirArc%\%NArc%!N!.rar" "%PDir%\*.*" >nul
)

cd /d "%P0%"
rd "%Tmp%\%NDir%" /s /q

GoTo :Eof

:OutTmp
Set "DTmp=%~nx1"
Set "OTmp=%Tmp%%~pnx1"
GoTo :Eof
Здесь вариант с максимальным приближением к архиву заданного размера
Код: Выделить весь код
@Echo Off 
cls

Set "DirIn=E:\Games\Сокровища Монтесумы\Data"
Set "DirArc=E:\Delete"
Set /A SMax=7500000


Set ARC="C:\Program Files\WinRAR\Rar.exe" a -r

FOR /F "usebackq tokens=2,3,* delims=\" %%i IN ('%DirIn%') DO (
	Set "NArc=%Date:~6,4%%Date:~3,2%%Date:~0,2%_%%i"
)

SetLocal EnableExtensions EnableDelayedExpansion

Set /A N=1

FOR /F "usebackq delims=" %%i IN (`dir "%DirIn%\" /b /A:-D /s 2^>nul`) DO (
	%ARC% "%DirArc%\%NArc%!N!.rar" "%%i" >nul
	FOR /F "usebackq delims=" %%j IN (`dir "%DirArc%\%NArc%!N!.rar" /b /A:-D /s`) DO (
        	Echo %%~zj  %NArc%!N!.rar  %%i 
		If %%~zj GTR %SMax% Set /A N=!N!+1
	) 
)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 20-11-2015 в 15:22. Причина: Закомментировал отладочное данное rem Set /A NIn=111

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:35, 20-11-2015 | #8