mylurid
Goto Top

Batch: Prüfung auf erfolgreich ausgeführten Befehl

Guten Morgen zusammen!

Habe folgedes Problem.. es existiert ein Skript, welches einen Ordner auf Dateien mit Größe 0 Byte prüft, ein Log erstellt und dann eine Mail verschickt.
Das klappt soweit auch ganz gut.
Es sollen auch noch die Dateien, die größer als 0 Byte sind an eine Mail angehängt und versendet werden. Auch das klappt.

Mein Problem besteht darin, dass er immer - also egal ob eine Datei mit 0 Byte gefunden wurde oder nicht - eine Mail verschickt, das einer 0 Byte Datei existieren würden.

ECHO off
chcp 28591
Set "Verzeichnis=D:\xy\z\"
@for /R %Verzeichnis% %%i in (*.*) do @if %%~zi==0 if /i %%~dpi==%Verzeichnis% echo %date% %time:~0,8% - del "%%i" >> delete.txt
@for /R %Verzeichnis% %%i in (*.*) do @if %%~zi==0 if /i %%~dpi==%Verzeichnis% del "%%i" && GOTO BLAT-AUFRUF2
if exist "%Verzeichnis%" dir /b /A:-d "%Verzeichnis%">nul 2>nul || GOTO ENDE
if exist "%Verzeichnis%" dir /b /A:-d "%Verzeichnis%">nul 2>nul && GOTO BLAT-Aufruf

:BLAT-AUFRUF
blat blat -to xx@yy.intern

:BLAT-AUFRUF2
blat -to xx@yy.intern

:ENDE

Wie bekomme ich es hin, dass die Mail für 0 Byte Dateien nur dann verschickt wird, wenn auch wirklich eine gefunden wurde?
Eine IF Abfrage ob das Log existiert wäre eine theoretische Möglichkeit - habe es in der Praxis aber nicht umgesetzt bekommen.

Kann mir jemand helfen?

Gruß,
mylurid

Content-ID: 253401

Url: https://administrator.de/contentid/253401

Ausgedruckt am: 05.11.2024 um 21:11 Uhr

bastla
bastla 30.10.2014 um 16:12:24 Uhr
Goto Top
Hallo mylurid!

Wenn tatsächlich 2 verschiedene Mails gesendet werden sollen, würde ich das schematisch (und ungetestet) etwa so versuchen:
ECHO off & setlocal

chcp 28591 

Set "Verzeichnis=D:\xy\z\"  
Set "Log_Delete=%temp%\delete.txt"  
Set "Log_Files=%temp%\files.txt"  

del "%Log_Delete%" 2>nul  
del "%Log_Files%" 2>nul  

pushd "%Verzeichnis%" || goto :eof  

@for /F "delims=" %%i in ('dir /b/a-d 2^>nul') do @if %%~zi==0 @(  
    echo %date% %time:~0,8% - del "%%i">>"%Log_Delete%"  
    del "%%i"  
)

dir /b/a-d>"%Log_Files%" 2>nul  

if exist "%Log_Files%" echo Sende Mail mit Dateien grosser als 0 Byte   
if exist "%Log_Delete%" echo Sende Mail mit geloeschten Dateien  

popd
Anstelle der echo in den letzen beiden Zeilen dann natürlich der entsprechende "blat"-Aufruf (mit den Attachments %Log_Files% bzw %Log_Delete%") ...

Grüße
bastla
mylurid
mylurid 03.11.2014 um 17:22:12 Uhr
Goto Top
Ich hatte es bereits selbst gelöst..
Mein Problem war (habe nicht all zu oft mit Batches zu tun), dass ich nicht daran gedacht habe, dass alles sequenziell durchlaufen wird.
Daher ist er nach dem GOTO Befehl trotzdem nochmal zum Versand der Failure Mail gesprungen.

Hatte im Kopf, dass sich die Sprungmarken wir Funktionen handhaben und nur bei Bedarf angesprochen werden..

Gruß,
mylurid