nicolasduke
Goto Top

Fehler im Batchscript - UpdateManager

Hallo Leute,

wie der Titel schon sagt, bin ich auf der Suche nach einem Tool zur Überprüfung meiner Batch Quelltexte...
Kennte jemand von euch entsprechende Tools?

Oder könnte sich jemand folgenden Quelltext ansehen -> Funktioniert irgendwie nicht....

title Update-Manager for BEISPIEL-PROGRAMM
setlocal enabledelayedexpansion 
SET versionsnummer=5.3.1.3
set "found=0"   
FOR /F "tokens=1,2,3 delims=," %%A IN ('"WMIC product get name,version /FORMAT:csv"') DO (   
set "Program=%%B"   
set "Version=%%C"   
if "!PROGRAM!"=="BEISPIEL-PROGRAMM" (   
set "found=1"   
if not "!VERSION:~0,-1!"=="%versionsnummer%" set UpdatenVar=Möchten Sie BEISPIEL-PROGRAMM 5.3.1.3 installieren?(Yes/No)  
if %UPDATENVAR%==Yes call D:\Starte BEISPIEL-PROGRAMM installer.bat
if "!VERSION:~0,-1!"=="%Versionsnummer%" echo OK!   
) 
) 
) 
rem Anzeige aller Programme "REM" entfernen.   
rem echo "!PROGRAM!", "!VERSION:~0,-1!"   
IF "!found!"=="0" call D:\Starte BEISPIEL-PROGRAMM installer.bat  



PS: Vorab schon mal besten Dank für die sicherlich recht hilfreichen Antworten von euch...

Content-Key: 92311

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

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

Mitglied: 60730
60730 Jul 17, 2008 at 15:27:56 (UTC)
Goto Top
Servus,

<[code]> <[/Code]>
set "Program=%%B"   
if "!PROGRAM!"=="BEISPIEL-PROGRAMM" (  
 

Ent weder oder face-wink
Program oder !Program! ????
Das gleiche bei Version...
Member: miniversum
miniversum Jul 17, 2008 at 16:48:41 (UTC)
Goto Top
Hier:
if not "!VERSION:~0,-1!"=="%versionsnummer%" set UpdatenVar=Möchten Sie BEISPIEL-PROGRAMM 5.3.1.3 installieren?(Yes/No)  
hast du ein "/p" nach dem set vergessen:
if not "!VERSION:~0,-1!"=="%versionsnummer%" set /p UpdatenVar=Möchten Sie BEISPIEL-PROGRAMM 5.3.1.3 installieren?(Yes/No)  
Member: Biber
Biber Jul 17, 2008 at 16:54:22 (UTC)
Goto Top
Moin nicolasduke,

<OT>
falls ich es noch nicht erwähnt haben sollte: Ich mag keine ODER-Fragen.

Das hier wird wieder so ein Bandwurm-Beitrag, der NIE "gelöst" wird.

Bitte entscheide Dich:
  • sollen wir Dir den Schnipsel zum Laufen bringen?
  • oder suchst Du wirklich einen Batch-Parser?
  • Wenn letzteres - wer sollte so etwas geschrieben haben und wozu????

Meine Bitte: Ändere den Titel auf: "Fehler im Batchskript" oder so etwas.
</OT>

Grüße
Biber
Member: nicolasduke
nicolasduke Jul 20, 2008 at 08:51:40 (UTC)
Goto Top
Hallo Ihr,
zunächst besten Dank für eure Antworten. Irgendwie funktioniert das Teil immer noch nicht.

Die Batch macht vom prinzip her gar nichts, was sie ja eigentlich nicht sollte....
Woran's liegt, keine ahnung...

title Update-Manager for BEISPIEL-PROGRAMM
@echo on
setlocal enabledelayedexpansion 
SET versionsnummer=5.3.1.3
set "found=0"   
FOR /F "tokens=1,2,3 delims=," %%A IN ('"WMIC product get name,version /FORMAT:csv"') DO (   
set "!PROGRAM!=%%B"   
set "!VERSION!=%%C"   
if "!PROGRAM!"=="BEISPIEL-PROGRAMM" (   
set "found=1"   
if not "!VERSION:~0,-1!"=="%versionsnummer%" set /p UpdatenVar=Möchten Sie BEISPIEL-PROGRAMM 5.3.1.3 installieren?(Yes/No)   
if %UPDATENVAR%==Yes call D:\Starte BEISPIEL-PROGRAMM installer.bat
if "!VERSION:~0,-1!"=="%Versionsnummer%" echo OK!   
) 
) 
) 
rem Anzeige aller Programme "REM" entfernen.   
rem echo "!PROGRAM!", "!VERSION:~0,-1!"   
IF "!found!"=="0" call D:\Starte BEISPIEL-PROGRAMM installer.bat  


Bitte um Hilfe...

Beste Grüße
nicolasduke
Member: bastla
bastla Jul 20, 2008 at 20:44:25 (UTC)
Goto Top
Hallo nicolasduke!

