Zweimalige Prüfung auf Existent funktioniert nicht


tklustig

Erfahrenes Mitglied
Hallo Leute, folgender Code wird nur bis nach der ersten IF EXIST Prüfung durchlaufe, die zweite IF EXIST Prüfung wird nie abgearbeitet. Warum? Wo liegt der Fehler?
Bash:
@ECHO OFF
SET UPDATE_LOG=C:\Users\TKipp\Desktop\update.log
SET 7ZA=u:\7za.exe
SET DPTnPics_ZIP=U:\DPTnPics.7z
SET DPTnPics_DEST=J:\programme\
SET DPT2BEDELETED=J:\programme\dpt
SET PowershellScript=U:\cleanUp.ps1
SET filename=U:\DPTnPics_Link.exe.lnk
IF EXIST %DPTnPics_ZIP% (
    IF EXIST %PowershellScript% (
    PowerShell.exe -Command %PowershellScript%
    ECHO %date% %time% Das PowerShell-Script %PowershellScript% wurde gefunden und ausgefuehrt. >> %UPDATE_LOG%
    ) ELSE (
        ECHO Das PowerShell-Script %PowershellScript% wurde nicht gefunden und folglich auch nicht ausgefuehrt. >> %UPDATE_LOG%
        ECHO %date% %time%: Abbruch  >> %UPDATE_LOG%
        GOTO :eof
    )
)
PAUSE
ECHO %DPTnPics_ZIP%
ECHO %filename%
PAUSE
IF EXIST %DPTnPics_ZIP% (
    REM Diese Stelle wird nie erreicht. Wie kann das sein??
    PAUSE
    IF EXIST %filename% (
        IF "%userdomain%" neq "%computername%" SET "dom=/domain"
        FOR /f "tokens=2*" %%i IN ('net user "%username%" %dom%^|findstr "Benutzername"') DO SET "Anzeigename=%%i"
        SET path="C:\Users\%Anzeigename%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"
        COPY %filename% %path%
        ECHO %date% %time%: Die Datei %filename% wurde soeben in den Autostartordner %path% kopiert. Sie wird nach jedem Neustart automatisch anspringen! >> %UPDATE_LOG%
        ) ELSE (
        ECHO Der Link %filename% wurde nicht gefunden und folglich auch nicht  in den Autostartordner kopiert. >> %UPDATE_LOG%
        ECHO %date% %time%: Abbruch!  >> %UPDATE_LOG%
        GOTO :eof
        )
)
PAUSE
 

Yaslaw

n/a
Moderator
Ich rate mal: Batchprogrammierung?

Und wird gar nix ausgegeben? Da hast da diverse ECHO drin. Keiner wird ausgegeben?
Und startet der PowerShell?
 

Zvoni

Erfahrenes Mitglied
Ich kenn mich jetzt in Batch nicht wirklich aus, aber ich sehe in Zeile 16 ein GOTO :eof
Wo ist dieses label? Wie verhält sich Batch bei einem GOTO zu nicht existierendem Label?
 

tklustig

Erfahrenes Mitglied
Der Powershell startet. Danach nix mehr! eof ist ein systemlabel, dass muss nicht extra definiert werden!!
 

tklustig

Erfahrenes Mitglied
So klappt zumindest meine Intention. Warum obige Variante mit IF ( ELSE ( ) ) nicht funktioniert, bleibt ein Rätsel. Kein Vergleich zu LINUX. Da hatte ich nie derartige Probleme...
Bash:
@ECHO OFF
SET UPDATE_LOG=U:\update.log
SET ZIPEXE=U:\7za.exe
SET DPTnPics_ZIP=U:\DPTnPics.7z
SET DPTnPics_DEST=J:\programme\
SET DPT2BEDELETED=J:\programme\dpt
SET PowershellScript=U:\cleanUp.ps1
SET filename=U:\DPTnPics_Link.exe.lnk
IF EXIST %DPTnPics_ZIP% IF EXIST %DPTnPics_DEST%  IF EXIST %PowershellScript% IF EXIST %filename% IF EXIST %ZIPEXE%  GOTO :ok
:missing
ECHO %date% %time% Mindestens einer der Dateien %ZIPEXE%, %DPTnPics_ZIP%, %DPTnPics_DEST%, %PowershellScript% oder %filename%  wurde(n) nicht gefunden  >> %UPDATE_LOG%
ECHO %date% %time%: Abbruch  >> %UPDATE_LOG%
GOTO :eof
:ok
PowerShell.exe -Command %PowershellScript%
ECHO %date% %time% Das PowerShell-Script %PowershellScript% wurde gefunden und ausgefuehrt. >> %UPDATE_LOG%   
IF "%userdomain%" neq "%computername%" SET "dom=/domain"
FOR /f "tokens=2*" %%i IN ('net user "%username%" %dom%^|findstr "Benutzername"') DO SET "Anzeigename=%%i"
SET path="C:\Users\%Anzeigename%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"
COPY %filename% %path%
ECHO %date% %time%: Die Datei %filename% wurde soeben in den Autostartordner %path% kopiert. Sie wird nach jedem Neustart ausgefuehrt. >>%UPDATE_LOG%
IF EXIST %DPT2BEDELETED% GOTO :delete
ECHO %date% %time%:Der Pfad %DPT2BEDELETED%  wurde(n) nicht gefunden  >> %UPDATE_LOG%
ECHO %date% %time%: Die ehemalige Tagesabschlussroutine  war bisher nicht installiert, wird folglich auch nicht geloescht  >> %UPDATE_LOG%
GOTO :install
:delete
RMDIR /S/Q %DPT2BEDELETED%
ECHO %date% %time%: Verzeichnis %DPT2BEDELETED% mitsamt aller Dateien wurde geloescht. >> %UPDATE_LOG%
:install
ECHO ================================================================================ >> %UPDATE_LOG%
ECHO %date% %time%: Starte DPTnPics Installations-Prozess. >> %UPDATE_LOG%
ECHO %date% %time%: Entpacke DPTnPics-Dateien nach %DPTnPics_DEST%.  >> %UPDATE_LOG%
ECHO %date% %time%: ########## Starte ZIP-Ausgabe ########## >> %UPDATE_LOG%
%ZIPEXE% x -y -o%DPTnPics_DEST% %DPTnPics_ZIP% >> %UPDATE_LOG% 2>&1
ECHO %date% %time%: ########## Ende ZIP-Ausgabe ########## >> %UPDATE_LOG%
IF %ERRORLEVEL% == 0 (
    ECHO %date% %time%: Loesche %DPTnPics_ZIP%,%PowerShellScript% und %filename% >> %UPDATE_LOG%
    DEL %DPTnPics_ZIP% 2>&1
    DEL %PowerShellScript% 2>&1
    DEL %filename% 2>&1
    ECHO %date% %time%: Die Dateien %DPTnPics_ZIP%,%PowerShellScript% und %filename% wurden alle geloescht!>> %UPDATE_LOG%
) ELSE (
    SET ERR=1
    ECHO %date% %time%: ZIP-Fehler aufgetreten. >> %UPDATE_LOG%
)
ECHO %date% %time%: DPTnPics Installationsprozess beendet. >> %UPDATE_LOG%
ECHO ================================================================================ >> %UPDATE_LOG%
ECHO. >> %UPDATE_LOG%
 

Neue Beiträge