CMD - gibt es eine datei im ordner wenn ja dann bitte als anhang senden
Hallo leute ich mache gerade eine CMD-Datei und habe das Problem das ich die dateien nicht einzeln auslesen kann ( datei für datei). ich habe es mit for und mit if exist schleifen versucht aber irgendwie kam ich nicht weiter.
Ziel ist es das für jede Datei einzeln welche im "ausgangs" ordner landet eine email gesendet wird (per Blat) und sie danach in den ordner "versendet" geschoben wird. wenn keine dateien mehr vorhanden sind ist das Script fertig.
mein Beispiel bis jetzt:
ich habe einen Ordner Ausgang mit folgendem Inhalt
-tabelle1.xlsx
-tabelle2.xlsx
-tabelle3.xlsx
-text.txt
-word.docx
und einen versendet Ordner ohne inhalt
und mein CMD Script :
:START
REM Abfrage gibt es überhaupt Dateien in Ausgangsordner?
if exist C:Pfad\ausgang\*.xlsx goto SEND_EXCEL
if exist C:Pfad\ausgang\*.txt goto SEND_TXT
if exist C:Pfad\ausgang\*.docx goto SEND_WORD
goto ENDE
REM Datei im Email senden und in Versendet - Ordner verschieben + Loop
:SEND_EXCEL
Blat -install Host. meine@email.ch
Blat "C:Pfad\body.txt" -to meine@email.ch -server smtp.server.ch -attach "C:Pfad\ausgang\*.xlsx" -debug -timestamp -log blatSMTPlog.txt -subject "Blat Email-Test Excel"
move C:Pfad\ausgang\*.xlsx C:Pfad\versendet
goto START
:SEND_TXT
Blat -install Host. meine@email.ch
Blat "C:Pfad\body.txt" -to meine@email.ch -server smtp.server.ch -attach "C:Pfad\ausgang\*.txt" -debug -timestamp -log blatSMTPlog.txt -subject "Blat Email-Test TEXT"
move C:Pfad\ausgang\*.txt C:Pfad\versendet
goto START
:SEND_WORD
Blat -install Host. meine@email.ch
Blat "C:Pfad\body.txt" -to meine@email.ch -server smtp.server.ch -attach "C:Pfad\ausgang\*.docx" -debug -timestamp -log blatSMTPlog.txt -subject "Blat Email-Test WORD"
move C:Pfad\ausgang\*.docx C:Pfad\versendet
goto START
REM Script Springpunkt um Das Script ohne Aktion zu Beenden
:ENDE
exit
Mit diesem Beispiel bekomme ich aber drei Emails und zwar für jeden Dokumenten typ eine. leider werden aber z.b. die Excel tabellen zusammen genommen und in einem Email geschickt diese sollten aber auch einezeln in seperaten emails versendet werden.
danke für die Hilfe gruss Donald
Ziel ist es das für jede Datei einzeln welche im "ausgangs" ordner landet eine email gesendet wird (per Blat) und sie danach in den ordner "versendet" geschoben wird. wenn keine dateien mehr vorhanden sind ist das Script fertig.
mein Beispiel bis jetzt:
ich habe einen Ordner Ausgang mit folgendem Inhalt
-tabelle1.xlsx
-tabelle2.xlsx
-tabelle3.xlsx
-text.txt
-word.docx
und einen versendet Ordner ohne inhalt
und mein CMD Script :
:START
REM Abfrage gibt es überhaupt Dateien in Ausgangsordner?
if exist C:Pfad\ausgang\*.xlsx goto SEND_EXCEL
if exist C:Pfad\ausgang\*.txt goto SEND_TXT
if exist C:Pfad\ausgang\*.docx goto SEND_WORD
goto ENDE
REM Datei im Email senden und in Versendet - Ordner verschieben + Loop
:SEND_EXCEL
Blat -install Host. meine@email.ch
Blat "C:Pfad\body.txt" -to meine@email.ch -server smtp.server.ch -attach "C:Pfad\ausgang\*.xlsx" -debug -timestamp -log blatSMTPlog.txt -subject "Blat Email-Test Excel"
move C:Pfad\ausgang\*.xlsx C:Pfad\versendet
goto START
:SEND_TXT
Blat -install Host. meine@email.ch
Blat "C:Pfad\body.txt" -to meine@email.ch -server smtp.server.ch -attach "C:Pfad\ausgang\*.txt" -debug -timestamp -log blatSMTPlog.txt -subject "Blat Email-Test TEXT"
move C:Pfad\ausgang\*.txt C:Pfad\versendet
goto START
:SEND_WORD
Blat -install Host. meine@email.ch
Blat "C:Pfad\body.txt" -to meine@email.ch -server smtp.server.ch -attach "C:Pfad\ausgang\*.docx" -debug -timestamp -log blatSMTPlog.txt -subject "Blat Email-Test WORD"
move C:Pfad\ausgang\*.docx C:Pfad\versendet
goto START
REM Script Springpunkt um Das Script ohne Aktion zu Beenden
:ENDE
exit
Mit diesem Beispiel bekomme ich aber drei Emails und zwar für jeden Dokumenten typ eine. leider werden aber z.b. die Excel tabellen zusammen genommen und in einem Email geschickt diese sollten aber auch einezeln in seperaten emails versendet werden.
danke für die Hilfe gruss Donald
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 151653
Url: https://administrator.de/forum/cmd-gibt-es-eine-datei-im-ordner-wenn-ja-dann-bitte-als-anhang-senden-151653.html
Ausgedruckt am: 26.04.2025 um 22:04 Uhr
8 Kommentare
Neuester Kommentar

