使用 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"
是一样的。不应该。
答案1
编辑: wmic 命令必须返回多余的空格或换行符,要删除它们,请使用双精度值:
@echo off
for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='Z:'" get Size /format:value`) do for /f "Delims=" %%y in ("%%~x") do set SizeDisk=%%~y
for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='Z:'" get FreeSpace /format:value`) do for /f "Delims=" %%y in ("%%~x") do set FreeS=%%~y
echo Disk Size: "%SizeDisk%" Bytes
echo Free Space "%FreeS%" Bytes
echo.
echo Disk Size: "%SizeDisk:~0,-6%" Mega Bytes
echo Free Space "%FreeS:~0,-6%" Mega Bytes
echo.
pause