在. bat 文件中,如何测试可用的磁盘空间?

・3 分钟阅读

问题:

我有一个. bat 脚本,它开机启动专用备份服务器,使用Robocopy保存生产环境,并在完成时关闭服务器。

它在保存之前进行一些检查,并在出现问题时请求适当的措施,例如当由于断电而未检测到目标JBOD情况时。

还有一个警告,到目前为止我无法处理。

如何在. bat 文件中测试,是否有足够的空间在目标磁盘上接收所有文件? (可以测试固定的磁盘空间大小,定期修改; 目前它接近100 GB。)

有可能如果有的话,我需要研究什么命令?


回答 1:

我建议使用PowerShell脚本。

wmic 以字节为单位返回大小,批处理限制为有符号 32位 整数的数比较,远远低于 100 GB 。 你必须先截断数字。

PowerShell


if ((Get-WMIObject Win32_Logicaldisk -filter"deviceid='C:'").FreeSpace -gt 100GB){


"yes enough free space"


} else {


"not enough free space"


}



我必须批量扩展有关数字比较的上述信息。
如果数字包含在相等长度字符串中,它们可以有效地作为字符串进行比较。
字符串比较按字符进行字符比较,前导空格/零小于 1.

目前最大的硬盘大小是 10TB = 10995116277760个字节取 14个小数位- 以下批量使用 15个位置表示所有数字 。


@Echo off


Rem 543210987654321


Set"Blank="


Set"GB100= 107374182400"


Set"TB_10= 10995116277760"



for/f"tokens=2" %%A in (


 'wmic LogicalDisk Get DeviceID^,FreeSpace ^| find/i"C:"'


) Do Set"FreeSpace=%Blank%%%A"


Set"FreeSpace=%FreeSpace:~-15%"



Echo FreeSpace="%FreeSpace%"


Echo 100 GB="%GB100%"



If"%FreeSpace%" gtr"%GB100%" (


 Echo yes enough free space


) else (


 Echo not enough free space


)



示例输出:


> Check-FreeSpace.cmd


FreeSpace=" 101606346752"


 100 GB=" 107374182400"


not enough free space



> Check-FreeSpace.cmd


FreeSpace=" 1181504520192"


 100 GB=" 107374182400"


yes enough free space




回答 2:

最简单的方法是查看 dir 输出的最后一行


dir/-c/w C: | find"bytes free"



但它不可靠并且还要注意,有时你有很多空闲空间但由于你已达到某些限制,例如最大文件大小或卷目录中的最大文件数因此无法再写入任何文件 。 。

最正确的方法是


wmic LogicalDisk where DeviceID='C:' Get FreeSpace/value




讨论
Tony profile image