Skip to main content

How to Get the CPU Core and Thread Count in Batch Script

When analyzing a computer's performance, checking software requirements, or performing a hardware inventory, you often need to know the specifics of its processor. Beyond just the model name, the number of physical cores and the total number of logical processors (threads) are two of the most important metrics. This information is not available in a simple environment variable, but it can be easily retrieved using the built-in WMIC (Windows Management Instrumentation Command-line) utility.

This guide will teach you how to use the WMIC CPU command to query the system for its core and thread counts. You will learn the specific properties to request and the standard scripting pattern to capture these values into variables for use in your diagnostic and reporting scripts.

The Core Command: WMIC CPU GET

The WMIC utility is the standard tool for querying detailed hardware and software information. The CPU alias provides a direct interface to the Win32_Processor WMI class.

Syntax: WMIC CPU GET NumberOfCores, NumberOfLogicalProcessors

  • WMIC: The command-line utility.
  • CPU: The alias for the processor.
  • GET ...: The specific properties we want to retrieve.

Key CPU Properties Explained

This is a critical distinction to understand:

  • NumberOfCores: This is the number of physical cores on the CPU chip. For a quad-core processor, this value will be 4.
  • NumberOfLogicalProcessors: This is the total number of threads that the operating system can see. If the CPU supports hyper-threading (or SMT), this number will typically be double the number of physical cores. For a quad-core CPU with hyper-threading, this value will be 8.

Basic Example: Displaying Core and Thread Counts

You can run this command directly in a command prompt to see the processor details for your current machine.

@ECHO OFF
ECHO --- Querying CPU Core and Thread Counts ---
ECHO.
WMIC CPU GET NumberOfCores, NumberOfLogicalProcessors

The output from WMIC is formatted in columns with a header.

--- Querying CPU Core and Thread Counts ---

NumberOfCores NumberOfLogicalProcessors
4 8

This output is from a quad-core CPU with hyper-threading enabled.

How to Capture the Counts in Variables

To use these numbers in a script (e.g., for an IF comparison), you need to capture them into separate variables. A FOR /F loop is the standard tool for parsing WMIC output.

@ECHO OFF
SET "CoreCount="
SET "ThreadCount="

ECHO --- Capturing CPU Information ---

REM 'skip=1' ignores the header. 'tokens=1,2' grabs the two columns.
FOR /F "skip=1 tokens=1,2" %%A IN (
'WMIC CPU GET NumberOfCores, NumberOfLogicalProcessors'
) DO (
SET "CoreCount=%%A"
SET "ThreadCount=%%B"
GOTO :InfoCaptured
)

:InfoCaptured
IF NOT DEFINED CoreCount (
ECHO [FAILURE] Could not retrieve CPU information.
GOTO :EOF
)

ECHO.
ECHO Physical Cores: %CoreCount%
ECHO Logical Processors (Threads): %ThreadCount%
  • skip=1: Ignores the NumberOfCores NumberOfLogicalProcessors header line.
  • tokens=1,2: Assigns the first column (cores) to %%A and the second column (threads) to %%B.
  • GOTO :InfoCaptured: Exits the loop immediately after capturing the first line of data.

How the WMIC CPU Method Works

The WMIC CPU command queries the Win32_Processor WMI class. This information is read by the operating system's hardware abstraction layer directly from the processor and the system's firmware (BIOS/UEFI) during boot. This makes WMIC an authoritative source for hardware details.

Common Pitfalls and How to Solve Them

Problem: The System Has Multiple Physical CPUs

On a server or high-end workstation with two physical CPU sockets, the WMIC command will return a line of output for each physical CPU.

Example Output on a Dual-CPU Server:

NumberOfCores  NumberOfLogicalProcessors
16 32
16 32

Solution: The simple script provided will only capture the details for the last CPU in the list. For a more advanced script, you would need to process all lines from the WMIC command and add the values together to get the system's total core and thread count.

Problem: Parsing the WMIC Output

The default table format of WMIC can be tricky if not handled correctly, due to extra blank lines and spacing.

Solution: The FOR /F "skip=1" loop combined with an immediate GOTO is the most robust and recommended pattern for capturing this WMIC data. It cleanly isolates the first line of data and ignores the rest of the noise.

Practical Example: A Detailed CPU Report Script

This script gathers all the key CPU information (Model Name, Cores, and Threads) and prints a clean, user-friendly report.

@ECHO OFF
SETLOCAL
ECHO --- Detailed CPU Report for %COMPUTERNAME% ---
ECHO.

REM --- Get CPU Name ---
FOR /F "skip=1 delims=" %%N IN ('WMIC CPU GET Name') DO (
SET "CPUName=%%N" & GOTO :GotName
)
:GotName

REM --- Get Core and Thread Counts ---
FOR /F "skip=1 tokens=1,2" %%A IN ('WMIC CPU GET NumberOfCores, NumberOfLogicalProcessors') DO (
SET "Cores=%%A" & SET "Threads=%%B" & GOTO :GotCounts
)
:GotCounts

ECHO Processor Model: %CPUName%
ECHO Physical Cores: %Cores%
ECHO Logical Processors (Threads): %Threads%

ENDLOCAL

Conclusion

The WMIC CPU command is the standard, built-in, and most reliable method for getting a computer's processor details from a batch script.

Key takeaways:

  • Use WMIC CPU GET NumberOfCores, NumberOfLogicalProcessors to query the core and thread counts.
  • NumberOfCores refers to the physical cores.
  • NumberOfLogicalProcessors refers to the total threads (what the OS uses for scheduling).
  • Use a FOR /F "skip=1 tokens=..." loop with a GOTO to reliably capture the data into variables.
  • This command can be extended to query remote machines (/NODE:"hostname") for powerful network-wide inventory.