CMD: Befehl als variable Speichern?

4 Antworten

Weiß nicht, wie es in Batch funktioniert (vielleicht genauso) aber in Bash geht das so:

variable = $(befehl)
Sp4ghett1C0de  07.08.2018, 09:48

Bash ist vergleichbar mit der Powershell aber nicht mit Batch. Da Batch viel zu wenig Funktionen hat.

0

Hallo,

rennt das Script in einer Domäne?

Um wieviele PC's gehts?

Gruß

EGitarre 
Fragesteller
 07.08.2018, 09:03

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

1
timlg07  13.08.2018, 20:59
@EGitarre

für das, dass du im IT-Support arbeitest graust's mir bei den if-Abfragen...

0

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

Woher ich das weiß:Hobby
  1. 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).
  2. 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.

https://docs.microsoft.com/de-de/powershell/scripting/getting-started/getting-started-with-windows-powershell?view=powershell-6

Woher ich das weiß:Berufserfahrung