jasmina
Goto Top

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

Content-Key: 204813

Url: https://administrator.de/contentid/204813

Printed on: April 19, 2024 at 21:04 o'clock

Mitglied: 106543
106543 Apr 11, 2013 at 08:55:23 (UTC)
Goto Top
Hi,

guck dir mal die Fragen von @Noobstar0815 an, der macht ungefähr das selbe, oder schreib ihm eine PN face-smile

Grüße
Exze
Member: Noobstar0815
Noobstar0815 Apr 11, 2013 at 10:38:49 (UTC)
Goto Top
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
Member: Noobstar0815
Noobstar0815 Apr 11, 2013 at 10:51:28 (UTC)
Goto Top
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
if HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_17 (
goto Nächste Programm 
) else (
installiere das Programm
)
oder übersehe ich da einen Fehler?
Member: Jasmina
Jasmina Apr 11, 2013 at 11:10:44 (UTC)
Goto Top
Und das muss für jedes Programm dann schreiben, sehe ich dass so richtig?
Member: Noobstar0815
Noobstar0815 Apr 11, 2013 at 11:19:30 (UTC)
Goto Top
Ja, kannst du mit copy-paste machen, musst dir halt nur irgendeinen Registryeintrag des Programmes suchen den du abfragen kannst. Der code den ich gepostet habe ist fehlerhaft, ich suche aktuell den Fehler hehe
Mitglied: 106543
106543 Apr 11, 2013 at 11:23:25 (UTC)
Goto Top
@Noobstar0815,

müsste if exist heißen oder so ähnlich face-smile
denke ich zumindest ich hab bisher nicht mit der Registry gearbeitet (per Batch)

Grüße
Exze
Member: Noobstar0815
Noobstar0815 Apr 11, 2013 at 11:32:41 (UTC)
Goto Top
Nee, das Problem ist, Regedit ist ein eigenes Programm. Deswegen heißt es zum Beispiel um den Javaschlüssel abzufragen
REG QUERY "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_17"  
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
if REG QUERY "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_17" (  
echo Vorhanden
) else (
echo nicht vorhanden
)
pause
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
Mitglied: 106543
106543 Apr 11, 2013 at 11:36:12 (UTC)
Goto Top
Wie gesagt, in der Registry hab ích mit der Batch noch nie gearbeitet face-smile
Viel Glück euch beiden noch

Grüße
Exze
Member: Noobstar0815
Noobstar0815 Apr 11, 2013 at 11:36:42 (UTC)
Goto Top
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.
Member: Noobstar0815
Noobstar0815 Apr 11, 2013 at 12:08:38 (UTC)
Goto Top
Ok Jasmina, gleich hab ichs, muss es noch eben zusammenfügen und prüfen :D Gib mir noch höchstens 30 Minuten hehe
Member: Noobstar0815
Noobstar0815 Apr 11, 2013, updated at Apr 12, 2013 at 07:46:06 (UTC)
Goto Top
Also
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
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
for /f %%i in ('REG QUERY "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\1.7.0_17"') do Set reg1=%%i  
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
Member: Jasmina
Jasmina Apr 11, 2013 updated at 17:06:12 (UTC)
Goto Top
Ok, da hast du dich aber ins Zeug gelegt. Aber Ich werde morgen erst sagen können, ob es funktioniert.

Das Code ist jetzt aber nur für 2 Programme ausgelegt oder? Ach, ne ich sehe ist doch für 1 Programm.

Aber erstmal vielen, vielen, vielen Dank.
Member: Endoro
Endoro Apr 12, 2013 at 06:23:21 (UTC)
Goto Top
Hallo Noobstar0815,

dein Code hat ein Problem:
@echo off&setlocal 
set reg1=1
for /f %%i in ('REG QUERY "bla bla"') do Set reg1=%%i  
echo %reg1%

if reg1==1 (
echo nicht Vorhanden
) else (
echo Vorhanden
)

.. output ist:
Fehler: UngüItiger Schlüsselname
1
Vorhanden


Gruss!
Mitglied: 106543
106543 Apr 12, 2013 at 06:28:18 (UTC)
Goto Top
Hi @Endoro

vielleicht solltest du
bla bla
durch einen richtigen Registry-Schlüssel ersetzen ? face-smile

Grüße
Exze
Member: Endoro
Endoro Apr 12, 2013 at 07:18:49 (UTC)
Goto Top
Hallo Exzellius,
den Fehler sieht man so besser.

Gruss!
Mitglied: 106543
106543 Apr 12, 2013 at 07:23:04 (UTC)
Goto Top
Hi Endoro,

ah jetzt fällt´s mir auch auf face-smile bitte entschuldige
der Fehler sollte behoben sein, wenn man eine zweite if-Abfrage einbaut oder ?

