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

[数值计算] 如何解决比较两个大的数字出现误判/判断错误/有误的问题?

本帖最后由 pcl_test 于 2017-4-10 13:52 编辑

各位大神,我在脚本中需要比较两个变量值的大小,但是发现使用 gtr 和 lss去比较是存在问题的,比如变量A=134991245312 变量B=2147483648,那么比较的结果是变量A小于变量B。 看起来是按照从左到右的顺序去比较了,是否需要先将变量的值转换成数字类型?不知道能否进行这样的转换,请各位赐教,非常感谢!
  1. cd C:\
  2. C:
  3. set size=2147483648
  4.         for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DeviceID='C:'" get FreeSpace /value') do (
  5.          echo %%a
  6.          echo %size%
  7. if %%a gtr %size% (
  8.                         echo %date%----磁盘空间剩余大于2GB
  9. )else if %%a lss %size% (
  10.                         echo %date%----磁盘空间剩余小于2GB
  11.     ) else (
  12.                         echo %date%----磁盘空间剩余等于2GB
  13.     )
  14.     )
  15. echo %date%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^磁盘空间检查完成
  16. pause
复制代码
1

评分人数

134991245312 这个数字太大,超过了BAT能够直接计算的范围。
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

回复 2# gawk

多谢 gawk ,确实是数值范围的问题。 但因为代码取到的剩余磁盘空间的单位是字节,所以数值会很大,请问是否有方法取出MB或GB单位的数据?多谢!

TOP

简单的直接舍弃相应位数进行换算,如2147483648B≈2147483KB≈2147MB≈2GB

TOP

本帖最后由 WHY 于 2016-1-20 10:06 编辑

可以在数字前面补上足够多的零,然后以字符串的方式比较
  1. @echo off
  2. set "zero=00000000000000000000"
  3. set "size=%zero%2147483648"
  4. for /f %%a in ('wmic LogicalDisk where "DeviceID='C:'" get FreeSpace^|findstr [0-9]') do set "free=%zero%%%a"
  5. if "%free:~-20%" gtr "%size:~-20%" (
  6.     echo 大于2GB
  7. ) else if "%free:~-20%" lss "%size:~-20%" (
  8.     echo 小于2GB
  9. ) else (
  10.     echo 等于2GB
  11. )
  12. pause
复制代码
也可以用vbs js powershell等等,举例:
  1. $p = (Get-wmiObject -query "Select * from win32_LogicalDisk where DeviceID='C:'").FreeSpace
  2. if($p -gt 2147483648){"大于2GB"}elseif($p -lt 2147483648){"小于2GB"}else{"等于2GB"}
复制代码

TOP

返回列表