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, 3732 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
Drucker und Scanner
HP-MF-Drucker per Fax angreifbsr
Information von Lochkartenstanzer vor 19 StundenDrucker und Scanner

Endlich eine sinnvolle Verwendung für Faxe: Damit kann man offensichtlich den Drucker übernehmen. lks

Router & Routing

Das pfSense Buch ist jetzt für jeden kostenlos zu beziehen

Tipp von magicteddy vor 1 TagRouter & Routing2 Kommentare

Bisher war das Buch nur für zahlende Unterstützer verfügbar, jetzt steht für Jedermann kostenlos zur Verfügung. Siehe auch The ...

Firewall

Möglicherweise neue Sicherheitslücke in Mikrotik-Firmware

Information von LordGurke vor 3 TagenFirewall3 Kommentare

Hallo zusammen, vor ein paar Monaten gab es ja bereits eine Sicherheitslücke in der Firmware von Mikrotik-Routern, über welche ...

Erkennung und -Abwehr
Rechner hacken mit Cortana, auch Remote
Information von Lochkartenstanzer vor 4 TagenErkennung und -Abwehr3 Kommentare

heise berichtet über den Vortrag von der Blackhat Open Sesame: Picking Locks with Cortana. Einige Fehler sind schon gefixt, ...

Heiß diskutierte Inhalte
Windows Netzwerk
Performance bei Terminalserver
Frage von azizalexanderWindows Netzwerk20 Kommentare

Hallo zusammen, Ich wusste nicht in welches Thema meine Frage passt ich Bitte um Vergebung falls ich hier falsch ...

Exchange Server
Exchange 2013 - Unable to Relay nach extern, SuperMailer
Frage von leon123Exchange Server16 Kommentare

Hallo zusammen, ich brauch mal wieder eure Hilfe. Ich beschäftige mich gerade mit dem SuperMailer und erhalte vom Exchange ...

CPU, RAM, Mainboards
Xeon E5620: noch schnell genug?
Frage von ahussainCPU, RAM, Mainboards15 Kommentare

Hallo allerseits, ich habe die Möglichkeit, aus Restbeständen einen Tower mit Xeon E5620 CPU und 24 GB RAM zu ...

Peripheriegeräte
Steckdose(nleiste) mit Schwellwert für off und mit externem Taster
Frage von ahstaxPeripheriegeräte15 Kommentare

Hallo, ich suche eine Steckdose oder Steckdosenleiste mit externem Taster und Schwellwerterkennung. Zu realisieren ist folgendes: Ein PC soll ...