In den "set"-Zeilen ist kein Variablenbegrenzer (also auch nicht "!") nötig, daher:
set "PROGRAM=%%B"  
set "VERSION=%%C"  
Weiter unten (beim Auswerten der Variablen %UPDATENVAR%) wäre dann wieder das "!" anstelle von "%" gefragt, also:
if !UPDATENVAR!==Yes call D:\Starte BEISPIEL-PROGRAMM installer.bat
Leichter machst Du es den Benutzer/innen, wenn Du nicht die exakte Schreibweise des "Yes" überprüfst, sondern etwa nur den ersten Buchstaben, und auch da nicht auf Groß- oder Kleinschreibung bestehst, also etwa:
if /i "!UPDATENVAR:~,1!"=="Y" call "D:\Starte BEISPIEL-PROGRAMM installer.bat"  
Außerhalb der Schleife (zB für die Kontrolle von %found%) ist keine "delayedExpansion" erforderlich, daher wieder Variablenschreibweise wie gehabt:
IF "%found%"=="0" call "D:\Starte BEISPIEL-PROGRAMM installer.bat"  
Und falls ich mich nicht verzählt habe, hast Du eine schließende Klammer zuviel (oder auch eine zu wenig geöffnet face-wink).

Grüße
bastla

P.S.: TimoBeil hat das mit den ""-Tags als gemeint ...
Member: nicolasduke
nicolasduke Jul 21, 2008 at 13:37:19 (UTC)
Goto Top
Also Leute,
der update manager funktioniert leider immer noch nicht. Ich bin irgendwie am verzweifeln.

Was macht das ding konkret?
- Die cmd startet, wie gehabt, bleibt länger offen als bisher und schließt sich gleich wieder.
- Egal ob die Programmversion veraltet ist oder nicht, die Installation startet nie.
- Der Benutzer kann darüberhinaus auch nie entscheiden, ob installiert werden soll oder nicht - klar, wie auch, wenn sich die cmd gleich wieder schließt...

Führe ich meinen Update-Manager unter cmd mit:
start d:\clonecd updatemanager.bat
aus, dann öffnet sich immer der Installer.


Hier nochmal der Quelltext:
title Update-Manager for CloneCD
@echo on
setlocal enabledelayedexpansion
SET versionsnummer=5.3.1.3
set "found=0"  
FOR /F "tokens=1,2,3 delims=," %%A IN ('"WMIC product get name,version /FORMAT:csv"') DO (  
set "PROGRAM=%%B"  
set "VERSION=%%C"  
if "!PROGRAM!"=="CloneCD" (  
set "found=1"  
if not "!VERSION:~0,-1!"=="%versionsnummer%" set /p  
UpdatenVar=Möchten Sie CloneCD 5.3.1.3 installieren?(Yes/No)
if /i "!UPDATENVAR:~,1!"=="Y" call "D:\Starte CloneCD installer.bat"  
if "!VERSION:~0,-1!"=="%Versionsnummer%" echo OK!  
)
)
rem Anzeige aller Programme "REM" entfernen.  
rem echo "!PROGRAM!", "!VERSION:~0,-1!"  
IF "%found%"=="0" call D:\Starte CloneCD installer.bat  


PS: Kann es vielleicht sein, dass WMIC sich nur auf Installationen bezieht, die mit dem Windows Installer installiert wurden?

Ich hab mir mal mit:
WMIC /OUTPUT:Software.html Product get name,version /FORMAT:hform
eine Softwareliste erstellt und da zeigt's nur etwa die hälfte an Software an, die ich installiert habe...

Wie kann ich in meinem Quelltext nach allen, auf dem System installierten Programmen suchen lassen? Und nicht nur nach denen, die wahrscheinlich mit dem WindowsInstaller installiert wurden?

Hab hier mal einen anderen Quelltext gefunden - ob er was nützt, ich weis es nicht.:
Public Sub check_sw()

    Dim strComputer
    Dim objReg
    Dim strKeyPath
    Dim subkey
    Dim arrSubKeys
    Dim strDisplayName
    Dim strDisplayVersion
    Dim strPublisher
    
'=======================================================  
'DEFINIERT HKLM ALS HEX-VALUE (FÜR ENUMERATE)  
'=======================================================  
    Const HKLM = &H80000002
    
    strComputer = "."  

    DoEvents
        frm_install.lbl_warten.Visible = True
    DoEvents
    
    frm_install.lstb_software.Clear
    
    Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _  
    strComputer & "\root\default:StdRegProv")  
    
'=======================================================  
'EINZULESENDE REGISTRY-WERTE  
'=======================================================  
    strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"  
    objReg.EnumKey HKLM, strKeyPath, arrSubKeys
    
'=======================================================  
'REGISTRY-EINTRÄGE WERDEN AUFGESCHLÜSSELT  
'=======================================================  
    For Each subkey In arrSubKeys
        objReg.GetStringValue HKLM, strKeyPath & subkey, "DisplayName", strDisplayName  
        objReg.GetStringValue HKLM, strKeyPath & subkey, "DisplayVersion", strDisplayVersion  
        objReg.GetStringValue HKLM, strKeyPath & subkey, "Publisher", strPublisher  
        If strDisplayName <> "" Then  
            frm_install.lstb_software.AddItem (strDisplayName) & Chr(32) & strDisplayVersion & Chr(32) & strPublisher
        End If
    Next
    frm_install.chb_systemcheck.Value = vbChecked
    frm_install.lbl_warten.Visible = False
    Set objReg = Nothing


Grüße
nicolasduke