CCCPaste

GetWMICInfo.BAT

@REM - GetWMICInfo.BAT (26 Jun 2024 // 30 Jun 2024 / 26 Jun 2024): Obtain and Format WMIC Info
@ECHO OFF

 ::: This script will obtain some WMIC info, and format the storage sizes
 ::: to KB, MB, GB or TB as preferred. For convenience, two subroutines are
 ::: provided.  One of the subroutines uses all native code, and the other 
 ::: relies on a 3rd party utility: CCALC.EXE 
 ::: (https://www.majorgeeks.com/files/details/brainwave_ccalc.html)
 ::: 
 ::: I was going to provide only the native option, but file sizes are 
 ::: regularly large enough to generate errors, so I provided both routines.
 ::: 
 ::: If you want the debug code to run, run the batch file with any parameter.
 :::   i.e. GetWMICInfo.BAT #
 ::: 
 ::: The full script can be found here ..... https://pastebin.com/L0PjaNK4
 ::: 


:Variables
 SETLOCAL ENABLEDELAYEDEXPANSION
 SET #DEBUG=%~1
 SET #ITERATIONS=19
 
 
 rem -- Parse WMIC and format returned drive info
:ParseWMIC
 FOR /F "SKIP=2 TOKENS=1-7 DELIMS=," %%a IN ('WMIC PARTITION GET Diskindex^,Name^,Index^,Description^,Size /FORMAT:CSV') DO (
	CALL :ConvertNumber_Old "%%~g" MB #SIZE_OLD
	CALL :ConvertNumber     "%%~g" MB #SIZE_MB
	CALL :ConvertNumber     "%%~g" GB #SIZE_GB
	ECHO DiskIndex      : %%c
	ECHO PartitionIndex : %%d
	ECHO Partition Info : %%e,%%f
	ECHO Partition Type : %%b
	ECHO Raw Size       : %%g
	ECHO Size           : !#SIZE_OLD!
	ECHO Size           : !#SIZE_MB!
	ECHO Size           : !#SIZE_GB!
	ECHO:
 )


 rem -- Test My Calculation Routines (set #DEBUG=TRUE if you want this to run)
:RANDOM_MATH_TEST
 IF DEFINED #DEBUG (
	 ECHO:
	 ECHO *** RANDOM NUMBER TESTING ***
	 ECHO:
	 FOR /L %%z IN (1,1,%#ITERATIONS%) DO (
		 SET /A #VAL=!RANDOM! * !RANDOM! * 5
		 CALL :ConvertNumber_Old "!#VAL!" MB #SIZE_OLD
		 CALL :ConvertNumber     "!#VAL!" MB #SIZE_MB
		 CALL :ConvertNumber     "!#VAL!" GB #SIZE_GB
		 ECHO Displaying !#VAL! in MB ^& GB
		 ECHO  - Using Native Calculation .... !#SIZE_OLD!
		 ECHO  - Using CCALC [MB] ............ !#SIZE_MB!
		 ECHO  - Using CCALC [GB] ............ !#SIZE_GB!
		 ECHO:
	 )
 )


:ExitBatch
 TIMEOUT 60
 ENDLOCAL 
 GOTO :EOF
 

 rem -- SUBROUTINE: Convert Large Number to KB, MB, GB, TB or PB (using CCALC.EXE)
:ConvertNumber
 rem %1 = Current Number to be Converted/Formatted
 rem %2 = Unit of Measurement to be Used
 rem %3 = New Variable To Store Converted/Formatted Number

 IF "%~3"=="" GOTO :EOF
                   SET #OPERAND=+ 0
 IF /I "%~2"=="KB" SET #OPERAND=/ 1024
 IF /I "%~2"=="MB" SET #OPERAND=/ 1024 / 1024
 IF /I "%~2"=="GB" SET #OPERAND=/ 1024 / 1024 / 1024
 IF /I "%~2"=="TB" SET #OPERAND=/ 1024 / 1024 / 1024 / 1024

 SET #NUM=%~1
 SET #NUM=!#NUM:-=!
 FOR /F %%N IN ('CCALC !#NUM! %#OPERAND% -f "#,##0.000" 2^>NUL') DO SET %~3=%%~N %~2
 GOTO :EOF


 rem -- SUBROUTINE: Convert Large Number to KB, MB, GB, TB or PB
:ConvertNumber_Old
 rem %1 = Current Number to be Converted
 rem %2 = Unit of Measurement to be Used
 rem %3 = New Variable To Store Converted Number

 IF "%~3"=="" GOTO :EOF
                   SET #OPERAND=+ 0
 IF /I "%~2"=="KB" SET #OPERAND=/ 1024
 IF /I "%~2"=="MB" SET #OPERAND=/ 1024 / 1024
 IF /I "%~2"=="GB" SET #OPERAND=/ 1024 / 1024 / 1024
 IF /I "%~2"=="TB" SET #OPERAND=/ 1024 / 1024 / 1024 / 1024

 SET #NUM=%~1
 SET #NUM=!#NUM:-=!
 SET %~3=Could Not Calculate
 SET /A %~3=!#NUM! %#OPERAND% 2>NUL
 SET %~3=!%~3! %~2
 GOTO :EOF