Batch Output eines befehls in einer variable speichern?
Hey!
Ich habe folgenden befehl der die regestrierte email eines computers ausliest:
systeminfo | find "Registered Owner"
Und möchte den output davon in einer variable speichern.
Dabei möchte ich "Registered Owner: " entfernen.
Wie kann ich das tun?
Hiermit bekomme ich den Fehler: "| was unexpected at this time."
FOR /F "tokens=*" %%g IN ('systeminfo | find "Registered Owner"') do (SET OUTPUT=%%g)
1 Antwort
arbeitest Du in einer englischsprachigen Windowsversion? (das hat nichts mit mit dem Fehler zu tun, die Frage ist rein informatorisch... da der Output von verschiedenen Sprachversionen auch entsprechende FilterStrings benötigt )
Ich benutze deutsche FilterStrings:
Zur Lösung Deines Problems:FOR /F "tokens=*" %%g IN ('systeminfo ^| find "Registrierter Benutzer"') do (SET OUTPUT=%%g)
Du übergibst ein Kommando als String an einen For/f-Loop. Das Pipe-Symbol | ist ein Steuerzeichen, welches für die Nutzung als gewöhnliches Stringzeichen maskiert werden muss ^| .
zudem wäre es Ratsam den Error-/Verbosestream von systeminfo mit 2>nul zu unterdrücken.
Um nur ein bestimmtes Token aus einer Zeile auszufiltern muss man unter Batch geschickt mit dem Options-Block arbeiten. Deine zu zerlegende Zeile sieht in etwas so aus:
Registrierter Benutzer: Erzesel
- Wir haben 3 Token in unserer Zeile.
- Wir wollen nur das Letzte (egal ob dieses Leerzeichen enthält oder nicht).
- ...also "lügen" wir den Options-Block an, wir wollen das Token 2 und den Rest*.
- Die Token sollen in %%a und den folgenden Parametern übergeben werden.
- Da wir das 2. Token nicht brauchen weisen wir nur den "Rest" (in %%b) unserer Variable zu.
for /f "tokens=2*" %%a in ('systeminfo 2^>nul ^| find /i "Registrierter Benutzer"') do (
set output=%%b
)
echo %output%
... Find /i "Registered Owner" ... Für englischsprachige Systeme.
Ansonsten musst du eben nachschauen wie der Suchbegriff für die betreffende Zeile in der verwendeten Systemsprache aussieht.
Kann doch nicht so schwer sein sich dass zusammenzureimen.😏
Ich habe es gewöhnlich mit Anfängern zu tun, welche sich irgendwelche Codeschnipsel auf englischen Seiten zusammenkopieren und sich dann wundern, das diese dann nicht auf einem deutschen System funktionieren.
Befehl |find /i "Suchbegriff"
...filtert einfach die Zeile(n) aus einem Programmoutput, welche den angegebenen Suchbegriff enthält... ganz trivial.
...und der Options-Block des for/f-Loops definiert, wie dieser die gefundene Zeile zu zerlegen hat.
Ja, danke, das weiß ich schon, aber ich dachte es gibt vieleicht leichteres wie übersetzungen für alle sprachen der welt zu finden.
Vielen dank. Wie ich das allerdings verstanden habe würde das programm nur für Deutsche systeme funktionieren. Doch wie kann ich es abändern, das es für jede Sprache gilt? LG