标题: [数值计算] 请教批处理数字分割功能(已解决) [打印本页]
作者: a138534 时间: 2020-11-23 14:26 标题: 请教批处理数字分割功能(已解决)
本帖最后由 a138534 于 2020-11-23 16:14 编辑
我在编写一个判断磁盘空间的脚本,当取出的值过大时就会判断出错,经过论坛搜索发现bat脚本不支持大于32位的数字,于是改为了将倒数第0位到倒数第9位去除的方法,不过还是有问题:假如磁盘空间是87705575424 取9位的话得出8770 取11位的话才是87- for /f "tokens=2 delims==" %%i in ('wmic logicaldisk where "Caption='D:'" get freespace /value') do set space=%%i
- set space=%space:~0,-9%
- echo %space%
复制代码
请教高手们如何解决这个问题呢
作者: flashercs 时间: 2020-11-23 15:31
本帖最后由 flashercs 于 2020-11-23 15:36 编辑
批处理仅支持int32整数,但你可以用字符串来替代数值类型进行比较,uint64最大值才20位整数,你可以设定32位字符串代表整数,远远超过uint64最大值。例子:- @echo off
- REM 32位10进制整数
- set prefix=00000000000000000000000000000000
- for /f "tokens=*" %%i in ('wmic logicaldisk where "Caption='D:'" get freespace /value^|find "="') do set %%i
- set freespace=%prefix%%freespace%
- set freespace=%freespace:~-32%
- echo %freespace%
- REM 比较对象64GB
- set targetSpace=64000000000
- set targetSpace=%prefix%%targetSpace%
- set targetSpace=%targetSpace:~-32%
- REM 比较大小
- if "%freespace%" gtr "%targetSpace%" (
- echo 大于64GB
- ) else (
- echo 小于等于64GB
- )
- pause
- exit /b
复制代码
你截取错误原因是这行代码有bug- for /f "tokens=2 delims==" %%i in ('wmic logicaldisk where "Caption='D:'" get freespace /value') do set space=%%i
复制代码
wmic返回的字符串后面有个\r字符,是看不见的,但是它确实在space变量的末尾,所以你用我给你的代码获取就可以正确截取理想长度了
作者: a138534 时间: 2020-11-23 16:13
回复 2# flashercs
太牛了大神
作者: ivor 时间: 2020-11-23 18:58
本帖最后由 ivor 于 2020-11-23 19:05 编辑
- powershell "'{0:N2}GB' -f ((Get-CimInstance -Query 'select * from win32_logicaldisk where name like ''d:''').FreeSpace/1gb)"
复制代码
- powershell "'{0:N2}GB' -f ((Get-WmiObject -Class win32_logicaldisk -Filter 'deviceid like ''d:''').FreeSpace/1gb)"
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |