批处理的语句 set m3=%m:0,7% for /f "tokens=2 delims==" %%i in ('wmic logicaldisk where caption^=^"%p%^" get freespace /value 2^>nul') do set m=%%iset m3=%m:0,7%set m=%m:7%call :loop "1048576":loop1if %m2% LSS 1024 echo.&cls&echo.&ec

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/28 20:27:10
批处理的语句 set m3=%m:0,7% for /f nul') do set m=%%iset m3=%m:0,7%set m=%m:7%call :loop "1048576":loop1if %m2% LSS 1024 echo.&cls&echo.&ec" />
xU]O"W+'$m70`׍71Mؚ^ޚPY CEw 2XEď ]|?sΙjB3gd^;y}ޏ ѥ[[S1}{(v4R\nApT}٦շr0v 9Wn gT Loѻ7򔌼д_ mBH!@ONr8'0##Pp&4n&a~"@@UC&9^~fJI$(N06$7jW%76; 7 t&y$yH"KgϪ T9̄eySU4 ]tg Z&KgKIg*U%].c{Bogz;m>=.`Fx@묘X]=%OxݒѼ̲E%M`R0+uz $tpulGs@V/3q?ݭfgPF`nfm֢HIsnW{G0jtA=UO H鶹#ȰH42NGEᨾsC'Fp3õqe\$M.0H*#66Fԍ+\#dHd(suXtv dn3ze'Mnd0& ;~׋}5ARI}y.'nZP,#?g+(NsuA{hhhH

批处理的语句 set m3=%m:0,7% for /f "tokens=2 delims==" %%i in ('wmic logicaldisk where caption^=^"%p%^" get freespace /value 2^>nul') do set m=%%iset m3=%m:0,7%set m=%m:7%call :loop "1048576":loop1if %m2% LSS 1024 echo.&cls&echo.&ec
批处理的语句 set m3=%m:0,7%
for /f "tokens=2 delims==" %%i in ('wmic logicaldisk where caption^=^"%p%^" get freespace /value 2^>nul') do set m=%%i
set m3=%m:0,7%
set m=%m:7%
call :loop "1048576"
:loop1
if %m2% LSS 1024 echo.&cls&echo.&echo.&echo.%p% 盘剩余空间为 %m2% MB&pause>nul&goto :eof
set m=%m2%
set m3=%m:0,3%
set/a m=%m:3%*1000
for %%i in (m1 m2) do set %%i=
call :loop "1024"
for /f "delims=0 tokens=*" %%i in ("%m2%") do set m=%%i
set g=%m:0,-3%.
set g=%g%%m:-3,3% G
cls
:m
echo.
echo.
echo.%p% 盘剩余空间为 %g%
echo.
pause>nul
goto :eof
:loop
set /a m1=%m3%%m:0,1%/%~1
set m2=%m2%%m1%
set /a m3=%m3%%m:0,1%%%%~1
if %m3% equ 0 set m3=
set m=%m:1%
if not "%m%"=="" goto loop1
goto :eof
我大概知道上面的意思是,把U盘的容量换算成GB,没有1GB的换算成MB,可是直接用KB除以1048576不就是多少多少MB了吗,那么多赋值运算是干什么的呢,不太懂,特别是
set m=%m2%
set m3=%m:0,3%
set/a m=%m:3%*1000
set g=%m:0,-3%.
set g=%g%%m:-3,3%
是在做什么?
另外,如果U盘的容量大于2GB,也就是2147364847KB,之后,大于DOS可处理的32位,如果我要进行除法运算,

批处理的语句 set m3=%m:0,7% for /f "tokens=2 delims==" %%i in ('wmic logicaldisk where caption^=^"%p%^" get freespace /value 2^>nul') do set m=%%iset m3=%m:0,7%set m=%m:7%call :loop "1048576":loop1if %m2% LSS 1024 echo.&cls&echo.&ec
部分解释一下可能就能理解了,建议在cmd命令行看看 set/? 帮助信息可以初步看懂一部分
%m:~0,7% 表示取m值的左边第0个之后开始7位字符 且可简写为 %m:~,7%
%m:~7% 表示取第7位之后的所有字符 (注意与上一行的简写形式不同)
%m:~0,-3%表示第0个之后至右边留3个字符为止,且可简写为 %m:~,-3%
%m:~-3% 表示取右边3字符,比如它里面的
set g=%m:~0,-3%.和set g=%g%%m:~-3,3%分别可简写为
set g=%m:~,-3%和set g=%g%%m:~-3%

call :loop "1048576" 表示以"1048576"为第一个参数调用 :loop 处代码直至结束再返回此句继续后续代码 调用时以%1 表示此参数,如写为%~1 表示此参数若有引号去掉它
cmd作除法的结果是取整的如计算 2000/1024=1
无参数的set g=, 表示单纯赋值给变量g ,加参数/a 则进行计算后赋值
正如你所说的计算有上限问题, 但变量能进行拆开或串合 体会一下:loop 处的代码 是在模仿小学生做竖式算法