Grüße
Exze
Member: Noobstar0815
Noobstar0815 Apr 12, 2013 at 07:28:41 (UTC)
Goto Top
Bei mir läuft es, hier mal die Ausgabe mit echo on
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 . . .
Ich wüsste jetzt spontan auch nicht wo der Fehler sein soll :/
Member: Noobstar0815
Noobstar0815 Apr 12, 2013 at 07:30:43 (UTC)
Goto Top
Da sieht man übrigens auch sehr gut, dass "reg1" mehrfach gesetzt wird, aber da es zum Schluss immer mit dem Pfad eines RegKeys gesetzt wird, steht eigentich immer ein "HKEY..." als "reg1", deshalb hatte ich es vorher auf 1 gesetzt.
Member: Endoro
Endoro Apr 12, 2013 at 07:37:37 (UTC)
Goto Top
Hallo Noobstar0815,

wenn du zwei ungleiche Stringkonstanten miteinander vergleichst, werden die nie gleich sein.

if reg1==1 (
echo nicht Vorhanden
) else (
echo Vorhanden
)
.. ergibt immer "Vorhanden".


Gruss!
Member: Noobstar0815
Noobstar0815 Apr 12, 2013 at 07:40:59 (UTC)
Goto Top
Hilf mir weiter, ich verstehe nicht wie es zustande kommt.
Es sollte so sein, dass reg1 am Anfang auf 1 gesetzt wird, damit es einen Wert hat, falls kein Schlüssel vorhanden ist. Anschließend wird reg1 mit der Ausgabe von REG QUERY gesetzt, warum ist dann reg1==1 immer noch true?
Member: Endoro
Endoro Apr 12, 2013 at 07:42:37 (UTC)
Goto Top
Hallo, die Variable heisst "%reg1%", nicht "reg1".

Gruss!
Member: Noobstar0815
Noobstar0815 Apr 12, 2013 updated at 07:46:32 (UTC)
Goto Top
... Danke, peinlicher Fehler ...
EDIT: Hab den Fehler im Code den ich gepostet habe behoben
Member: Noobstar0815
Noobstar0815 Apr 12, 2013 at 08:35:22 (UTC)
Goto Top
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):
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...
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:
echo Java
@for %%f in ("%lw%\Java\*.*") do start /wait "" "%%f" /s  
echo Java Fertig
Die Ausgabe von cmd gibt folgendes aus:
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...
Dort wird die Zeile
@for %%f in ("%lw%\Java\*.*") do start /wait "" "%%f" /s  
komplett weggelassen, es öffnet sich auch kein neuer Prozess wie sonst.
Mitglied: 106543
106543 Apr 12, 2013 at 08:44:58 (UTC)
Goto Top
Hi,

ersetz mal den call-Befehl zum Aufrufen des Scripts mit nem start-Befehl

Grüße
Exze
Member: Noobstar0815
Noobstar0815 Apr 12, 2013 at 09:06:23 (UTC)
Goto Top
Getan, es öffnet sich für java.bat ein neues Fenster mit dieser Ausgabe:
echo Java
Java

echo Java Fertig
Java Fertig
Die Zeile zum installieren fehlt wieder.
Mit call funktioniert es in meiner update.bat ja auch.
Mitglied: 106543
106543 Apr 12, 2013 at 09:10:51 (UTC)
Goto Top
Hi du,

wo befüllst du die Variable %lw% ? :D wenn du kein Verzeichnis hast kann auch eine Foreach nichts tun

Grüße
Exze
Member: Noobstar0815
Noobstar0815 Apr 12, 2013 at 09:40:04 (UTC)
Goto Top
MEIN GOTT EY
Jedesmal so richtig dämliche Fehler -.-"
Member: Noobstar0815
Noobstar0815 Apr 15, 2013 at 07:35:02 (UTC)
Goto Top
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.
Member: Jasmina
Jasmina Apr 16, 2013 updated at 12:02:11 (UTC)
Goto Top
So bin wieder da, entschuldige, das ich jetzt erst antworte, mein Rechner war platt und es hat alles länger gedauert, als mir lieb war. Wenn dann kommt alles zusammen.

Also ich habe es ausprobiert und es hat funktioniert. Ich habe nur das Problem noch das ich in der Registry, den Eintrag SuiteVersion nach einer bestimmten Versionsnummer abfragen muss.

Um genauer zu werden, es geht bei mir um update-versionen, die nacheinander installiert werden müssen. Aber im Rechner muss halt erst die Version abgefragt werden und dann darf erst ab der Stelle instaliert werden die fehlt, die Reihenfolge darf nicht verwechselt werden.

Aber das Programm soll auch für andere Programme dienen, wo halt kein Update dahinter steht. Wie zum Beispiel wenn erst java, dann firefox und dann FlashPlayer installiert werden soll, aber halt auch nur wenn es noch nicht drauf ist. Und das funktioniert. Aber das mit dem update fehlt mir halt noch.

Das probiere ich gerade aus. Falls jemand eine Idee hat? Aber ich wollte mich erstmal ganz herzlich bei euch bedanken, ihr habt mich auf ganz gute Ideen gebracht. Ich bin in dieser Welt mit den Registry ganz neu. Ich glaube ich werde einfach auch in Zukunft mal mehr ausprobieren.

Ich stell dann die Tage, den Code mal ins Netz, ich hoffe das nicht wieder was dazwischen kommt.

Grüße Jasmina
Member: Noobstar0815
Noobstar0815 Apr 16, 2013 at 13:08:50 (UTC)
Goto Top
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 ^^