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

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

[复制链接]
发表于 2015-4-9 18:02:48 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-4-9 18:10:06 | 显示全部楼层
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
 楼主| 发表于 2015-4-9 18:53:31 | 显示全部楼层
回复 2# gawk


    不懂,就是不明白gtr判断怎么错误的。
发表于 2015-4-9 19:07:53 | 显示全部楼层
回复 3# 小智BAT

数字比较,不能加引号,加了引号就变成字符串了,字符串比较不了,所以出错
 楼主| 发表于 2015-4-9 19:17:35 | 显示全部楼层
回复 4# pcl_test


    谢谢,涨姿势了。
发表于 2015-4-9 20:56:58 | 显示全部楼层
回复 3# 小智BAT


举个例子吧,比如BAT能直接处理的最大数字是1亿,但是你想判断是否 gtr 2亿,它是不行滴。
硬盘空间很容易超过几十GB,甚至上TB,这个数字在已经不能直接用 gtr 作比较了。有没有双引号都不行。
发表于 2015-4-9 21:48:03 | 显示全部楼层
回复 6# gawk

LZ的数值是做了处理的,没有超过批处理能处理的范围,所以问题不是这个
发表于 2015-4-9 21:57:10 | 显示全部楼层
回复 7# pcl_test


    嗯,看到了。希望楼主不会遇到TB、PB的吧
发表于 2015-4-11 21:20:16 | 显示全部楼层
回复 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 10:10 , Processed in 0.030925 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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