Programmabfolge installieren mit einer Batch
Hallo alle zusammen,
ich habe ein großes Problem, mein Chef möchte gerne das ich eine Batch schreibe, wo ich keine Ahnung von habe,die folgendes können muss.
Es soll 3 Programme installieren, aber nur wenn Sie auf dem Rechner nicht vorhanden sind. Und diese sollen eine bestimmte Reihenfolge einhalten.
Leider kann ich euch kein Script hier liefern, weil ich noch nicht mal einen Ansatz habe.
Ich hoffe es kann mir jemand bei meinem Problem helfen.
Vielen Dank
Eure Jasmina
ich habe ein großes Problem, mein Chef möchte gerne das ich eine Batch schreibe, wo ich keine Ahnung von habe,die folgendes können muss.
Es soll 3 Programme installieren, aber nur wenn Sie auf dem Rechner nicht vorhanden sind. Und diese sollen eine bestimmte Reihenfolge einhalten.
Leider kann ich euch kein Script hier liefern, weil ich noch nicht mal einen Ansatz habe.
Ich hoffe es kann mir jemand bei meinem Problem helfen.
Vielen Dank
Eure Jasmina
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 204813
Url: https://administrator.de/forum/programmabfolge-installieren-mit-einer-batch-204813.html
Ausgedruckt am: 21.04.2025 um 19:04 Uhr
30 Kommentare
Neuester Kommentar

Hi,
guck dir mal die Fragen von @Noobstar0815 an, der macht ungefähr das selbe, oder schreib ihm eine PN
Grüße
Exze
guck dir mal die Fragen von @Noobstar0815 an, der macht ungefähr das selbe, oder schreib ihm eine PN
Grüße
Exze
Hehe, so gut war meins jetzt auch nicht... Ich habe eine Anleitung geschrieben, die mehrere Programme installiert, allerdings wird dort nicht geprüft, ob es bereits installiert ist. War für meine Zwecke (Updates) auch nicht nötig, da es nach knapp einer Sekunde übersprungen wurde, da automatisch festgestellt wurde, dass die aktuelle Version vorhanden ist. Ich denke das würde so auch mit den Programme passieren. Wenn das Programm installiert ist, kann es ja nicht noch mal installiert werden, der Installationsvorgang wird abgebrochen, und der nächste wird gestartet. Ich schau mal ob ich da nicht noch etwas finde zur Erkennung ob das Programm installiert wurde =)
mfg Noobstar0815
mfg Noobstar0815
Ok, also, um welche Programme handelt es sich denn?
Installiere diese und schau in die Registry (Ausführen -> Regedit) und suche dort den Registryeintrag des Programmes. Bei Java ist es zum Beispiel der Ordner HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_17 , bzw dies ist der Eintrag mit der installierten Versionsnummer.
Meiner Meinung nach müsste dies einfach per if-Befehl funktionieren, in etwas
oder übersehe ich da einen Fehler?
Installiere diese und schau in die Registry (Ausführen -> Regedit) und suche dort den Registryeintrag des Programmes. Bei Java ist es zum Beispiel der Ordner HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_17 , bzw dies ist der Eintrag mit der installierten Versionsnummer.
Meiner Meinung nach müsste dies einfach per if-Befehl funktionieren, in etwas
if HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_17 (
goto Nächste Programm
) else (
installiere das Programm
)

@Noobstar0815,
müsste if exist heißen oder so ähnlich
denke ich zumindest ich hab bisher nicht mit der Registry gearbeitet (per Batch)
Grüße
Exze
müsste if exist heißen oder so ähnlich
denke ich zumindest ich hab bisher nicht mit der Registry gearbeitet (per Batch)
Grüße
Exze
Nee, das Problem ist, Regedit ist ein eigenes Programm. Deswegen heißt es zum Beispiel um den Javaschlüssel abzufragen
Und jetzt häng ich daran, es noch in eine If-Else-Abfrage zu packen, gibt jedes mal die Fehlermeldung das "QUERY" syntaktisch nicht verarbeitbar ist. Meine Eingabe
Hatte den REG QUERY... auch schon in () , hat aber auch nicht geholfen :D Ich weiß ich noch nicht auf was ich es überhaupt abfragen muss ... Also auf REG QUERY=1(true/ja/yes/enable...) :D
REG QUERY "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_17"
if REG QUERY "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_17" (
echo Vorhanden
) else (
echo nicht vorhanden
)
pause

