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

[数值计算] 请教批处理数字分割功能(已解决)

[复制链接]
发表于 2020-11-23 14:26:25 | 显示全部楼层 |阅读模式
本帖最后由 a138534 于 2020-11-23 16:14 编辑

我在编写一个判断磁盘空间的脚本,当取出的值过大时就会判断出错,经过论坛搜索发现bat脚本不支持大于32位的数字,于是改为了将倒数第0位到倒数第9位去除的方法,不过还是有问题:假如磁盘空间是87705575424 取9位的话得出8770 取11位的话才是87
  1. for /f "tokens=2 delims==" %%i in ('wmic logicaldisk where "Caption='D:'" get freespace /value') do set space=%%i
  2. set space=%space:~0,-9%
  3. echo %space%
复制代码
请教高手们如何解决这个问题呢
发表于 2020-11-23 15:31:07 | 显示全部楼层
本帖最后由 flashercs 于 2020-11-23 15:36 编辑

批处理仅支持int32整数,但你可以用字符串来替代数值类型进行比较,uint64最大值才20位整数,你可以设定32位字符串代表整数,远远超过uint64最大值。例子:
  1. @echo off
  2. REM  32位10进制整数
  3. set prefix=00000000000000000000000000000000
  4. for /f "tokens=*" %%i in ('wmic logicaldisk where "Caption='D:'" get freespace /value^|find "="') do set %%i
  5. set freespace=%prefix%%freespace%
  6. set freespace=%freespace:~-32%
  7. echo %freespace%
  8. REM 比较对象64GB
  9. set targetSpace=64000000000
  10. set targetSpace=%prefix%%targetSpace%
  11. set targetSpace=%targetSpace:~-32%
  12. REM 比较大小
  13. if "%freespace%" gtr "%targetSpace%" (
  14.   echo 大于64GB
  15. ) else (
  16.   echo 小于等于64GB
  17. )
  18. pause
  19. exit /b
复制代码
你截取错误原因是这行代码有bug
  1. for /f "tokens=2 delims==" %%i in ('wmic logicaldisk where "Caption='D:'" get freespace /value') do set space=%%i
复制代码
wmic返回的字符串后面有个\r字符,是看不见的,但是它确实在space变量的末尾,所以你用我给你的代码获取就可以正确截取理想长度了
 楼主| 发表于 2020-11-23 16:13:45 | 显示全部楼层
回复 2# flashercs


    太牛了大神
发表于 2020-11-23 18:58:46 | 显示全部楼层
本帖最后由 ivor 于 2020-11-23 19:05 编辑
  1. powershell "'{0:N2}GB' -f ((Get-CimInstance -Query 'select * from win32_logicaldisk where name like ''d:''').FreeSpace/1gb)"
复制代码
  1. powershell "'{0:N2}GB' -f ((Get-WmiObject -Class win32_logicaldisk -Filter 'deviceid like ''d:''').FreeSpace/1gb)"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 06:38 , Processed in 0.018812 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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