ingenieurs
Goto Top

Skript funktioniert in cmd.exe aber in Batch nicht (schließt sich direkt)

Hallo
ich bastele an einem kleinem Programm welches helfen soll Windows Updates per msu Pakete zu installieren.
Um genau zu sein für die Server 2008 Pakete um sie auf Vista zu installieren, ist aber egal das Skript ist ja auch auf anderen Systemen kompatible.
Dachte ich zumindest.
Während ich das Skript geschrieben habe, habe ich einzelne Teile des Codes immer in einer Instanz der cmd.exe geprüft.
Als ich fertig war wollte ich das ganze dann in der fertigen Batch testen.
Allerdings beendet sich die Batch und ich kann trotz eingebauter "pause" Befehle nicht lesen was der Fehler ist.
Weiß jemand einen guten Rat? :D

Viele Grüße
Ingenieurs

@echo off
set skript=3.0
title Windows Desktop-Server-Embedded - Auto Updateinstall %skript% - IngenServerHost @2018
cls
for /f "skip=2 tokens=3" %a in ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer" /v Version') do set IEVERSION=%a  
set ie=%IEVERSION:~0,1%
for /F "tokens=4-5 delims=[.] " %A in ('ver') do set ver=%A.%B  
cls
echo Automatische Update Installation MSU Pakete - IngenServerHost @2018
echo.
echo ###########################################################
echo.
goto :START
:BEENDEN
echo Dein verwendetes Betriebssystem unterstützt die folgenden MSU Pakete nicht!
goto :EXIT
:EXIT
echo Das Programm wird beendet...
ping -n 7 localhost > NUL
exit
:START
@echo off
setlocal ENABLEEXTENSIONS
set versionNumber=3
set regquery=reg query "HKLM\Software\Microsoft\Internet Explorer" /v svcVersion  
for /f "tokens=3" %a in ('%regquery%') do (  
  for /f "tokens=1 delims=." %b in ("%a") do (  
    if %b GEQ 10 (
       set versionNumber=%b
    )
  )
)
if %versionNumber% LSS 10 (
  set regquery=reg query "HKLM\Software\Microsoft\Internet Explorer" /v Version   
  for /f "tokens=3" %a in ('%regquery%') do (  
    for /f "tokens=1 delims=." %b in ("%a") do (  
      set versionNumber=%b
    )
  )    
)
pause
echo %versionNumber%
pause
if %OS%==x64 set arch=amd64 
if %OS%==x86 set arch=i386
if %OS%==x64 set anderer=x86
if %OS%==x86 set anderer=x64
if %OS%==x64 set bit=32bit
if %OS%==x86 set bit=64bit
if %OS%==x64 set richtige=64bit
if %OS%==x86 set richtige=32bit

if %ver%==4.0 goto :BEENDEN
if %ver%==5.0 goto :BEENDEN
if %ver%==5.1 goto :BEENDEN
if %ver%==5.2 goto :BEENDEN 
if %ver%==6.0 set system=Windows Vista
if %ver%==6.1 set system=Windows 7
if %ver%==6.2 set system=Windows 8
if %ver%==6.3 set system=Windows 8.1
if %ver%==10.0 set system=Windows 10

title %system% AutoUpdate Installation MSU Pakete %skript% - IngenServerHost @2018

goto :%OS%
:%OS%
echo Dein  Betriebssystem verwendet die %OS% {%arch%} Architektur
echo.
echo ###########################################################
echo.
echo Scanne den Ordner auf Kompatible Updates...
echo.
if not exist *%OS%*.msu (GOTO :NONE)
if exist *%OS%*.msu (GOTO :%OS%START)

:NONE
if exist *%anderer*.msu (GOTO :%anderer%WRONG)
if not exist *%anderer%*.msu (GOTO :NOUPDATES)

:%anderer%WRONG
echo In dem Ordner unkompatibele sind Updates der %bit% (%anderer%) Version vorhanden.
echo Entferne diese und verwende Kompatible %richtige% (%OS%) Updates.
echo.
goto :EXIT

:NOUPDATES
echo In dem Ordner sind keinerlei Updates vorhanden!
goto :EXIT


:%OS%START
echo.
echo ###########################################################
echo.
echo Beginne mit dem Update Vorgang...
@echo off
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
FOR /R "%~dp0" %%A IN (windows%ver%*%OS%*.MSU) DO (  
        ECHO= Installing %%~nA
        >NUL TIMEOUT /t 3
        WUSA "%%A" /quiet /norestart)  


goto :CHECKIE%ie%%OS%

:CHECKIE%ie%%OS%
echo.
echo ###########################################################
echo.
echo Scanne auf Internet Explorer %versionNumber% Updates...
echo.
echo ###########################################################
echo.
if exist *ie**%anderer%*.msu (GOTO :%anderer%WRONG)
if exist *ie%versionNumber%*%OS%*.msu (GOTO :IE9%OS%)
if not exist *ie%versionNumber%*%OS%*.msu (GOTO :DONE)

:IE9%OS%
@echo off
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
FOR /R "%~dp0" %%A IN (*ie%versionNumber%*%OS%*.MSU) DO (  
        ECHO= Installing %%~nA
        >NUL TIMEOUT /t 3
        WUSA "%%A" /quiet /norestart)  
goto :DONE