Wie gesagt, in der Registry hab ích mit der Batch noch nie gearbeitet 
Viel Glück euch beiden noch
Grüße
Exze
Viel Glück euch beiden noch
Grüße
Exze
Jasmina, es würde eigentlich auch gehen, wenn du per (ich denke es heißt wirklich) if exist die Dateien abfragst, das Problem ist nur, dass die Programme von Rechner zu Rechner an unterschiedlichen Stellen gespeichert werden können. Bei der Registry ist es eindeutig und überall gleich meines Wissen nach.
Also
das läuft folgendermaßen :D
set reg1=1 setzt mir die Varibale reg1 mit dem Wert 1, man kann für beides andere Werte nehmen :D
Jetzt etwas komplizierter
Es setzt die Variable reg1 mit dem Wert der letzten Zeile der Ausgabe von REG QUERY bis zum ersten Leerzeichen. Bzw er setzt reg1 generell für den Wert der Zeilen bis zum ersten Leerzeichen, dadurch wird reg1 mehrfach überschrieben und der letzte Wert ist der Anfang der letzten Zeile =)
Die If-Else-Abfrage prüft nun, ob reg1=1 den Wert hat, den ich der Variable am Anfang zuwies. Sollte dies der Fall sein, wird das Programm installiert, da der registryschlüssel nicht vergeben ist. Sollte aber reg1=1 sein, heißt dies, dass der Reg-Eintrag vorhanden ist und das Programm installiert wurde.
Man ist das kompliziert zu erklären :D
Was hast du nun noch damit zu tun:
Ganz einfach: Es mehrfach in deine Batch-Datei einfügen, je nachdem wie viele Programme du installieren willst. Ein paar Sprungmarken setzen damit du das "vorhanden" durch ein goto ... ersetzen kannst. Die Registryeinträge an die Programme anpassen, es ist völlig egal welchen Reg-Eintrag du von den Programmen nimmst, ist einer vorhanden ist das Programm bereits installiert. Achso und die echo's können entfernt werden. Dort wo jetzt "nicht vorhanden" steht muss der Befehl zum installieren des Programmes eingefügt werden, den kannst du aber bestimmt selbst schreiben, ansonsten sag mir ob es eine .msi oder .exe Datei ist, dann geb ich dir den Code für eine stille Installation.
Und da ich mir jetzt so viel Mühe für die Erklärung gegeben hab möchte ich zumindest eine Danke hören :P
set reg1=1
for /f %%i in ('REG QUERY "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_17"') do Set reg1=%%i
echo %reg1%
if %reg1%==1 (
echo nicht Vorhanden
) else (
echo Vorhanden
)
pause
set reg1=1 setzt mir die Varibale reg1 mit dem Wert 1, man kann für beides andere Werte nehmen :D
Jetzt etwas komplizierter
for /f %%i in ('REG QUERY "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_17"') do Set reg1=%%i
Die If-Else-Abfrage prüft nun, ob reg1=1 den Wert hat, den ich der Variable am Anfang zuwies. Sollte dies der Fall sein, wird das Programm installiert, da der registryschlüssel nicht vergeben ist. Sollte aber reg1=1 sein, heißt dies, dass der Reg-Eintrag vorhanden ist und das Programm installiert wurde.
Man ist das kompliziert zu erklären :D
Was hast du nun noch damit zu tun:
Ganz einfach: Es mehrfach in deine Batch-Datei einfügen, je nachdem wie viele Programme du installieren willst. Ein paar Sprungmarken setzen damit du das "vorhanden" durch ein goto ... ersetzen kannst. Die Registryeinträge an die Programme anpassen, es ist völlig egal welchen Reg-Eintrag du von den Programmen nimmst, ist einer vorhanden ist das Programm bereits installiert. Achso und die echo's können entfernt werden. Dort wo jetzt "nicht vorhanden" steht muss der Befehl zum installieren des Programmes eingefügt werden, den kannst du aber bestimmt selbst schreiben, ansonsten sag mir ob es eine .msi oder .exe Datei ist, dann geb ich dir den Code für eine stille Installation.
Und da ich mir jetzt so viel Mühe für die Erklärung gegeben hab möchte ich zumindest eine Danke hören :P

