使用 Windows Batch,我要做的就是获取以 MB 为单位的指定驱动器大小(按驱动器号)以及该驱动器可用的相应可用空间,该驱动器以整数形式存储在变量中,以进行一些基本的数学运算。
我使用这个脚本:
for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='Z:'" get Size /format:value`) do
set SizeDisk=%%x
for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='Z:'" get FreeSpace /format:value`) do
set FreeS=%%x
这给了我想要的值。但是,当我截断最后六位数字给我 MB 时(它足够接近我的需要):
SET /A SizeDiskMB=%SizeDisk:~0,-6%
SET /A FreeSMB=%FreeS:~0,-6%
它只截断最后五位而不是六位。如果我使用~0,-7
,那么它会给我正确的值,但我想了解它为什么这样做。我还需要这些作为整数值,所以我可以做一些基本的数学运算,这就是/A
.
感谢您的任何帮助。
编辑:
好的,我意识到在我真正做数学之前我不需要 /A 。我以为它会将变量设置为整数,但似乎并非如此。所以暂时忽略它。
我运行了以下代码:
@ECHO OFF
cls
for /f "usebackq tokens=2 delims==" %%x in (`wmic logicaldisk where "DeviceID='Z:'" get Size /format:value`) do set SizeDisk=%%x
Echo Size Disk: %SizeDisk% bytes
Echo Size Disk 0,-1: %SizeDisk:~0,-1%
Echo Size Disk 0,-2: %SizeDisk:~0,-2%
Echo Size Disk 0,-3: %SizeDisk:~0,-3% KB
Echo Size Disk 0,-4: %SizeDisk:~0,-4%
Echo Size Disk 0,-5: %SizeDisk:~0,-5%
Echo Size Disk 0,-6: %SizeDisk:~0,-6% MB
Echo Size Disk 0,-7: %SizeDisk:~0,-7%
Pause
并收到以下结果:
Size Disk: 1887436795904 bytes <-- Same
Size Disk 0,-1: 1887436795904 <-- Same
Size Disk 0,-2: 188743679590
Size Disk 0,-3: 18874367959 KB
Size Disk 0,-4: 1887436795
Size Disk 0,-5: 188743679
Size Disk 0,-6: 18874367 MB
Size Disk 0,-7: 1887436
Press any key to continue . . .
"Size Disk"
并且"Size Disk 0,-1"
是相同的。不应该。
编辑: wmic 命令必须返回额外的空格或换行符,要删除它们,请使用双精度: