Batch Output eines befehls in einer variable speichern?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

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%
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
TimeTravel3 
Fragesteller
 10.11.2022, 13:41

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

0
Erzesel  10.11.2022, 15:03
@TimeTravel3

... 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.

0
TimeTravel3 
Fragesteller
 10.11.2022, 15:58
@Erzesel

Ja, danke, das weiß ich schon, aber ich dachte es gibt vieleicht leichteres wie übersetzungen für alle sprachen der welt zu finden.

1