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

[数值计算] 看起来正常计算的两个数,批处理结果怎么变成了负数?

[复制链接]
发表于 2018-11-1 10:06:23 | 显示全部楼层
http://bcn.bathome.net/s/tool/index.html?key=计算
这里有好几个命令行工具,可以试试。
 楼主| 发表于 2018-11-1 13:25:17 | 显示全部楼层
回复 16# Batcher


    是的,我也在里面找了几个,其中一个expr.exe可以实现需求
  1. D:\bat_test>expr.exe 50 / 25
  2. 2
复制代码
但是我不会如何将计算结果赋值给变量,能否指导一下?谢谢!
发表于 2018-11-1 14:04:10 | 显示全部楼层
回复 17# zds612


    放在 for /f 命令里面就行了,类似顶楼代码第15行。
发表于 2018-11-1 21:30:55 | 显示全部楼层
本帖最后由 WHY 于 2018-11-3 16:02 编辑

个人认为,楼主无非是想判断磁盘剩余空间是否超过警戒值,没有必要转换成MB,补零就行了。
假设警戒值为 1GB
  1. @echo off
  2. set "alarmValue=1073741824"
  3. for /f "tokens=3" %%i in ('dir /a /-c C:') do set "freeSpace=%%i"
  4. set "s1=00000000000000000000%freeSpace%"
  5. set "s2=00000000000000000000%alarmValue%"
  6. if "%s1:~-20%" LSS "%s2:~-20%" (
  7.     echo;低于警戒值,发邮件
  8. ) else (
  9.     echo;空间充足,剩余%freeSpace%字节,警戒值%alarmValue%字节
  10. )
  11. pause
复制代码
发表于 2018-11-1 21:34:22 | 显示全部楼层
本帖最后由 WHY 于 2018-11-3 16:03 编辑

一定要转换为MB,这样应该可以:
  1. @echo off & setlocal enabledelayedexpansion
  2. set "alarmValue=1024"
  3. for /f "tokens=3" %%i in ('dir /a /-c C:') do set "freeSpace=%%i"
  4. call :GetMB
  5. if !rt! LSS !alarmValue! (
  6.     echo;低于警戒值,发邮件
  7. ) else (
  8.     echo;空间充足,剩余!rt!MB,警戒值!alarmValue!MB
  9. )
  10. pause & exit /b

  11. :GetMB
  12. set "str=!freeSpace!FEDCBA9876543210" & set /a Len=0x!str:~16,1!
  13. for /L %%i in (0 1 !Len!) do (
  14.         set "sang=!yu!!freeSpace:~%%i,1!"
  15.         set /a yu=sang%%1048576,sang/=1048576
  16.         if "!yu!" == "0" set "yu="
  17.         set "rt=!rt!!sang!"
  18. )
  19. for /f "tokens=* delims=0" %%i in ("!rt!") do set /a rt=%%i+0
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 03:34 , Processed in 0.013348 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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