CMD: Befehl als variable Speichern?
Hallo!
Ich bin derzeit dabei, mir mit einem Batch Skript ein paar Vorgänge auf meiner Arbeit zu erleichtern/automatisieren.
Hierfür möchte ich über den Befehl "psexec \[AndererComputername] %processor_architecture%" die Architektur auslesen und in eine Variable speichern, damit eine Software in entsprechend gleicher Architektur installiert werden kann.
Allerdings frage ich mich, wie ich die Ausgabe von diesem Befehl in eine Variable speichern kann? Gibt es da eine einfache lösung für?
4 Antworten
Weiß nicht, wie es in Batch funktioniert (vielleicht genauso) aber in Bash geht das so:
variable = $(befehl)
Ja, scheint für die Batch offenbar doch etwas anders und umständlicher zu sein: https://stackoverflow.com/questions/2323292/assign-output-of-a-program-to-a-variable
Bash ist vergleichbar mit der Powershell aber nicht mit Batch. Da Batch viel zu wenig Funktionen hat.
Hallo,
rennt das Script in einer Domäne?
Um wieviele PC's gehts?
Gruß
Du kannst die Ausgabe eines Befehls entweder mit der Pipe | weiterleiten, mit > und >> (in Dateien) schreiben oder mit for abfangen. Hier nehme ich mal ganz simpel den pause Befehl als Beispiel:
pause | findstr "Sie"
pause > datei.txt
for /F "tokens=*" %%A in ('pause') do echo %%A
Um die Ausgabe des Befehls in eine Variable zu speichern eignen sich nur Methode 2 (mit dem Umweg über eine Datei) oder, was ich empfehlen würde, Methode 3.
Interessant ist aber auch Möglichkeit 1 in Verbindung mit findstr.
Habe mal deinen Code entsprechend angepasst:
:7Zip
cls&echo Auf welchem Rechner soll 7ZIP installiert werden?&echo.
set PC=0
set /p "PC=Rechnername oder IP eingeben: "
:: default: 32-Bit
set "msi=7z1805.msi"
psexec \\%PC% wmic OS get OSArchitecture|findstr "64"&&set "msi=7z1805-x64.msi"
copy "[Servername]\%msi%" "\\%PC%\C$\temp"
wmic /node:%PC% product call install true,"","C:\Temp\%msi%"&&echo.7zip wurde installiert.
echo.&pause
goto Menu
Etwas hilfreiches zu &&, &, || https://www.gutefrage.net/frage/batch-unterschied-zwischen--und-
~Tim
- Bacht ist veraltet bitte verwende PowerShell damit kannst du alles machen wie in einer Batch nur besser (Batch wird eh sterben M$ hat angekündigt die Batch komplett durch die PS zu ersetzen).
- Und da kannst du deine Befehle in eine Variable speichern etc...
Die PS kannst du starten indem du einfach in der Windows suche ise eingibst und dann startest.
Script läuft in einer Domäne
So gesehen um immer nur 1.
Geht darum, dass ich im 1. Level IT-Support sitze und ich diese 0815-Probleme mit weniger Aufwand erledigen möchte um mich nebenbei weiterbilden zu können. Soll also auch nur eine kleine Hilfestellung für mich selbst sein.
Als Beispiel könnte ich die 7ZIP Installation nennen die momentan bei mehreren Rechner benötigt wird, dafür nutze ich bislang folgenden Code:
:7Zip
cls
echo Auf welchem Rechner soll 7ZIP installiert werden?
echo.
set PC=0
set /p PC="Rechnername oder IP eingeben:"
echo.
echo Ist das System 32 oder 64 Bit?
echo.
psexec \\%PC% wmic OS get OSArchitecture
echo.
set sys=0
set /p sys="[32] oder [64]?"
if %sys%==32 copy "[Servername]\7z1805.msi" "\\%PC%\C$\temp"
if %sys%==32 wmic /node:%PC% product call install true,"","C:\Temp\7z1805.msi"
if %sys%==64 copy "[Servername]\7z1805-x64.msi" "\\%PC%\C$\temp"
if %sys%==64 wmic /node:%PC% product call install true,"","C:\Temp\7z1805-x64.msi"
echo.
echo.
echo Wenn "ReturnValue =0" wurde 7Zip installiert.
echo.
pause
goto Menu
Hier bekomme ich halt von dem Befehl die Architektur geliefert, muss diese dann aber selbst nochmal eingeben, diesen Schritt würde ich gerne überspringen, indem ich die Ausgabe von "psexec \\%PC% wmic OS get OSArchitecture" direkt in eine Variable speichere