标题: [数值计算] [已解决]批处理比较数值大小出现误判/判断错误/有误是什么问题 [打印本页]
作者: 小智BAT 时间: 2015-4-9 18:02 标题: [已解决]批处理比较数值大小出现误判/判断错误/有误是什么问题
本帖最后由 pcl_test 于 2017-4-10 13:55 编辑
代码如下,请教是什么问题。。
原因已解决。- @echo off & setlocal EnableDelayedExpansion
- cls
- set size=2048
- echo.
- echo.
- echo ╔══════════════════════════════╗
- echo ║ 磁盘分区 磁盘卷标名 剩余空间(MB) ║
- echo ║ _____________________________________________________ ║
- for %%d in (C) do (
- if exist %%d:\nul (
- for /f "tokens=3" %%z in ('dir /-c %%d:\') do set freesize=%%z
- set /a freesize=!freesize:~0,-3!/1049>nul
- set freesize= !freesize!
- set freesize=!freesize:~-9!
- for /f "tokens=3*" %%v in ('vol %%d:') do set volume=%%w
- set volume= !volume!
- set volume=!volume:~-20!
- echo ║ %%d: !volume! !freesize! ║
- )
- )
- echo ╚══════════════════════════════╝
-
- set mb=!freesize:~-9!
- echo %mb% %size%
- if "%mb%" gtr "%size%" (
- echo C盘空间大于2G。5秒后返回等待!
- ping -n 5 127.1 >nul
- goto jiance
- ) else if "%mb%" lss "%size%" (
- echo C盘空间小于2G。5秒后清理!
- ping -n 5 127.1 >nul
- goto ljqingli
- ) else (
- echo C盘空间小于2G。5秒后清理!
- ping -n 5 127.1 >nul
- goto ljqingli
- )
- )
-
- 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比较下- @echo off
- set/a "i=1<<31,j=i-1"
- for %%a in (1 %j% %i:~1% 1125899906842624)do call:$ %%a
- pause
- :$
- set/a %1 2>nul&&echo %1B^<2GB||echo %1B^>=2GB
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |