2013-11-25 6 views
0

Я новичок в создании пакетных файлов и столкнулся с проблемой. Мой план состоит в том, чтобы сравнить размер (в байте) файла (неизвестное имя файла, но с фиксированным расширением) с несколькими «maxfilesizes» и делать разные вещи в зависимости от размера файла.Пакет - множественные проверки размера файла

@echo off 
for /F %%a in ('dir /b *.bin') do set file=%%~na 
:BEGIN 
for %%X in (%file%.bin) do if %%~zX LSS 1500000000 goto 15MB 
for %%X in (%file%.bin) do if %%~zX LSS 5000000000 goto 50MB 
for %%X in (%file%.bin) do if %%~zX LSS 10000000000 goto 100MB 
for %%X in (%file%.bin) do if %%~zX LSS 15000000000 goto 150MB 
goto Error 
:15MB 
echo Less than 1500000000b. Do stuff here.. 15MB. 
goto TheEnd 
:50MB 
echo Less than 5000000000b. Do stuff here.. 50MB. 
goto TheEnd 
:100MB 
echo Less than 10000000000b. Do stuff here.. 100MB. 
goto TheEnd 
:150MB 
echo Less than 15000000000b. Do stuff here.. 150MB. 
goto TheEnd 
:Error 
echo File size greater than 14GB. Aborting.. 

:TheEnd 
echo All done. 
pause 

Я проверил эту партию с файлом, который ~ 8.000.000.000 байт так «: 100MB» должна быть запущена, но это не так. Вместо этого я всегда получаю «Размер файла более 14 ГБ. Aborting .. ' Пожалуйста, имейте в виду, что я новичок, поэтому вышеупомянутая партия, вероятно, не самая эффективная. Любая помощь будет очень признательна.

EDIT: @Aacini большое вам спасибо, я только что проверил ваш код с некоторыми из моих файлов, и он делает именно то, что я хотел.

[...], но я думаю, вы должны пересмотреть номера, которые вы используете в байтах -> преобразование MB ...

И это не преобразования. Я использую их только для goto, потому что, если размер файлов меньше 1500000000 байт, я хочу, чтобы файл был разделен на 15 Мб частей (эхо-файлы будут заменены командами). Следовательно, -> goto 15MB. Надеюсь, что это очистит. Еще раз спасибо!

+1

hm, проверьте свои конверсии с байтов на мегабайты и гигабайты. –

+0

Проблема заключается в том, что вы используете команду for. Он просматривает содержимое файла, а не сам файл. – Monacraft

+0

Энди Т: Я не думаю, что с байтами что-то не так. @Monacraft: Когда я делаю - для %% X in (% file% .bin) делает echo %% ~ zX bytes - он правильно эхо-байты. Что именно ты имеешь ввиду? Как изменить команду for, чтобы она просматривала сам файл? – user3033137

ответ

1

Вы можете просто ликвидировать три последние цифры размера для преобразования байтов в КБ, что эквивалентно разделить его на 1000. Если вы заинтересованы размером в МБ, разница не имеет значения:

@echo off 
for %%a in (*.bin) do set fileSize=%%~Za 
set fileSize=%fileSize:~0,-3% 
:BEGIN 
if %fileSize% LSS 1500000 goto 15MB 
if %fileSize% LSS 5000000 goto 50MB 
if %fileSize% LSS 10000000 goto 100MB 
if %fileSize% LSS 15000000 goto 150MB 
goto Error 

Вы также можете достичь сравнений так:

:BEGIN 
for %%a in (15 50 100 150) do if %fileSize% LSS %%a00000 goto %%aMB 
goto Error 

Примечание: Предыдущий код дублирует поведение вас r own, но я думаю, вам следует просмотреть номера, которые вы используете в байтах -> MB-конвертация ...

0

Вот что вы можете сделать - если вы пытаетесь «сканировать» по определенному пути (например, C: \ Users \% username% *. Extension), вы можете использовать следующую команду для «петли» по всем каталогам и подкаталогов вы указываете:

FOR /R "[Drive][Path][*]" %%A in ('*.extension') DO ECHO %%~nA 

вы можете заменить %% ~ нА с типом информации, которую вы хотите отобразить (имейте в виду, что вы должны включать в себя ~ %% ​​и а в этом вы можете изменить п You.. может также включать более одного, например %% ~ nxA). Надеюсь, это поможет с тем, что вы хотите. Если вы хотите сделать больше, чем просто DO ECHO вы можете сделать следующее

DO ECHO (
echo %%~nA 
echo %%~xA 
echo Scanning... 
) 
Смежные вопросы