本帖最后由 techon 于 2011-5-25 22:38 编辑
setlocal 和 endlocal 应该放在for 外面- @echo off
- setlocal enabledelayedexpansion
- for %%i in ("a.bat") do (
- set fz=%%~zi
- if !fz! lss 1024 (
- echo !fz! Byte
- ) else (
- if !fz! lss 1048576 (
- call :_div !fz! 1024 2
- set fz=!quo!KB&echo !fz!
- ) else (
- call :_div !fz! 1048576 2
- set fz=!quo!MB&echo !fz!
- )
- )
- )
- echo 文件大小为 %fz%
- endlocal
- pause&goto :EOF
-
- rem 除法计算子程序
- :_div
- if "%1"=="" echo 请输入被除数(参数 %%^1)&goto :EOF
- if "%2"=="" echo 请输入除数(参数 %%^2)&goto :EOF
- SETLOCAL ENABLEDELAYEDEXPANSION
- set Maxd=2147483647&set scp=0&set ded=%1&set dvr=%2&set quo=&set psc=%3
- if "%psc%"=="" set psc=%Maxd%
- if %dvr% equ 0 ENDLOCAL&echo 错误,除数为零!&goto :EOF
- if %ded% equ 0 ENDLOCAL&set quo=0&goto :EOF
- if "%ded%"=="%1" (
- if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
- ) else (
- echo 参数 %%^1 输入错误或数值超限
- if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
- )
- :divbg
- set/a quo=ded/dvr, rdd=quo*dvr
- if %rdd% neq %ded% (
- if %ded% leq %Maxd:~0,-1% (
- if %scp% lss %psc% set ded=%ded%0&set/a scp+=1&goto :divbg
- )
- )
- if %quo% equ 0 ENDLOCAL&set quo=0&goto :EOF
- if %scp% neq 0 (
- if "!quo:~-%scp%!"=="!quo!" (
- set quo=00000000%quo%&set quo=0.!quo:~-%scp%!
- ) else (
- set quo=!quo:~0,-%scp%!.!quo:~-%scp%!
- )
- )
- ENDLOCAL&set quo=%quo%
- goto :EOF
复制代码
|