[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 523066680 于 2019-1-5 20:27 编辑

回复 1# aries215


    你想要第一列和最后一列是吗?
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. for /f "tokens=1,3" %%i in ('fsutil volume diskfree c:') do (
  4.     set "a=%%i"
  5.     set "b=%%j"
  6.     echo !a! - !b!
  7. )
复制代码
蛋疼一点:
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. :: 常量初始化
  4. set sharp=####################
  5. :get_total_size
  6. for /f "tokens=3" %%i in ('fsutil volume diskfree c:') do (set total=%%i&goto :get_free_size)
  7. :get_free_size
  8. for /f "tokens=3" %%i in ('fsutil volume diskfree c: ^|more +1') do (set free=%%i&goto :count)
  9. :count
  10. call :bignum_minus %total% %free% delta
  11. echo %total% %free% 已用空间 %delta%
  12. exit /b
  13. ::大数减法
  14. :bignum_minus
  15.     setlocal
  16.     set num_a=%1
  17.     set num_b=%2
  18.     call :length %num_a% len_a
  19.     call :length %num_b% len_b
  20.     set /a max = len_a
  21.     if %len_b% gtr %len_a% (set /a max=len_b, len_b=len_a&set num_a=%num_b%&set num_b=%num_a%)
  22.     set /a minus = 0
  23.     for /l %%n in ( 1, 1, %max% ) do (
  24.         if %%n leq %len_b% (
  25.             set /a dt = !num_a:~-%%n,1! - !num_b:~-%%n,1! - minus
  26.         ) else (
  27.             set /a dt = !num_a:~-%%n,1! - minus
  28.         )
  29.         if !dt! lss 0 (
  30.             set /a buff[%%n] = dt + 10, minus=1
  31.         ) else (
  32.             set /a buff[%%n] = dt, minus=0
  33.         )
  34.     )
  35.     set delta=#
  36.     for /l %%a in (%max%, -1, 1) do set delta=!delta:#0=#!!buff[%%a]!
  37.     endlocal &set %3=%delta:#=%
  38.     goto :eof
  39. ::字符串长度计算
  40. :length %str% %vname%
  41.     setlocal
  42.     set test=%~1_%sharp%
  43.     set test=!test:~0,20!
  44.     set test=%test:*_=%
  45.     set /a len=20-(%test:#=1+%1)
  46.     endlocal &set %2=%len%
  47.     goto :eof
复制代码
如果你要我转换成 KB MB GB ,对不起,我不会批处理,我是论坛消遣区负责灌水的。

TOP

本帖最后由 523066680 于 2019-1-6 09:24 编辑

回复 20# aries215

    不是还要做减法吗,13楼第二段代码做了减法

Stackoverflow有一个很好的方案,结果也很直观
https://stackoverflow.com/questi ... ote-windows-servers
  1. >diskfree.cmd %COMPUTERNAME% C:
  2. Total space: 137GB
  3. Free space: 44GB
  4. Used space: 93GB
  5. Percent Used: 67%
  6. Percent Free: 33%
复制代码

TOP

本帖最后由 523066680 于 2019-1-7 21:00 编辑

回复 24# aries215

    是可以简化处理的,但是我很懒,在win7运行挺正常的。
为什么是1048不是1024

TOP

本帖最后由 523066680 于 2019-1-7 21:29 编辑

回复 26# aries215

不懂批处理,按零请高明



我发现我把total 和 free写反了,win7测试勉强OK,不知道有没有其他BUG
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. :: 常量初始化
  4. set const=9876543210
  5. :get_free_size
  6. for /f "tokens=3" %%i in ('fsutil volume diskfree c:') do (set free=%%i&goto :get_total_size)
  7. :get_total_size
  8. for /f "tokens=3" %%i in ('fsutil volume diskfree c: ^|more +1') do (set total=%%i&goto :count)
  9. :count
  10. set /a Afoo=%total:~0,-5%, Abar=%total:~-5%
  11. set /a Bfoo=%free:~0,-5%, Bbar=%free:~-5%
  12. echo %Afoo% %Abar% %Bfoo% %Bbar%
  13. set /a foo=Afoo-Bfoo, bar=Abar-Bbar
  14. if %bar% leq 0 set /a foo-=1, bar=100000-(-bar)
  15. echo,
  16. echo %total% %free% 已用空间 %foo%%bar%
  17. exit /b
复制代码

TOP

返回列表