Hi @Endoro
vielleicht solltest du
durch einen richtigen Registry-Schlüssel ersetzen ? 
Grüße
Exze
vielleicht solltest du
bla bla
Grüße
Exze

Hi Endoro,
ah jetzt fällt´s mir auch auf
bitte entschuldige
der Fehler sollte behoben sein, wenn man eine zweite if-Abfrage einbaut oder ?
Grüße
Exze
ah jetzt fällt´s mir auch auf
der Fehler sollte behoben sein, wenn man eine zweite if-Abfrage einbaut oder ?
Grüße
Exze
Bei mir läuft es, hier mal die Ausgabe mit echo on
Ich wüsste jetzt spontan auch nicht wo der Fehler sein soll :/
C:\Dokumente und Einstellungen\Software-admin\Desktop\Batch-Dateien>set reg1=1
C:\Dokumente und Einstellungen\Software-admin\Desktop\Batch-Dateien>for /F %i in
('reg QUERY "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_17"') do Set
reg1=%i
C:\Dokumente und Einstellungen\Software-admin\Desktop\Batch-Dateien>Set reg1=!
C:\Dokumente und Einstellungen\Software-admin\Desktop\Batch-Dateien>Set reg1=HKE
Y_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java
C:\Dokumente und Einstellungen\Software-admin\Desktop\Batch-Dateien>Set reg1=Jav
aHome
C:\Dokumente und Einstellungen\Software-admin\Desktop\Batch-Dateien>Set reg1=Mic
roVersion
C:\Dokumente und Einstellungen\Software-admin\Desktop\Batch-Dateien>Set reg1=Run
timeLib
C:\Dokumente und Einstellungen\Software-admin\Desktop\Batch-Dateien>Set reg1=HKE
Y_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java
C:\Dokumente und Einstellungen\Software-admin\Desktop\Batch-Dateien>echo HKEY_LO
CAL_MACHINE\SOFTWARE\JavaSoft\Java
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java
C:\Dokumente und Einstellungen\Software-admin\Desktop\Batch-Dateien>if reg1 == 1
(echo nicht Vorhanden ) else (echo Vorhanden )
Vorhanden
C:\Dokumente und Einstellungen\Software-admin\Desktop\Batch-Dateien>pause
Drücken Sie eine beliebige Taste . . .
Ok ich weis, es ist nicht mein Thread hier, allerdings habe ich eine Frage noch hier zu, ist wahrscheinlich wieder so ein dämlicher Fehler ...
Ich wollte schon mal einen Schritt weiter gehen und ein Programm installieren lassen. Da ich früher schon eine Batch-Datei zum updaten geschrieben hatte, habe ich noch die Installationsanweisung für Java in einer eigenen Datei (Die Batch-Datei hatte andere Batch-Dateien mit dem Code zum installieren gestartet).
Diese Datei lasse ich mir nun aufrufen, allerdings wird es diesmal nicht installiert, woran liegt das?
Hier mal die Codes und die Ausgabe (könnte etwas länger sein):
net use habe ich rausgelassen, da die Pfade unintressant sind, die Datei wird ja gefunden und ausgeführt.
Die Datei java.bat sieht so aus:
Die Ausgabe von cmd gibt folgendes aus:
Dort wird die Zeile
komplett weggelassen, es öffnet sich auch kein neuer Prozess wie sonst.
Ich wollte schon mal einen Schritt weiter gehen und ein Programm installieren lassen. Da ich früher schon eine Batch-Datei zum updaten geschrieben hatte, habe ich noch die Installationsanweisung für Java in einer eigenen Datei (Die Batch-Datei hatte andere Batch-Dateien mit dem Code zum installieren gestartet).
Diese Datei lasse ich mir nun aufrufen, allerdings wird es diesmal nicht installiert, woran liegt das?
Hier mal die Codes und die Ausgabe (könnte etwas länger sein):
set reg1=1
for /f %%i in ('reg QUERY "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_19"') do Set reg1=%%i
echo %reg1%
if %reg1%==1 (
call O:\Update-Skripte\Java.bat
) else (
goto next1
)
:next1
set reg1=1
for /f %%i in ('reg QUERY "Key vom nächsten Programm"') do Set reg1=%%i
echo %reg1%
Startbefehl für nächste Programm
if %reg1%==1 (
echo nicht Vorhanden
) else (
goto next2
)
REM :next2
rem usw usw usw...
Die Datei java.bat sieht so aus:
echo Java
@for %%f in ("%lw%\Java\*.*") do start /wait "" "%%f" /s
echo Java Fertig
suchtest.bat
net use O:
Systemfehler 85 aufgetreten.
Der lokale Gerätename wird bereits verwendet.
set reg1=1
for /F %i in ('reg QUERY "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_19"') do Set reg1=%i
Fehler: Der angegebene Registrierungsschlüssel oder Wert konnte nicht gefunden werden.
echo 1
1
if 1 == 1 (call O:\Update-Skripte\Java.bat ) else (goto next1 )
echo Java
Java
echo Java Fertig
Java Fertig
set reg1=1
for /F %i in ('reg QUERY "Key vom nõchsten Programm"') do Set reg1=%i
Fehler: UngüItiger Schlüsselname
echo 1
1
Startbefehl
f³r nõchste Programm
Der Befehl "Startbefehl" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
if 1 == 1 (e
cho nicht Vorhanden ) else (goto next2 )
nicht Vorhanden
REM :next2
rem usw usw
usw...
@for %%f in ("%lw%\Java\*.*") do start /wait "" "%%f" /s

