加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

windows – 确定C驱动器是否有2 GB的可用磁盘空间

发布时间:2020-12-24 18:25:11 所属栏目:Windows 来源:网络整理
导读:我试图确定目标PC是否具有至少2 GB的可用空间.这是我到目前为止: @echo offfor /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set "FreeSpace=%%x"IF /i %FreeSpace% GTR "2147483

我试图确定目标PC是否具有至少2 GB的可用空间.这是我到目前为止:

@echo off
for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set "FreeSpace=%%x"
IF /i %FreeSpace% GTR "2147483648" (ECHO C Drive Has Enough Available Disk For Install %FreeSpace%) else (ECHO C Drive Is FULL %FreeSpace%)

如果我设置2 GB或将其更改为200 GB并不重要,它总是说我有足够的空间,即使这个驱动器只有90 GB ……请尽可能帮助.

这个问题是我基于上面的代码:
Check free disk space using Batch commands

似乎它应该工作,但事实并非如此.

您的代码有2个问题:

1)如果双方的字符串评估为数字,则仅进行数字比较.您的左侧是数字,但您的右侧有引号,这会强制使用字符串语义完成整个比较.数字总是排序高于引号字符,因此它始终报告为TRUE.

正如奥斯蒂尼安在他的回答中所建议的那样,在您的案例中,删除引号会给出正确的答案.但这不是整个故事!实际上,它正在检查可用空间是否大于或等于2147483647.

2)Windows批处理(cmd.exe)编号限制为有符号32位精度,相当于最大值2 GB -1字节(2147483647). IF语句有一个奇怪的(可能是不幸的)行为,任何大于2147483647的数字都被视为等于2147483647.因此,您无法使用您的技术测试大于2147483647的值的可用空间.

有关更多信息,请参见https://stackoverflow.com/q/9116365/1012053.

链接的答案中描述的是一个可以用来测试大数字的技术.您必须将条件的两侧保持相同的宽度,并强制进行字符串比较.

例如,以下将测试可用空间是否为> = 4294967296(4 GB)

@echo off
setlocal
set "pad=000000000000000"
set "NeededSpace=%pad%4294967296"
for /f "delims== tokens=2" %%x in (
  'wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value'
) do for %%y in (%%x) do set "FreeSpace=%pad%%%y"
if "%FreeSpace:~-15%" geq "%NeededSpace:~-15%" echo Drive has at least 4 GB free space.

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读