Board logo

标题: [数值计算] [已解决]批处理比较数值大小出现误判/判断错误/有误是什么问题 [打印本页]

作者: 小智BAT    时间: 2015-4-9 18:02     标题: [已解决]批处理比较数值大小出现误判/判断错误/有误是什么问题

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

代码如下,请教是什么问题。。
原因已解决。
  1. @echo off & setlocal EnableDelayedExpansion
  2. cls
  3. set size=2048
  4. echo.
  5. echo.
  6. echo        ╔══════════════════════════════╗
  7. echo        ║        磁盘分区         磁盘卷标名      剩余空间(MB)       ║
  8. echo        ║    _____________________________________________________   ║
  9. for %%d in (C) do (
  10.     if exist %%d:\nul (
  11.         for /f "tokens=3" %%z in ('dir /-c %%d:\') do set freesize=%%z
  12.         set /a freesize=!freesize:~0,-3!/1049>nul
  13.         set freesize=         !freesize!
  14.         set freesize=!freesize:~-9!
  15.         for /f "tokens=3*" %%v in ('vol %%d:') do set volume=%%w
  16.         set volume=                    !volume!
  17.         set volume=!volume:~-20!
  18.         echo        ║           %%d: !volume!     !freesize!          ║
  19.     )
  20. )
  21. echo        ╚══════════════════════════════╝
  22. set mb=!freesize:~-9!
  23. echo  %mb%   %size%
  24. if "%mb%" gtr "%size%" (
  25. echo     C盘空间大于2G。5秒后返回等待!
  26.         ping -n 5 127.1 >nul
  27.         goto jiance
  28. ) else if "%mb%" lss "%size%" (
  29. echo     C盘空间小于2G。5秒后清理!
  30.         ping -n 5 127.1 >nul
  31.         goto ljqingli
  32. ) else (
  33. echo     C盘空间小于2G。5秒后清理!
  34.         ping -n 5 127.1 >nul
  35.        goto ljqingli
  36. )
  37. )
  38. pause
复制代码

作者: gawk    时间: 2015-4-9 18:10

BAT能够直接计算的数值大小是有限的,可以考虑调用其它脚本来判断,例如:

PowerShell获取硬盘分区信息(总容量、已用空间、可用空间)
http://bbs.bathome.net/thread-26200-1-1.html

VBS调用WMI获取硬盘总容量、可用空间、可用空间百分比
http://bbs.bathome.net/thread-16078-1-1.html
http://bbs.bathome.net/thread-1334-1-1.html
作者: 小智BAT    时间: 2015-4-9 18:53

回复 2# gawk


    不懂,就是不明白gtr判断怎么错误的。
作者: pcl_test    时间: 2015-4-9 19:07

回复 3# 小智BAT

数字比较,不能加引号,加了引号就变成字符串了,字符串比较不了,所以出错
作者: 小智BAT    时间: 2015-4-9 19:17

回复 4# pcl_test


    谢谢,涨姿势了。
作者: gawk    时间: 2015-4-9 20:56

回复 3# 小智BAT


举个例子吧,比如BAT能直接处理的最大数字是1亿,但是你想判断是否 gtr 2亿,它是不行滴。
硬盘空间很容易超过几十GB,甚至上TB,这个数字在已经不能直接用 gtr 作比较了。有没有双引号都不行。
作者: pcl_test    时间: 2015-4-9 21:48

回复 6# gawk

LZ的数值是做了处理的,没有超过批处理能处理的范围,所以问题不是这个
作者: gawk    时间: 2015-4-9 21:57

回复 7# pcl_test


    嗯,看到了。希望楼主不会遇到TB、PB的吧
作者: cobat    时间: 2015-4-11 21:20

回复 8# gawk

1PB来和2GB比较下
  1. @echo off
  2. set/a "i=1<<31,j=i-1"
  3. for %%a in (1 %j% %i:~1% 1125899906842624)do call:$ %%a
  4. pause
  5. :$
  6. set/a %1 2>nul&&echo %1B^<2GB||echo %1B^>=2GB
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2