Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: stoner

stoner (Level 1) - Jetzt verbinden

20.08.2006, aktualisiert 21.08.2006, 3736 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 ..
Ähnliche Inhalte
Installation
Inno Setup f. Accessanwendung
Frage von Peter1948Installation1 Kommentar

Guten Morgen! Ich würde Unterstützung bei Inno Setup benötigen. Die Anwendung die Verpackt werden soll ist Access 2013. 1. ...

ISDN & Analoganschlüsse
TAE F-Stecker Übergang verlegekabel
Frage von itse92ISDN & Analoganschlüsse7 Kommentare

Hallo zusammen, ich haben folgendes "Problem". Ich bekomme meinen IP-Anschluss. Meine TAE-Dose ist leider ein paar Räume weiter entfernt, ...

Mac OS X
Mac ports -f activate port
Frage von AlchimedesMac OS X

Hallo, Ich nutze unter MacOs ports. Nachdem Sierra ,Xcode und Commandline-Tools Updates wurden ports deactiviert. Die bisherige bekannte Vorgangsweise ...

Microsoft
Freeware Bild Viewer f. Unternehmen
Frage von firewood2015Microsoft6 Kommentare

Hallo, unsere User möchten die Windows eigenen Bildbetrachter und Irfanview nicht benutzen. Sie möchten Bilder einfach ansehen und formatiert ...

Neue Wissensbeiträge
iOS
WatchChat für Whatsapp
Tipp von Criemo vor 2 TageniOS3 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor !!!
Tipp von Criemo vor 3 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Off Topic
Avengers 4: Endgame - Erster Trailer
Information von Frank vor 5 TagenOff Topic2 Kommentare

Ich weiß es ist Off Topic, aber ich freue mich auf diesen Film und vielleicht geht es anderen hier ...

Webbrowser
Microsoft bestätigt Edge mit Chromium-Kern
Information von Frank vor 5 TagenWebbrowser5 Kommentare

Microsoft hat nun in seinem Blog bestätigt, dass die nächste Edge Version kein EdgeHTML mehr für die Darstellung benutzen ...

Heiß diskutierte Inhalte
Hosting & Housing
VMware VM mit über 1TB RAM für S4HANA
gelöst Frage von Leo-leHosting & Housing24 Kommentare

Hallo zusammen, wer hat Erfahrng und kann mir einen Tipp zum sizing von S4HANA Systemen geben? Wir möchten, zunächst ...

LAN, WAN, Wireless
WLAN und Ausmessung - Eine Glaubensfrage?
Frage von ptr2brainLAN, WAN, Wireless23 Kommentare

Liebe Experten, als Sys-Admin habe ich mir schon öfter die Frage gestellt, ob es sich beim Thema WLAN und ...

Drucker und Scanner
SW-Laserdrucker mit sechs Papierfächern gesucht
Frage von MOS6581Drucker und Scanner19 Kommentare

Moin, zur Abwechslung mal eine sonderbare Anforderung :) Ich suche einen S/W Laserdrucker (kein MFP), der sechs Papierfächer bzw. ...

Virtualisierung
Gebrauchte Server Hardware als Virtualisierungs-"Spielwiese"?
Frage von NixVerstehenVirtualisierung19 Kommentare

Einen wunderschönen guten Morgen zusammen, ich möchte mich gerne etwas tiefer mit dem Thema Virtualisierung beschäftigen und dazu ein ...