Hi,
ersetz mal den call-Befehl zum Aufrufen des Scripts mit nem start-Befehl
Grüße
Exze
ersetz mal den call-Befehl zum Aufrufen des Scripts mit nem start-Befehl
Grüße
Exze

Hi du,
wo befüllst du die Variable %lw% ? :D wenn du kein Verzeichnis hast kann auch eine Foreach nichts tun
Grüße
Exze
wo befüllst du die Variable %lw% ? :D wenn du kein Verzeichnis hast kann auch eine Foreach nichts tun
Grüße
Exze
Jasmina, ich wollte mal kurz fragen ob alles funktioniert?
Du möchtest ja, dass mehrere Programme nacheinander installiert werden, dazu musst du diesen Code einfach mehrfach untereinander schreiben. Alternativ könnte man es auch noch mit einer Auswahl versehen, damit du entscheiden kannst, welches Programm installiert werden soll und welches nicht.
Du möchtest ja, dass mehrere Programme nacheinander installiert werden, dazu musst du diesen Code einfach mehrfach untereinander schreiben. Alternativ könnte man es auch noch mit einer Auswahl versehen, damit du entscheiden kannst, welches Programm installiert werden soll und welches nicht.
Naja, für Updates war dies auch nicht gedacht hehe :D
Weil bei Programmen reicht es, wenn du einen belieben Reg-Schlüssel nimmst, bei Updates braucht man halt einen mit aktueller Versionsnummer. Da mir dies allerdings zu Wartungsintensiv ist, lasse ich einfach generell immer alle Updates durchlaufen, da dies nur etwas länger dauert, da die Updates ja abgebrochen werden weil schon vorhanden. Wenn ich das bei den Updates mit den Reg-Schlüsseln machen würde, müsste ich nach jedem Update meine Datei ändern, um den neuen Reg-Schlüssel mit neuer Datei zu überprüfen ^^
Weil bei Programmen reicht es, wenn du einen belieben Reg-Schlüssel nimmst, bei Updates braucht man halt einen mit aktueller Versionsnummer. Da mir dies allerdings zu Wartungsintensiv ist, lasse ich einfach generell immer alle Updates durchlaufen, da dies nur etwas länger dauert, da die Updates ja abgebrochen werden weil schon vorhanden. Wenn ich das bei den Updates mit den Reg-Schlüsseln machen würde, müsste ich nach jedem Update meine Datei ändern, um den neuen Reg-Schlüssel mit neuer Datei zu überprüfen ^^