找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22202|回复: 3

[文件操作] [已解决]以MB显示容量的批处理是怎样避免超出set /a的计算范围?

[复制链接]
发表于 2011-9-26 09:46:59 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-12-7 21:51 编辑

在以兆显示容量的大小时碰到一下情况

在网上搜了一下了,说DOS计算有范围的。现在硬盘的容量都很大,基本上以字节来计算,都超过了DOS的计算范围。
在论坛找到一下代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a num2=1024*1024
  4. set total=0
  5. for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
  6.     set num1=0
  7.     set num3_str=
  8.     set num4=
  9.     for /f "tokens=3" %%j in ('dir /-c %%i:\ 2^>nul') do (
  10.         set num1=%%j
  11.     )
  12.     if not "!num1!"=="0" (
  13.         call :loop
  14.         for /f "delims=0 tokens=*" %%k in ("!num3_str!") do (
  15.             set num3_str=%%k
  16.         )
  17.         echo.
  18.         echo %%i 盘剩余空间为 !num3_str! MB
  19.         set /a total+=!num3_str!
  20.         echo.
  21.     )
  22. )
  23. echo 剩余空间总量为 !total! MB
  24. pause
  25. goto :eof

  26. :loop
  27. :: 求商
  28. set /a num3=%num4%%num1:~0,1%/%num2%
  29. :: 求商序列
  30. set num3_str=%num3_str%%num3%
  31. :: 求余
  32. set /a num4=%num4%%num1:~0,1%%%%num2%
  33. if %num4% equ 0 (
  34.     set num4=
  35. )
  36. set num1=%num1:~1%
  37. if not "%num1%"=="" (
  38.     goto :loop
  39. )
  40. goto :eof
复制代码
确实可以实现,以兆显示容量
但是却不是用的什么原理,避免了DOS的计算范围?
发表于 2011-9-26 20:51:22 | 显示全部楼层
字符分隔,再合并~
 楼主| 发表于 2011-9-26 22:18:10 | 显示全部楼层
字符分隔,再合并~
garyng 发表于 2011-9-26 20:51

谢谢你的回答。
能再详细点吗?
发表于 2011-9-27 18:58:05 | 显示全部楼层
回复 3# bingxing8000


    找找论坛吧~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 06:19 , Processed in 0.017420 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表