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, 3728 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
Windows 7
Liste abarbeiten mit fiktiven array
gelöst Frage von mavericklpWindows 72 Kommentare

Moin moin zusammen hätte da mal wieder nen problem bei einer batch verarbeitung. Und zwar benutze ich Acronis zum ...

Batch & Shell

Powershell - Ausführbare Datei mit Parametern starten

gelöst Frage von DaniBatch & Shell13 Kommentare

Guten Morgen zusammen, ich versuche aus einem Skript heraus eine Anwendung mit Parametern zu starten. Bei der Ausführung erhalte ...

Batch & Shell

For f - In vielen Dateien Komma durch Punkt ersetzen

gelöst Frage von alleedxBatch & Shell2 Kommentare

Hallo zusammen, ich bräuchte ein wenig Hilfe bei der Erstellung einer Batch Datei. Sie soll in einem Ordner liegen ...

Microsoft

EXE Datei mit Parametern öffnen (ohne Umweg mit einer Verknüpfung)

Frage von paupau90Microsoft8 Kommentare

Hallo zusammen, ich habe eine EXE Datei und würde diese gerne mit einigen Parametern aufrufen. Ich würde das gerne ...

Neue Wissensbeiträge
Internet

Europa baut Zensurinfrastruktur auf: EU-Parlament stimmt für Upload-Filter, Leistungsschutzrecht und gegen KI-Forschung

Information von Frank vor 6 StundenInternet

Eine sehr schlechte Entscheidungen für die Zukunft Europas ist gefallen: Der Rechtsausschuss im EU-Parlament stimmte heute morgen in einer ...

Windows 10

Mikrofon von Headset geht nach Update auf Windows 10 1803 nicht mehr

Tipp von Deepsys vor 2 TagenWindows 102 Kommentare

Ich verwende ein Plantronics Headset das per USB mit dem Windows 10 PC verbunden ist. Damit kann ich auch ...

Video & Streaming

Ruckelfreies Fernsehen auf Smartphone oder Tablet - in SD oder gar HD - Eine Alternative zum Fritz DVB-C Receiver

Anleitung von power-user vor 2 TagenVideo & Streaming9 Kommentare

Wer kennt das nicht: Man möchte gemütlich auf dem Balkon sitzen und vielleicht grillen und dabei das WM-Spiel gucken ...

Erkennung und -Abwehr
Trendmicro WFBS 10 ist in deutsch verfügbar!
Tipp von VGem-e vor 3 TagenErkennung und -Abwehr4 Kommentare

Servus Kollegen, downloadbar unter

Heiß diskutierte Inhalte
Windows 7
Windows 7 Benutzer wechsel nicht möglich
gelöst Frage von OSelbeckWindows 727 Kommentare

Hallo, ich habe hier einen Windows 7 Rechner, der in der Domäne war. Jetzt passiert beim starten, das ich ...

Windows Installation
Adobe Reader noch notwendig?
gelöst Frage von EitieOSWindows Installation26 Kommentare

Muss ich mir noch die Arbeit machen und den Adobe Reader installieren und aktuell halten, wenn doch in Win10 ...

Instant Messaging
Whats App Business am PC einsetzen
Frage von thomasreischerInstant Messaging22 Kommentare

Hallo zusammen, wir würden demnächst gerne WhatsApp Business verwenden um den Kontakt zwischen Kunden und Mitarbeitern zu erleichtern. Natürlich ...

Festplatten, SSD, Raid
RAID auflösen Synology DS213j!
gelöst Frage von Hendrik2586Festplatten, SSD, Raid18 Kommentare

Guten Morgen meine Lieben! :) Diese Frage wird sich sicherlich schon der ein oder andere gestellt haben. Es geht ...