Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Batch Script / Errorlevel

martinsch1 / 3 Antworten / Baumansicht Nickles

Hallo zusammen,

ich habe ein Batch-Script geschrieben, dass eine Programm updaten soll (nur alte Dateien mit den neuen überschreiben). Das BatchScript verwendet zuerst das Programm pslist, das am Rechner schaut oba das Programm derzeit verwendet wird (läuft das Programm, gibt pslist den Errorlevel 0 zurück, ansonsten 1). Wenn nicht kanns mit dem Update losgehen.
Nun schaut das Script nur noch, ob das Exe-File um Netzlaufwerk neuer ist als am lokalen Rechner. Wenn jo werden die gesamten Daten kopiert.

Nur habe ich das Problem, das der xcopy Befehl im Else teil immer den Errorlevel 1 zurückgibt, auch wenn die exe-Datei korrekt kopiert wurde.


##############################################################
##############################################################
##############################################################


@echo off
:: /////Variablen///////////////

set ProgrammQuelle=\\\\\\Path\\\\Programm
set ProgrammUpdate=false

:://////////////////////////////////////////
IF NOT EXIST "%programfiles%\\\\ProgrammOrdner" goto ende
IF NOT EXIST "%ProgrammQuelle%" goto ende

pslist ProgrammName
if %errorlevel% GEQ 1 set ProgrammUpdate=true


IF %ProgrammUpdate% EQU false (
echo "Programm wird derzeit verwendet !!!"
goto ENDE
) else (
xcopy "%ProgrammQuelle%\\\\Programm.exe" "%programfiles%\\\\ProgrammOrdner\\*.*" /d /y |find "1 "
if %errorlevel% GEQ 1 (
echo "Keine neue Version verfuegbar."
goto ENDE
)
xcopy "%ProgrammQuelle%\\\\*.*" "%programfiles%\\\\ProgrammOrdner\\\\*.*" /R /s /y
)

:ENDE
exit /b


##############################################################
##############################################################
##############################################################



Danke für eure Hilfe
mfg martin

bei Antwort benachrichtigen
mr.escape martinsch1 „Batch Script / Errorlevel“
Optionen

Wo hast du denn die mehrzeiligen IF ELSE strukturen und die %errorlevel% variante her? Bei cmd.exe kenne ich diese art nicht, eine cmd.exe-alternative?

@echo off
:: /////Variablen///////////////
set ProgrammName=?programm.exe?
set PSListName=?programm?
set ProgrammQuelle=?\ProgrammNeu?
set ProgrammZiel=?\ProgrammInst?

:://////////////////////////////////////////
IF NOT EXIST "%ProgrammQuelle%\%ProgrammName%" goto missing1
IF NOT EXIST "%ProgrammZiel%" goto missing2

pslist %PSListName%
if errorlevel 1 (echo ProgrammUpdate möglich.) else goto inuse

xcopy "%ProgrammQuelle%\%ProgrammName%" "%ProgrammZiel%\*.*" /d /y |find "1 "
if errorlevel 1 goto oldver

xcopy "%ProgrammQuelle%\*.*" "%ProgrammZiel%\*.*" /R /s /y
echo Alles kopiert.
goto ENDE

:oldver
echo Keine neue Version verfuegbar.
goto ENDE

:missing1
echo quelle fehlt
goto ende

:missing2
echo ziel fehlt
goto ende

:inuse
echo Programm wird derzeit verwendet !!!
goto ende

:ENDE

Die vier variablen am anfang müssen natürlich der situation angepasst werden und die ganzen meldungen dürfen auch schöner sein.

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
T-Rex mr.escape „Wo hast du denn die mehrzeiligen IF ELSE strukturen und die errorlevel variante...“
Optionen
Wo hast du denn die mehrzeiligen IF ELSE strukturen und die %errorlevel% variante her? Bei cmd.exe kenne ich diese art nicht, eine cmd.exe-alternative?
Nein, bei dieser cmd.exe handelt es sich um das Original, das Ganze nennt sich "Befehlserweiterung" und ist AFAIK ab Windows 2000 eingebaut.

Siehe auch http://www.nickles.de/static_cache/537840439.html
 GrüßeT-Rex 
bei Antwort benachrichtigen
mr.escape T-Rex „ Nein, bei dieser cmd.exe handelt es sich um das Original, das Ganze nennt sich...“
Optionen

Dass in neueren versionen von CMD.EXE eine befehlserweiterung enthalten ist, habe ich gewusst, aber nicht, dass diese per default aktiviert ist ("SETLOCAL ENABLEEXTENSIONS" unnötig).
Was die mehrzeilige IF/ELSE strukturen angeht (die mit der befehlserweiterung anscheinend auch nichts zu tun haben), hat mich wohl die quelle mit der beschreibung verwirrt, da stand nämlich, dass die klammerung befehle abgrenzen kann, aber alles in einer zeile sein muss (also scheinbar keine echten vorteile zu command.com und damit auch kein weiteres interesse, so aber bringt das einige neue möglichkeiten bzw. einfache lösungen für bisher sehr unangenehme fälle).
Die erweiterungen von IF mit EQU und co. kannte ich auch (hab's nur nie benutzt), nicht aber %errorlevel% und das hat mich etwas irritiert und an etwas neues denken lassen (%errorlevel% hat bei mir bei befehlen, die definitiv errorlevel unterstützen immer "0" ergeben und so dachte ich mir, dass dort etwas faul ist, evtl. habe ich aus versehen doch eine gleich genannte variable angelegt und damit die funktionalität ausgehebelt).
Wie auch immer, man lernt nie aus!

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen