Der wmic
Befehl konvertieren erzeugt eine Unicode-Ausgabe, die for /F
Probleme hat mit, so unerwünschte Artefakte bleiben. In der Tat sind das verwaiste Carriage-Return-Zeichen. Die beste und flexibelste Methode, um dies zu überwinden, besteht darin, eine weitere for /F
-Schleife zu verschachteln, so dass die wmic
-Ausgabe zweimal geparst wird.
Die folgende Befehlszeile direkt in die Konsole eingegeben wird, wird der entsprechende Ausgang auch gezeigt:
U:\>for /F "delims=" %I in ('wmic ComputerSystem GET Model /VALUE') do @for /F "delims=" %L in ("%I") do set "output=%L"
U:\>set "output=Model=HP ProDesk 600 G1 SFF"
U:\>
Um die obige Befehlszeile in einer Batch-Datei zu verwenden, müssen Sie die Prozentzeichen verdoppeln:
:
@echo off
for /F "delims=" %%I in ('wmic ComputerSystem GET Model /VALUE') do (
for /F "delims=" %%L in ("%%I") do set "output=%%L"
)
echo %output%
um den Model=
Präfix aus dem Wert der variablen output
, ändert das Skript dieses abstreifen
Die Doppel-Parsing-Methode wird auf dbenham tatsächlich gutgeschrieben - WMIC and FOR /F : A fix for the trailing <CR> problem seine Antwort auf Why is the FOR /f loop in this batch script evaluating a blank line? und auch seine externen Artikel.
@jeb, hielt ich die fehlenden Laufwerksbuchstaben 'U' in der Ausgabe als Copy-and-Paste-Fehler, dh Warum habe ich sie (hastig) (neu) eingefügt; die wahre Ausgabe auf der Konsole würde normalerweise auch leere Zeilen zwischen jedem benachbarten Echo enthalten; Jedenfalls habe ich das OP gebeten, uns die wahre Ausgabe zu zeigen ... – aschipfl
@aschipfl Ich habe es vor dem Editieren getestet, da ich auch zuerst dachte, dass er einfach das 'U:>' verpasst habe, aber ich habe mich geirrt – jeb
Ah, ja , @jeb, es scheint, dass jede Zeile mit einem Carriage-Return und einem Leerzeichen beendet wird ... – aschipfl