servus,
das könnte man so umschreiben:
(allerdings auch das ganze noch weiter "eindampfen" - doppelte / dreifache Befehlszeilen, wo nur eine "Variable" variabel ist - kann man schöner bauen)
ungetestet...und ein paar von dir fehlende \ immer bei C:\Pfad\ ergänzt
Gruß
das könnte man so umschreiben:
(allerdings auch das ganze noch weiter "eindampfen" - doppelte / dreifache Befehlszeilen, wo nur eine "Variable" variabel ist - kann man schöner bauen)
:START
REM Abfrage gibt es überhaupt Dateien in Ausgangsordner?
if exist C:\Pfad\ausgang\*.xlsx for %%a in (C:\Pfad\ausgang\*.xlsx) do (
call :SEND_mail "Blat Email-Excel"
move C:\Pfad\ausgang\%%a C:\Pfad\versendet
)
if exist C:\Pfad\ausgang\*.txt for %%a in (C:\Pfad\ausgang\*.txt) do (
call :SEND_mail "Blat Email-Test TEXT"
move C:\Pfad\ausgang\%%a C:\Pfad\versendet
)
if exist C:\Pfad\ausgang\*.docx for %%a in (C:\Pfad\ausgang\*.docx) do (
call :SEND_mail "Blat Email-Test WORD"
move C:\Pfad\ausgang\%%a C:\Pfad\versendet
)
goto ENDE
REM Datei im Email senden und in Versendet - Ordner verschieben + Loop
:SEND_mail
Blat -install Host. meine@email.ch
Blat "C:\Pfad\body.txt" -to meine@email.ch -server smtp.server.ch -attach "C:\Pfad\ausgang\%%a" -debug -timestamp -log blatSMTPlog.txt -subject %1
goto eof
REM Script Springpunkt um Das Script ohne Aktion zu Beenden
:ENDE
exit
Gruß
edit: @bastla
- isch hätt jetzt mal das /f us däm Schläyffsche ruusjetan abba wat de mir mit de if exischd vertelle mägst hädd isch nüschd jerafft
Hallo donald86 und willkommen im Forum, hallo T-Mo!
Nur als Denkanstoß hinsichtlich des "
wird für jede gefundene xlsx-Datei einmal ausgeführt - daher wie oft, wenn keine gefunden wird?
Grüße
bastla
[Edit] @t-mo: OK, Auflösung
: Das "
Nur als Denkanstoß hinsichtlich des "
if exist
": Der "do
"-Teil der Schleifefor %%a in ("C:\Pfad\ausgang\*.xlsx") do
Grüße
bastla
[Edit] @t-mo: OK, Auflösung
if exist
" ist hier schlicht überflüssig, da, wenn es keine xlsx-Dateien gibt, die Schleife ohnehin gleich wieder verlassen wird. [/Edit]
Hallo donald86!
Um tatsächlich für jede einzelne Datei eine eigene Mail zu erhalten, könnte das Ganze (ungetestet) eher so aussehen:
Grüße
bastla
Wenn keine datei gefunden wird soll das script sich beenden wäre die idee.
Dein "goto ENDE
" sorgt ja ohnehin dafür ...Um tatsächlich für jede einzelne Datei eine eigene Mail zu erhalten, könnte das Ganze (ungetestet) eher so aussehen:
:START
Blat -install Host. meine@email.ch
for %%a in (C:\Pfad\ausgang\*.xlsx) do (
call :SEND_mail "Blat Email-Excel" "%%a"
move "%%a" "C:\Pfad\versendet\"
)
for %%a in (C:\Pfad\ausgang\*.txt) do (
call :SEND_mail "Blat Email-Test TEXT" "%%a"
move "%%a" "C:\Pfad\versendet\"
)
for %%a in (C:\Pfad\ausgang\*.docx) do (
call :SEND_mail "Blat Email-Test WORD" "%%a"
move "%%a "C:\Pfad\versendet\"
)
goto ENDE
REM Datei im Email senden und in Versendet - Ordner verschieben + Loop
:SEND_mail
Blat "C:\Pfad\body.txt" -to meine@email.ch -server smtp.server.ch -attach %2 -debug -timestamp -log blatSMTPlog.txt -subject %1
goto :eof
REM Script Springpunkt um Das Script ohne Aktion zu Beenden
:ENDE
::exit ist unnötig
bastla
Hallo donald86!
Mehr dazu:
Grüße
bastla
wofür steht jetz den das "for %%a" genau?
Damit wird jede zum Muster in der Klammer passende Datei (mit ihrem vollständigen Pfad) als "%%a" zur Verfügung gestellt - es kann aber nur im "do
"-Teil der Schleife unter dieser Variablen darauf zugegriffen werden, weshalb sie beim Aufruf des Unterprogramms ":SEND_mail" als (zweiter) Parameter übergeben (und in ":SEND_mail" als %2 übernommen) werden muss ...Mehr dazu:
for /?
Grüße
bastla