Parameter aus Datei in For /f abarbeiten
Hallo,
ich habe eine Batch in der u.a. Paramter aus einer Datei eingelesen werden sollten:
in der GETGEZ.ini steht folgendes:
Leider klappt das so nicht ganz. Beim starten der bat werden die Parameter ausgelesen,set IP und set sys zeigen bei jedem Ablauf jeweils die richtige IP und Nummer, jedoch wird pro Ablauf immer nur der erste oder letzte Parameter in den Variablen genutzt (zuerst 192.168.0.90, dann EOF usw.):
Ich habe schon alles mögliche rumprobiert und gesucht, leider ohne Erfolg.
Weis jemand hier Abhilfe?
Besten Dank schon mal,
Frank
ich habe eine Batch in der u.a. Paramter aus einer Datei eingelesen werden sollten:
For /F "tokens=2,3 delims=|" %%a in (getgez.ini) do (
set IP=%%a&& set sys=%%b
IF "%IP%"=="EOF" goto wait
tftp %IP% get gez.txt gez%sys%.gez >> transfer.log
IF not exist gez%sys%.gez start eamerror.exe && ECHO TK-Anlage unter %IP% nicht erreicht.>>transfer.log
call gez2db.bat gez%sys%.gez )
in der GETGEZ.ini steht folgendes:
SYS1|192.168.0.90|110
SYS2|192.168.0.91|120
SYS3|192.168.0.92|130
Ende|EOF|000
Leider klappt das so nicht ganz. Beim starten der bat werden die Parameter ausgelesen,set IP und set sys zeigen bei jedem Ablauf jeweils die richtige IP und Nummer, jedoch wird pro Ablauf immer nur der erste oder letzte Parameter in den Variablen genutzt (zuerst 192.168.0.90, dann EOF usw.):
set IP=192.168.0.90 && set sys=110
IF "192.168.0.90" == "EOF" goto wait
tftp 192.168.0.90 get gez.txt gez110.gez 1>>transfer.log
IF not exist gez110.gez start eamerror.exe && ECHO TK-Anlage unter 192.168.0.90 nicht erreicht. 1>>transfer.log
call gez2db.bat gez110.gez
...
set IP=192.168.0.91 && set sys=120
IF "192.168.0.90" == "EOF" goto wait
tftp 192.168.0.90 get gez.txt gez110.gez 1>>transfer.log
IF not exist gez110.gez start eamerror.exe && ECHO TK-Anlage unter 192.168.0.90 nicht erreicht. 1>>transfer.log
call gez2db.bat gez110.gez
...
set IP=192.168.0.92 && set sys=130
IF "192.168.0.90" == "EOF" goto wait
tftp 192.168.0.90 get gez.txt gez110.gez 1>>transfer.log
IF not exist gez110.gez start eamerror.exe && ECHO TK-Anlage unter 192.168.0.90 nicht erreicht. 1>>transfer.log
call gez2db.bat gez110.gez
...
nächster ABlauf:
...
set IP=%a && set sys=%b
IF "EOF" == "EOF" goto wait
tftp EOF get gez.txt gez000.gez 1>>transfer.log
IF not exist gez000.gez start eamerror.exe && ECHO TK-Anlage unter EOF nicht erreicht. 1>>transfer.log
call gez2db.bat gez000.gez
)
X:\Downloads\K+B\easyAM\HP3000\test>(
set IP=192.168.0.90 && set sys=110
IF "EOF" == "EOF" goto wait
tftp EOF get gez.txt gez000.gez 1>>transfer.log
IF not exist gez000.gez start eamerror.exe && ECHO TK-Anlage unter EOF nicht erreicht. 1>>transfer.log
call gez2db.bat gez000.gez
)
Ich habe schon alles mögliche rumprobiert und gesucht, leider ohne Erfolg.
Weis jemand hier Abhilfe?
Besten Dank schon mal,
Frank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 38359
Url: https://administrator.de/forum/parameter-aus-datei-in-for-f-abarbeiten-38359.html
Ausgedruckt am: 29.04.2025 um 11:04 Uhr
4 Kommentare
Neuester Kommentar
Moin stoner,
ist wieder ein Fall optischer Täuschung.
Das, was in Deinem Skript wie mehrere Zeilen aussieht, ist für den CMD-Interpreter eine einzige.
Entsprechend werden die Variablen in der Klammer nach dem "FOR /F" nur einmal aufgelöst - und haben nicht den Wert, den Du erwartest.
Lösung über "Setlocal EnableDelayedExpansion" oder über zusätzlich Aufruf eines geCALLten Blocks.
Die Forumssuche nach DelayedExpansion liefert Dir einpaar ähnlich Beispiele.
Hope That Helps
Biber
ist wieder ein Fall optischer Täuschung.
Das, was in Deinem Skript wie mehrere Zeilen aussieht, ist für den CMD-Interpreter eine einzige.
Entsprechend werden die Variablen in der Klammer nach dem "FOR /F" nur einmal aufgelöst - und haben nicht den Wert, den Du erwartest.
Lösung über "Setlocal EnableDelayedExpansion" oder über zusätzlich Aufruf eines geCALLten Blocks.
Die Forumssuche nach DelayedExpansion liefert Dir einpaar ähnlich Beispiele.
::--- Solution1.bat.....mit verzögerter Variablenauflösung
@echo off & setlocal EnableDelayedExpansion
For /F "tokens=2,3 delims=|" %%a in (getgez.ini) do (
set IP=%%a&& set sys=%%b
IF !%IP%!=="EOF" goto wait
tftp !IP! get gez.txt gez!sys!.gez >> transfer.log
IF not exist gez!sys!.gez start eamerror.exe && ECHO TK-Anlage unter !IP! nicht erreicht.>>transfer.log
call gez2db.bat gez!sys!.gez )
@echo off & setlocal
For /F "tokens=2,3 delims=|" %%a in (getgez.ini) do call :subroutine %%a %%b
goto :eof
:subroutine
set IP=%1 && set sys=%2
IF "%IP%"=="EOF" goto wait
tftp %IP% get gez.txt gez%sys%.gez >> transfer.log
IF not exist gez%sys%.gez start eamerror.exe && ECHO TK-Anlage unter %IP% nicht erreicht.>>transfer.log
call gez2db.bat gez%sys%.gez
goto :eof
Hope That Helps
Biber
Thx, stoner,
für das Posten Deiner Lösung.
Ich habe eben oben in meinem Kommentar nochmal einen Copy/paste-Fehler korrigiert.
Hatte im zweiten Beispiel auch
stehen. Muss dort natürlich
heißen. Hast Du, stoner aber ja vor mir gefunden und berichtigt. 
Copy & Paste ist der größte Qualitätskiller bei der Programmierung - leider setze ich mich auch manchmal darüber hinweg
Grüße
Biber
für das Posten Deiner Lösung.
Ich habe eben oben in meinem Kommentar nochmal einen Copy/paste-Fehler korrigiert.
Hatte im zweiten Beispiel auch
set IP=%%a&& set sys=%%b
set IP=%1 && set sys=%2
Copy & Paste ist der größte Qualitätskiller bei der Programmierung - leider setze ich mich auch manchmal darüber hinweg
Grüße
Biber