Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Parameter aus Datei in For /f abarbeiten

Frage Entwicklung Batch & Shell

Mitglied: stoner

stoner (Level 1) - Jetzt verbinden

20.08.2006, aktualisiert 21.08.2006, 3698 Aufrufe, 4 Kommentare

Hallo,

ich habe eine Batch in der u.a. Paramter aus einer Datei eingelesen werden sollten:


01.
For /F "tokens=2,3 delims=|" %%a in (getgez.ini) do ( 
02.
    set IP=%%a&& set sys=%%b 
03.
     IF "%IP%"=="EOF" goto wait 
04.
     tftp %IP% get gez.txt gez%sys%.gez >> transfer.log 
05.
     IF not exist gez%sys%.gez start eamerror.exe && ECHO TK-Anlage unter %IP% nicht erreicht.>>transfer.log 
06.
     call gez2db.bat gez%sys%.gez )
in der GETGEZ.ini steht folgendes:
01.
SYS1|192.168.0.90|110 
02.
SYS2|192.168.0.91|120 
03.
SYS3|192.168.0.92|130 
04.
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.):

01.
set IP=192.168.0.90  && set sys=110 
02.
 IF "192.168.0.90" == "EOF" goto wait 
03.
 tftp 192.168.0.90 get gez.txt gez110.gez  1>>transfer.log 
04.
 IF not exist gez110.gez start eamerror.exe   && ECHO TK-Anlage unter 192.168.0.90 nicht erreicht. 1>>transfer.log 
05.
 call gez2db.bat gez110.gez 
06.
... 
07.
set IP=192.168.0.91  && set sys=120 
08.
 IF "192.168.0.90" == "EOF" goto wait 
09.
 tftp 192.168.0.90 get gez.txt gez110.gez  1>>transfer.log 
10.
 IF not exist gez110.gez start eamerror.exe   && ECHO TK-Anlage unter 192.168.0.90 nicht erreicht. 1>>transfer.log 
11.
 call gez2db.bat gez110.gez 
12.
... 
13.
set IP=192.168.0.92  && set sys=130 
14.
 IF "192.168.0.90" == "EOF" goto wait 
15.
 tftp 192.168.0.90 get gez.txt gez110.gez  1>>transfer.log 
16.
 IF not exist gez110.gez start eamerror.exe   && ECHO TK-Anlage unter 192.168.0.90 nicht erreicht. 1>>transfer.log 
17.
 call gez2db.bat gez110.gez 
18.
... 
19.
nächster ABlauf: 
20.
... 
21.
set IP=%a  && set sys=%b 
22.
 IF "EOF" == "EOF" goto wait 
23.
 tftp EOF get gez.txt gez000.gez  1>>transfer.log 
24.
 IF not exist gez000.gez start eamerror.exe   && ECHO TK-Anlage unter EOF nicht erreicht. 1>>transfer.log 
25.
 call gez2db.bat gez000.gez 
26.
27.
 
28.
X:\Downloads\K+B\easyAM\HP3000\test>( 
29.
set IP=192.168.0.90  && set sys=110 
30.
 IF "EOF" == "EOF" goto wait 
31.
 tftp EOF get gez.txt gez000.gez  1>>transfer.log 
32.
 IF not exist gez000.gez start eamerror.exe   && ECHO TK-Anlage unter EOF nicht erreicht. 1>>transfer.log 
33.
 call gez2db.bat gez000.gez 
34.
)
Ich habe schon alles mögliche rumprobiert und gesucht, leider ohne Erfolg.
Weis jemand hier Abhilfe?

Besten Dank schon mal,

Frank
Mitglied: Biber
20.08.2006 um 15:16 Uhr
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.

01.
::--- Solution1.bat.....mit verzögerter Variablenauflösung 
02.
@echo off & setlocal EnableDelayedExpansion 
03.
For /F "tokens=2,3 delims=|" %%a in (getgez.ini) do ( 
04.
    set IP=%%a&& set sys=%%b 
05.
     IF !%IP%!=="EOF" goto wait 
06.
     tftp !IP! get gez.txt gez!sys!.gez >> transfer.log 
07.
     IF not exist gez!sys!.gez start eamerror.exe && ECHO TK-Anlage unter !IP! nicht erreicht.>>transfer.log 
08.
     call gez2db.bat gez!sys!.gez ) 
01.
@echo off & setlocal 
02.
For /F "tokens=2,3 delims=|" %%a in (getgez.ini) do call :subroutine %%a %%b 
03.
goto :eof 
04.
 
05.
:subroutine 
06.
    set IP=%1 && set sys=%2 
07.
     IF "%IP%"=="EOF" goto wait 
08.
     tftp %IP% get gez.txt gez%sys%.gez >> transfer.log 
09.
     IF not exist gez%sys%.gez start eamerror.exe && ECHO TK-Anlage unter %IP% nicht erreicht.>>transfer.log 
10.
     call gez2db.bat gez%sys%.gez  
11.
goto :eof
Hope That Helps
Biber
Bitte warten ..
Mitglied: stoner
20.08.2006 um 20:11 Uhr
Hi Biber,

besten Dank (wieder mal ) für deine Hilfe.
Auf DelayedExpansion bin ich vorher schon aufmerksam geworden, leider klappt das nicht.
Darauf dass ich über CALL arbeiten könnte ist mir selber erst zu spät eingefallen.
Dank deiner Hilfe habe ich es folgendermassen gelöst:

01.
For /F "tokens=2,3 delims=|" %%a in (getgez.ini) do call :getsys %%a %%b 
02.
goto :wait 
03.
:getsys 
04.
set IP=%1&& set sys=%2 
05.
IF "%IP%"=="EOF" goto wait 
06.
tftp %IP% get gez.txt gez%sys%.gez >> transfer.log 
07.
IF not exist gez%sys%.gez ( 
08.
      start eamerror.exe && ECHO TK-Anlage unter %IP% nicht erreicht.>>transfer.log 
09.
 ) ELSE ( 
10.
     call gez2db.bat gez%sys%.gez 
11.
12.
goto :eof
es klappt soweit, und ich hoffe dass ich sonst auch keinen Wurm hineingebracht habe.

Besten Dank,

Frank
Bitte warten ..
Mitglied: Biber
21.08.2006 um 04:28 Uhr
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
01.
set IP=%%a&& set sys=%%b
stehen. Muss dort natürlich
01.
set IP=%1 && set sys=%2
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
Bitte warten ..
Mitglied: stoner
21.08.2006 um 19:54 Uhr
Danke nochmal,

Fall gelöst

Ciao
Frank
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Text-Datei auslesen und Inhalt als Parameter übergeben (1)

Frage von aubm2013 zum Thema Batch & Shell ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

IDE & Editoren
USB STICK Datei AUTOMATISCH beim anschliessen auf fremden PC öffnen (9)

Frage von Jwanner83 zum Thema IDE & Editoren ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...