2016-09-01 2 views
1

Ich habe einige Batch-Skripts auf diese Weise, einschließlich rund um Stackoverflow gesehen.Holen Sie das Ergebnis eines WMIC-Befehls und speichern Sie es in einer Variablen

Meine Frage ist einfach: Warum funktioniert der MEM-Teil nicht?

@echo OFF 

SET CPU="$CPU" 

echo CPU: %NUMBER_OF_PROCESSORS% 

FOR /F "delims=" %%i IN ('wmic computersystem get TotalPhysicalMemory') DO set MEM=%%i 

echo MEM: %MEM% 
+0

Bitte näher auf die „nicht funktioniert“! Ich glaube, Sie haben das Problem der Unicode-zu-ANSI-Konvertierung der Ausgabe von "wmic" durch "for/F" kennengelernt, die verwaiste Carriage-Return-Zeichen hinterlässt, die die korrekte Textanalyse stören. Werfen Sie einen Blick auf diesen Post für eine Lösung: [Analysieren der Ausgabe von wmic in Shell-Skript] (http://stackoverflow.com/a/19351263). – aschipfl

Antwort

1

Das ist einfach. wmic computersystem get TotalPhysicalMemory Ausgänge drei Textzeilen:

TotalPhysicalMemory 
12867309568 
<blank line> 

So Ihre for-Schleife hat drei Iteration. In der ersten ist MEM auf TotalPhysicalMemory eingestellt, in der zweiten ist es auf 12867309568 eingestellt und schließlich wird es. Ihre Ausgabe ist also leer.

Das ist ziemlich hässlich, aber wird Ihr Problem lösen:

@echo OFF 
setlocal enabledelayedexpansion 
SET CPU="$CPU" 
echo CPU: %NUMBER_OF_PROCESSORS% 
FOR /F "delims= skip=1" %%i IN ('wmic computersystem get TotalPhysicalMemory') DO (
    set MEM=%%i 
    goto STOP 

) 
:STOP 
echo MEM: !MEM! 

skip=1TotalPhysicalMemory ignorieren und goto STOP wird die Schleife nach der ersten Iteration brechen.

+0

Eigentlich wurde der Befehl bearbeitet, um die Frage zu vereinfachen. Die Absicht war: 'wmic computersystem erhalten TotalPhysicalMemory | findstr -v "Total"‘ Und das Ergebnis des Skripts für meine (getestet in 4 Servern): G: \> get_numphycpu.bat CPU: 6 MEM: –

+0

By the way, danke für die Antwort . Es funktionierte, und ich verstand, warum :) –

+0

@DavidLago Sie können auch meine Antwort mit Formatierung der Ausgabe von WMIC mit 'For/Do'-Schleife überprüfen – Hackoo

5

Sie können mit For/Do Schleife wie das mit der Formatierung der Ausgabe von WMIC so etwas zu tun:

@echo off 
Call :GetTotalPhysicalMemory 
echo TotalPhysicalMemory = %MEM% & pause 
exit 
::*********************************************** 
:GetTotalPhysicalMemory 
for /f "tokens=2 delims==" %%a in (' 
    wmic computersystem get TotalPhysicalMemory /value 
') do for /f "delims=" %%b in ("%%a") do (
    Set "MEM=%%b" 
) 
exit /b 
::*********************************************** 
Verwandte Themen