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

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

本帖最后由 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
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

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
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

回复 2# gawk


    不懂,就是不明白gtr判断怎么错误的。

TOP

回复 3# 小智BAT

数字比较,不能加引号,加了引号就变成字符串了,字符串比较不了,所以出错

TOP

回复 4# pcl_test


    谢谢,涨姿势了。

TOP

回复 3# 小智BAT


举个例子吧,比如BAT能直接处理的最大数字是1亿,但是你想判断是否 gtr 2亿,它是不行滴。
硬盘空间很容易超过几十GB,甚至上TB,这个数字在已经不能直接用 gtr 作比较了。有没有双引号都不行。
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

回复 6# gawk

LZ的数值是做了处理的,没有超过批处理能处理的范围,所以问题不是这个

TOP

回复 7# pcl_test


    嗯,看到了。希望楼主不会遇到TB、PB的吧
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

回复 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
复制代码

TOP

返回列表