Zweimalige Prüfung auf Existent funktioniert nicht


tklustig

Erfahrenes Mitglied
#1
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
#2
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
#3
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
#6
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