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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
8 Kommentare
Neuester Kommentar
Hallo,
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 Und auch evtl deine 3 CLS mal reduzieren oder auskommentiern (Rem). Vermutlich machst du ein Poppelklick auf deine Batchdatei....
Gruß,
Peter
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 Und auch evtl deine 3 CLS mal reduzieren oder auskommentiern (Rem). Vermutlich machst du ein Poppelklick auf deine Batchdatei....
Gruß,
Peter
Hallo,
Ich denke das Problem liegt schon in diesem Abschnitt:
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
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
Überprüfen, ob ein Update installiert ist und dieses gegebenenfalls nachinstallieren, lässt sich übrigens in Powershell recht einfach realisieren:
LG Martin
if (-not ((Get-HotFix).HotFixID -eq "KB123456789")) {Start-Process -FilePath wusa.exe -NoNewWindow -Wait -ArgumentList '\\Pfad\Zur.msu','/quiet','/norestart'}
LG Martin