 |
|
R.i.m.s.k.y. |
31-12-2013 11:41 2281119 |
if в батнике по размеру файла больше 4 гигабайт
есть батник
нужно папки и файлы больше 10 гиг (для простоты гиг/мег/килобайт считаю десятичным а не 1024) передавать на обработку в секцию BIG, файлы от 600метров до 10 гиг в SMALL, файлы меньше 600 метров - VERYSMALL
условие на 1000000 это для атрибутов папки, а то размер для папки возвращается ненулевой в зависимости от атрибутов
батник выводит имя файла, размер и секцию при выполнении (чтобы видно было в какой раздел он попал)
передаю батнику параметром файл размером 12 гиг, но батник выполняет секцию small - происходит переполнение переменной SIZEFILE>2^32 и отбрасываются последние знаки, хотя должен идти в секцию BIG
как выкрутиться?
Код:
@SET FILE=%2
@SET SIZEFILE=%~z2
@SET FOLDER=%3
@SET FILENAME=%1
@echo %FILE%
@rem @rd %FOLDER%
md %FILENAME%
IF %SIZEFILE% LEQ 1000000 (goto big)
IF %SIZEFILE% LEQ 600000001 (goto verysmall)
IF %SIZEFILE% LEQ 10000000001 (goto small)
goto big
:big
@echo %SIZEFILE% Folder or BIG
...
goto end
:small
@echo %SIZEFILE% small
...
goto end
:verysmall
@echo %SIZEFILE% verysmall
...
goto end
:end
|
откусывай от размера 3 или 6 последних знаков
|
R.i.m.s.k.y. |
31-12-2013 11:53 2281125 |
как?
любые действия с SIZEFILE в которой лежит размер файла больше 4 гиг дают ошибку
я бы все числа поделил на 1000, но SIZEFILE 12гигового файла не дается
Код:
Неверное число. Числа ограничены 32 битами точности.
|
R.i.m.s.k.y. |
31-12-2013 12:10 2281128 |
ларчик просто открывался
Код:
set /a %SIZEFILE:~0,-3%
откусывает три последних символа, т.е. делит на 1000
может еще подскажете как можифицировать батник чтобы вычислять размер папок и обрабатывать их наравне с файлами по секциям big/small/verysmall
Код:
@SET FILE=%2
@SET SIZEFILE=%~z2
@SET SIZEFILEKb=%SIZEFILE:~0,-3%
@SET SIZE1=1000
@SET SIZE2=600001
@SET SIZE3=10000001
@SET FOLDER=%3
@SET FILENAME=%1
@echo %FILE%
@rem @rd %FOLDER%
md %FILENAME%
IF %SIZEFILEKb% LEQ %SIZE1% (goto big)
IF %SIZEFILEKb% LEQ %SIZE2% (goto verysmall)
IF %SIZEFILEKb% LEQ %SIZE3% (goto small)
goto big
|
см. предпоследнюю строку вывода
|
R.i.m.s.k.y. |
31-12-2013 13:02 2281145 |
kiripanda, и как из команды dir в переменную занести размер папки?
|
Код:
for /f "tokens=1-3" %%x in ('dir /a-d/-c/s 2^>nul ^|findstr /c:"файлов"') do set size=%%z
echo %size% Bytes
|
R.i.m.s.k.y. |
31-12-2013 13:35 2281162 |
kiripanda, спасибо
но мне нужно скрестить с батником выше, т.е. добавить еще условие на разделение папки/файла
|
Win Rus? Батник в cp866?
для Eng нужно
Код:
findstr /c:"File(s)"
_____________________________________________
теперь как в предыдущем случае откусывай от %size% 3-6 знаков
|
R.i.m.s.k.y. |
31-12-2013 13:44 2281171 |
Цитата:
Цитата kiripanda
Win Rus? Батник в cp866? »
|
да
да
______
эта команда для файлов тоже сработает?
|
с вроде работает. Но передавать нужно полный путь, а-то посчитает сумму размеров всех одноимённых файлов
|
R.i.m.s.k.y. |
31-12-2013 14:01 2281180 |
R.i.m.s.k.y., эта команда сносит моцк батнику: вместе с ним начинает архивироваться не сам файл, а все что в подпапке t:\1
основной вызывающий батник
Код:
cmd /C www-.cmd 0091 "t:\1\папка с файлами" "t:\1\"
cmd /C www-.cmd 0092 "t:\1\большой файл 12 гигов.ext" "t:\1\"
www архивирует как надо но папки архивирует как BIG даже если там пара метров
Код:
@rem русский СР866
@rem echo off
@echo.
@CD /D %3
@SET FILE=%2
@SET SIZEFILE=%~z2
@SET SIZEFILEKb=%SIZEFILE:~0,-3%
@SET SIZE1=1000
@SET SIZE2=600001
@SET SIZE3=10000001
@SET FOLDER=%3
@SET FILENAME=%1
@echo %FILE%
@rem @rd %FOLDER%
@rd /S /Q %FILENAME% > nul
@md %FILENAME%
IF %SIZEFILEKb% LEQ %SIZE1% (goto big)
IF %SIZEFILEKb% LEQ %SIZE2% (goto verysmall)
IF %SIZEFILEKb% LEQ %SIZE3% (goto small)
goto big
@rem if %SIZEFILE% GEQ 10000000001 (goto big)
@rem if %SIZEFILE% GEQ 600000001 (goto small)
@rem if %SIZEFILE% GEQ 20000001 (goto verysmall)
@rem goto big
:big
@echo %SIZEFILEKb% KB BIG
@"C:\Program Files\WinRAR\WinRAR.exe" m -m1 -r -t -rv25%% -ep1 -v200m %FILENAME%\%FILENAME%.rar %FILE%
goto end
:small
@echo %SIZEFILEKb% KB small
@"C:\Program Files\WinRAR\WinRAR.exe" m -m1 -r -t -rv25%% -ep1 -v50m %FILENAME%\%FILENAME%.rar %FILE%
goto end
:verysmall
@echo %SIZEFILEKb% KB verysmall
@"C:\Program Files\WinRAR\WinRAR.exe" m -m1 -r -t -rv25%% -ep1 -v3m %FILENAME%\%FILENAME%.rar %FILE%
goto end
:end
www-.cmd учитывает размер папки но в архив начинает загонять все что лежит в t:\1
Код:
@rem русский СР866
@rem echo off
@echo.
@CD /D %3
for /f "tokens=1-3" %%x in ('dir /a-d/-c/s %2 2^>nul ^|findstr /c:"файлов"') do set size=%%z
@SET SIZEFILEKb=%size:~0,-3%
@SET SIZE1=1000
@SET SIZE2=600001
@SET SIZE3=10000001
@SET FOLDER=%3
@SET FILENAME=%1
@echo %FILE%
@rem @rd %FOLDER%
@rd /S /Q %FILENAME% > nul
@md %FILENAME%
IF %SIZEFILEKb% LEQ %SIZE1% (goto big)
IF %SIZEFILEKb% LEQ %SIZE2% (goto verysmall)
IF %SIZEFILEKb% LEQ %SIZE3% (goto small)
goto big
@rem if %SIZEFILE% GEQ 10000000001 (goto big)
@rem if %SIZEFILE% GEQ 600000001 (goto small)
@rem if %SIZEFILE% GEQ 20000001 (goto verysmall)
@rem goto big
:big
@echo %SIZEFILEKb% KB BIG
@"C:\Program Files\WinRAR\WinRAR.exe" m -m1 -r -t -rv25%% -ep1 -v200m %FILENAME%\%FILENAME%.rar %FILE%
goto end
:small
@echo %SIZEFILEKb% KB small
@"C:\Program Files\WinRAR\WinRAR.exe" m -m1 -r -t -rv25%% -ep1 -v50m %FILENAME%\%FILENAME%.rar %FILE%
goto end
:verysmall
@echo %SIZEFILEKb% KB verysmall
@"C:\Program Files\WinRAR\WinRAR.exe" m -m1 -r -t -rv25%% -ep1 -v3m - %FILENAME%\%FILENAME%.rar %FILE%
goto end
:end
|
R.i.m.s.k.y., самый правильный путь — перейти к использованию WSH или PoSH.
|
Время: 15:32.
© OSzone.net 2001-