带有 WMIC 输出的 Windows 命令行批处理变量子字符串未正确截断

带有 WMIC 输出的 Windows 命令行批处理变量子字符串未正确截断

使用 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

相关内容