heiberbn
Goto Top

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:

@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]

Content-Key: 298636

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

Printed on: April 25, 2024 at 19:04 o'clock

Member: Friemler
Friemler Mar 09, 2016 updated at 16:56:17 (UTC)
Goto Top
Hallo Bernd,

in Batchscript kannst Du alle Variablen, die mit den gleichen Zeichen beginnen, mit dem SET-Befehl ausgeben lassen, in Deinem Fall also
set 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
Member: heiberbn
heiberbn Mar 10, 2016 at 07:16:27 (UTC)
Goto Top
Hallo Friemler,

das hat schonmal geklappt. Danke.
Nur jetzt wird pro Schleifenlauf der einzelne Wert angezeigt. Ich sollte aber alle Werte gesamt auf einmal in einem Befehl haben.

C:\Batch\blat -f doppelte_bestellungen@contoso.de -to abt_it@contoso.de -s "ACHTUNG!!! Folgende Bestellungen sind doppelt

!!!!!!!!!!!!!!!!!!!!!!!!!!HIER SOLLTEN ALLE WERTE STEHEN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"

-server mail.contoso.com -attacht C:\Skripte\ERP\doppelte_Bestellungen_vorhanden.csv -body "Gruss das automatische Kontrollsystem"

Gruß

Bernd
Member: heiberbn
heiberbn Mar 11, 2016 at 12:18:05 (UTC)
Goto Top
Kann mir sonst irgendeiner vom Forum irgendwie helfen?

Ich wäre so dankbar für eure Hilfe!!!
Mitglied: 126919
126919 Mar 11, 2016, updated at Mar 14, 2016 at 08:06:40 (UTC)
Goto Top
Powershell:
$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  
Fertsch. Kein altes Blat & Co dat macht doch heute keiner mehr face-wink

fk
Member: Biber
Biber Mar 11, 2016 at 12:43:16 (UTC)
Goto Top
[OT]

Zitat von @126919:

Fertsch. Kein altes Blat & Co dat macht doch heute keiner mehr face-wink
Doch, manche unterschreiben sogar noch mit "Gruss das automatische Kontrollsystem"

Eine der gelungensten Persönlichkeitsstörungen seit "Ich bin zwei Öltanks."

Schönes Wochenende
Biber
[/OT]
Member: heiberbn
heiberbn Mar 14, 2016 at 08:05:32 (UTC)
Goto Top
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.

Muss man nicht die Variable $Body erst mit einem set deklaireren? Hab ich auch mal getestet. Ohne Erfolg.

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

Aber das mit dem SendMailMessage ist ne super Alternative!! Danke für den Tipp.
Mitglied: 126919
126919 Mar 14, 2016 updated at 08:12:16 (UTC)
Goto Top
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)

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 face-sad.
Doch, dafür hat das CMDLet Send-Mailmessage den Parameter -Attachments face-smile

Findest du hier im Forum etliche Beispiele und die Doku zu Send-Mailmessage sagts die ebenfalls.