:DONE
cls
echo Der Updatevorgang ist durchgelaufen!
echo.
echo ###########################################################
echo.
echo Der PC wird nun neugestartet um den Vorgang abzuschliessen...

ping -n 5 localhost > NUL
shutdown /r /t 0 /f
exit

Content-ID: 371800

Url: https://administrator.de/forum/skript-funktioniert-in-cmd-exe-aber-in-batch-nicht-schliesst-sich-direkt-371800.html

Ausgedruckt am: 25.12.2024 um 06:12 Uhr

Pjordorf
Pjordorf 20.04.2018 aktualisiert um 19:25:29 Uhr
Goto Top
Hallo,

Zitat von @Ingenieurs:
Weiß jemand einen guten Rat? :D
Eine CMD.EXE öffnen (Kommandozeilenfenster) und dort dann deine Batchdatei starten. Dann solltest du was sehen, aber bei @echo OFF als Start seheh ich eher nichts face-smile Und auch evtl deine 3 CLS mal reduzieren oder auskommentiern (Rem). Vermutlich machst du ein Poppelklick auf deine Batchdatei....

Gruß,
Peter
wisebeer
Lösung wisebeer 20.04.2018 aktualisiert um 19:32:15 Uhr
Goto Top
Hallo,

Ich denke das Problem liegt schon in diesem Abschnitt:

 goto :START
:BEENDEN
echo Dein verwendetes Betriebssystem unterstützt die folgenden MSU Pakete nicht!
goto :EXIT
:EXIT
echo Das Programm wird beendet...
ping -n 7 localhost > NUL
exit
:START

Die Beenden Sprungmarke wird zuvor nie erwähnt und nach GOTO sollte auch kein Doppelpunkt stehen, das heißt es läuft bis zum exit in Zeile 20 und beendet dann. Batch wird Zeile für Zeile abgearbeitet, eine Sprungmarke muss NACH dem GOTO kommen, das heißt von deinem GOTO in Zeile 53, kommst du nicht zu 14.

LG Martin
Ingenieurs
Ingenieurs 20.04.2018 um 19:34:53 Uhr
Goto Top
Ah ok das heißt alles muss in der richtigen Reinfolge ablaufen?
wisebeer
wisebeer 20.04.2018 um 19:44:56 Uhr
Goto Top
Ja, genau, und sinnvollerweise immer an eine Bedingung geknüpft. Schau mal hier: Sprungmarken

LG
Ingenieurs
Ingenieurs 20.04.2018 aktualisiert um 20:20:42 Uhr
Goto Top
Also ich habe jetzt ein bisschen weiter herum geschrieben und per cmd.exe die batch aufgerufen.
Dort sagt er das das Sprungziel "x64" nicht existiert.
Das hatte ich mit %OS% gekennzeichnet.
reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > NUL && set OS=x86 || set OS=x64  
cls
echo Automatische Update Installation MSU Pakete - IngenServerHost @2018
echo.
echo ###########################################################
echo.
goto START

:EXIT
echo Das Programm wird beendet...
ping -n 7 localhost > NUL
exit
:START
@echo off
pause
if %OS%==x64 set arch=amd64
if %OS%==x86 set arch=i386
if %OS%==x64 set anderer=x86
if %OS%==x86 set anderer=x64
if %OS%==x64 set bit=32bit
if %OS%==x86 set bit=64bit
if %OS%==x64 set richtige=64bit
if %OS%==x86 set richtige=32bit

if %ver%==4.0 (goto BEENDEN)
if %ver%==5.0 (goto BEENDEN)
if %ver%==5.1 (goto BEENDEN)
if %ver%==5.2 (goto BEENDEN) 

title %system% AutoUpdate Installation MSU Pakete %skript% - IngenServerHost @2018
goto %OS%
:BEENDEN
echo Dein verwendetes Betriebssystem unterstuetzt die folgenden MSU Pakete nicht!
goto EXIT
Jetzt kommts
:%OS%
echo Dein  Betriebssystem verwendet die %OS% (%arch%) Architektur
echo.
echo ###########################################################
echo.
echo Scanne den Ordner auf Kompatible Updates...

Und %OS% findet er nicht.
heißt das man kann kein Sprungziel mit einer Variable aufsetzen?
Also nur als echo oder etc?
Viele Grüße
Ingenieurs
Ingenieurs
Ingenieurs 20.04.2018 um 20:39:43 Uhr
Goto Top
So habs jetzt :D
Trotzdem danke an euch
wisebeer
wisebeer 22.04.2018 um 20:06:18 Uhr
Goto Top
Überprüfen, ob ein Update installiert ist und dieses gegebenenfalls nachinstallieren, lässt sich übrigens in Powershell recht einfach realisieren:

if (-not ((Get-HotFix).HotFixID -eq "KB123456789")) {Start-Process -FilePath wusa.exe -NoNewWindow -Wait -ArgumentList '\\Pfad\Zur.msu','/quiet','/norestart'}  

LG Martin
Ingenieurs
Ingenieurs 24.04.2018 aktualisiert um 21:23:24 Uhr
Goto Top
Das ist nicht nötig, da ich das Skript verwende um Server 2008 Updates hauptsächlich unter Windows Vista installieren möchte und da dies alles neue sind und in Monate eingeteilt sind. Aber danke für die Info face-smile
http://os.ingenserverhost.de/Tools%20&%20Features/Windows%20Vista/U ...

LG Ingenieurs