Befüllte dynamische Arrayvariablen ausgeben an externe Programme wie z.B. Mailprogramme
Hallo zusammen,
ich hoffe ihr könnt mir helfen.
Ich versuche ein Skript zu schreiben welches mir alle Zeilen einer Textdatei einliest und diese mir dann weiterleitet an externe Programme wie z.B. hier das Mailprogramm Blat.
Ich lies jede Zeile in ein dynamisch erstellen Array (Ok. Arrays gibt es nicht in Batch aber ich kenn sowas von C++).
Dadurch habe ich jede Zeile der Datei in der Variable entry[!c!].
Das klappt soweit.
Ich habe auch den Schleifenzählerstand als Variable c.
Jetzt muss ich dies nur weitergeben als Text in den Befehl vom Emailprogramm (C:\Batch\blat ....)
Ich hab keine Lust darauf alle möglichen dynamischen Variablen zu erstellen und die noch zu überprüfen auf NULL.
Das sollte doch auch anderst gehen.
Könnte ich daraus nicht eine Schleife bilden die mir die exakte Anzahl der Variablen entry in die Zeile (siehe unten) einfügt mit echo entry[1]. Eventuell mit Zeilenumbruch usw, wie zu sehen vor der Befehlszeile
set c=0
C:\Batch\blat
Ich hoffe ihr könnt mir irgendwie helfen.
Danke schonmal.
Gruß
Bernd
Hier das Skript:
[Edit Biber] Codeformatierung nachgetragen. [/Edit]
ich hoffe ihr könnt mir helfen.
Ich versuche ein Skript zu schreiben welches mir alle Zeilen einer Textdatei einliest und diese mir dann weiterleitet an externe Programme wie z.B. hier das Mailprogramm Blat.
Ich lies jede Zeile in ein dynamisch erstellen Array (Ok. Arrays gibt es nicht in Batch aber ich kenn sowas von C++).
Dadurch habe ich jede Zeile der Datei in der Variable entry[!c!].
Das klappt soweit.
Ich habe auch den Schleifenzählerstand als Variable c.
Jetzt muss ich dies nur weitergeben als Text in den Befehl vom Emailprogramm (C:\Batch\blat ....)
Ich hab keine Lust darauf alle möglichen dynamischen Variablen zu erstellen und die noch zu überprüfen auf NULL.
Das sollte doch auch anderst gehen.
Könnte ich daraus nicht eine Schleife bilden die mir die exakte Anzahl der Variablen entry in die Zeile (siehe unten) einfügt mit echo entry[1]. Eventuell mit Zeilenumbruch usw, wie zu sehen vor der Befehlszeile
set c=0
C:\Batch\blat
Ich hoffe ihr könnt mir irgendwie helfen.
Danke schonmal.
Gruß
Bernd
Hier das Skript:
@echo off & setlocal enabledelayedexpansion
set c = 0
set z = 0
FOR /F %%i in (C:\Skripte\ERP\doppelte_Bestellungen_vorhanden.csv) do (
set /A c=c+1
set entry[!c!]=%%i
)
echo %c% Zeilen sind ausgelesen worden
echo.--------------------------------------------------
echo "ACHTUNG folgende Bestellungen sind fehlerhaft!!!"
echo --------------------------------------------------
echo %entry[1]%
echo %entry[2]%
echo %entry[3]%
echo %entry[4]%
echo %entry[5]%
echo %entry[6]%
echo --------------------------------------------------
set c=0
C:\Batch\blat -f doppelte_bestellungen@contoso.de -to abt_it@contoso.de -s "ACHTUNG!!! Folgende Bestellungen sind doppelt HIER SOLLTEN DIE VARIABLEN STEHEN" -server mail.contoso.com -attacht C:\Skripte\ERP\doppelte_Bestellungen_vorhanden.csv -body "Gruss das automatische Kontrollsystem"
[Edit Biber] Codeformatierung nachgetragen. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 298636
Url: https://administrator.de/forum/befuellte-dynamische-arrayvariablen-ausgeben-an-externe-programme-wie-z-b-mailprogramme-298636.html
Ausgedruckt am: 10.05.2025 um 04:05 Uhr
7 Kommentare
Neuester Kommentar
Hallo Bernd,
in Batchscript kannst Du alle Variablen, die mit den gleichen Zeichen beginnen, mit dem
Wenn Du das in den Kopf einer
Könnte Dir evtl. helfen: Tutorial zur FOR-Schleife
Gruß
Friemler
in Batchscript kannst Du alle Variablen, die mit den gleichen Zeichen beginnen, mit dem
SET
-Befehl ausgeben lassen, in Deinem Fall alsoset entry[
Wenn Du das in den Kopf einer
FOR
-Schleife packst und die Ausgabe parst, kommst Du an die Werte und kannst nebenbei auch die Anzahl der Werte zählen:set /a CntVal=0
for /f "tokens=1* delims==" %%a in ('set entry[') do (
rem %%a enthält den Namen der Variable
rem %%b enthält den Wert der Variable
rem So kannst Du die Werte zählen, auch ohne enabledelayedexpansion
set /a CntVal+=1
)
Könnte Dir evtl. helfen: Tutorial zur FOR-Schleife
Gruß
Friemler

Powershell:
Fertsch. Kein altes Blat & Co dat macht doch heute keiner mehr 
fk
$body = @"
--------------------------------------------------
"ACHTUNG folgende Bestellungen sind fehlerhaft!!!"
--------------------------------------------------
$(gc 'C:\Skripte\ERP\doppelte_Bestellungen_vorhanden.csv' | out-String)
"@
Send-MailMessage -From "user@domain.de" -to "empfaenger@domain.de" -Subject "Fehlerhafte Bestellungen" -body $body " -SmtpServer smtp.domain.de -Credential (New-Object PSCredential("USERNAME",(ConvertTo-SecureString 'PASSWORD' -AsPlainText -Force))) -UseSSL
fk

Zitat von @heiberbn:
Hi Flachkoepper,
ich hab das versucht aber leider ohne Erfolg.
Mal ne kurze Frage:
$(gc .....) -> Was soll das genau machen? Zieht der damit sich die Daten in eine Variable mit allen Zeilen?
Er liest die Textdatei aus und schreibt sie in den Body (hatte da noch was vergessen das das Zeilenarray in einen String konvertiert wird, ist oben korrigiert)Hi Flachkoepper,
ich hab das versucht aber leider ohne Erfolg.
Mal ne kurze Frage:
$(gc .....) -> Was soll das genau machen? Zieht der damit sich die Daten in eine Variable mit allen Zeilen?
ich hab mal versucht den $Body mit einem echo %$Body% auszulesen. Es kommt eine Fehlermeldung "der Befehl $Body ist entweder falsch geschrieben oder konnte nicht gefunden werden.
Nee das kann nich, du weist aber schon das das Powershell und nicht Batch ist ??!!Muss man nicht die Variable $Body erst mit einem set deklaireren? Hab ich auch mal getestet. Ohne Erfolg.
s.o. das ist POWERSHELL kein Batch !Ich bin bald soweit zu sagen das ich die CSV-Datei als Anhang verschicke anstatt die Ergebnisse direkt in der Mail zu platzieren.
Es ist doch nicht so einfach wie gedacht
.
Doch, dafür hat das CMDLet Send-Mailmessage den Parameter -Attachments Es ist doch nicht so einfach wie gedacht
Findest du hier im Forum etliche Beispiele und die Doku zu Send-Mailmessage sagts die ebenfalls.