Her*_*erb 7 windows disk-space batch-file
我有一个 .bat 脚本,它从启动专用备份服务器开始,使用 Robocopy 保存生产环境,并在完成后关闭服务器。
它会在保存之前进行一些检查,并在出现问题时请求采取适当的措施,例如,由于断电而未检测到目标 JBOD 案例时。
但是,还有一个警告,到目前为止我无法处理。
如何在 .bat 文件中测试目标磁盘上是否有足够的空间来接收所有文件?(可以测试固定的空间大小,定期修改;目前接近 100 GB。)
甚至有可能吗?如果是这样,我需要研究什么命令?
Lot*_*ngs 12
我建议为此使用 PowerShell 脚本。
wmic
返回以字节为单位的大小,批处理仅限于有符号 32 位整数的数字比较,远低于 100GB。您必须先截断数字。
电源外壳
if ((Get-WMIObject Win32_Logicaldisk -filter "deviceid='C:'").FreeSpace -gt 100GB){
"yes enough free space"
} else {
"not enough free space"
}
Run Code Online (Sandbox Code Playgroud)
我必须批量扩展有关数字比较的上述信息。
如果数字包含在等长字符串中,则它们可以作为字符串进行有效比较。
字符串比较逐个字符进行,前导空格/零小于 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
)
Run Code Online (Sandbox Code Playgroud)
示例输出:
> Check-FreeSpace.cmd
FreeSpace=" 101606346752"
100 GB=" 107374182400"
not enough free space
> Check-FreeSpace.cmd
FreeSpace=" 1181504520192"
100 GB=" 107374182400"
yes enough free space
Run Code Online (Sandbox Code Playgroud)
最简单的方法是查看dir
输出中的最后一行
dir /-c /w C: | find "bytes free"
Run Code Online (Sandbox Code Playgroud)
您也可以直接通过获取3获得大小值RD令牌输出
FOR /F "tokens=3 USEBACKQ" %%F IN (`dir /-c /w C:`) DO set "size=%%F"
echo %size%
Run Code Online (Sandbox Code Playgroud)
但是它不可靠,因为字符串在另一种语言中可能不同。还要注意,有时您有很多可用空间但无法写入更多文件,因为您已达到某些限制,例如最大文件大小或卷/目录中的最大文件数...
最正确的方法是
wmic LogicalDisk where DeviceID='C:' Get FreeSpace /value
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15324 次 |
最近记录: |