# Zweimalige Prüfung auf Existent funktioniert nicht



## tklustig (3. Mai 2019)

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?

```
@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 (3. Mai 2019)

Ich rate mal: Batchprogrammierung?

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


----------



## Zvoni (3. Mai 2019)

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 (3. Mai 2019)

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


----------



## Yaslaw (3. Mai 2019)

tklustig hat gesagt.:


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


Das Echo danach wird nicht ausgegeben?
Dann liegt es käumlich am IF.
Wartet der Code bis das Powershell fertig ist?

Ich programmiere auch keine Batches. Ich rate nur.


----------



## tklustig (3. Mai 2019)

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...

```
@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%
```


----------

