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, 3734 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
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 ...

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

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
Ausbildung

Linux-Ausstieg in Niedersachsen - Windows statt Bugfix

Information von StefanKittel vor 2 TagenAusbildung35 Kommentare

Sind ja nur Steuergelder

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 4 TagenSpeicherkarten5 Kommentare

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 4 TagenSicherheit1 Kommentar

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 5 TagenHardware4 Kommentare

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Passwortwechsel Zeitpunkt festlegen
Frage von Looser27Windows Userverwaltung27 Kommentare

Guten Morgen liebe Kolleginnen und Kollegen, da es eine Userin in meinem Urlaub geschafft hat, sich vom AD vollständig ...

Windows Server
Probleme im AD am Außenstandort
gelöst Frage von emeriksWindows Server19 Kommentare

Hi, wir haben ein Problem mit AD und GPO am Außenstandort und ich stehe momentan mächtig auf dem Schlauch. ...

Switche und Hubs
POE-Switche
gelöst Frage von MiStSwitche und Hubs13 Kommentare

Guten Morgen, ich überlege ob ich in unserem Netzwerk die aktuellen Switche (D-LINK DGS-1210-28) durch PoE-Switche ersetzen soll. Der ...

Windows Server
DNS - Bedingte Weiterleitung
gelöst Frage von m8ichaelWindows Server11 Kommentare

Guten Tag zusammen, ich stehe gerade bzgl. einer bedingten DNS-Weiterleitung etwas auf dem Schlauch: Ich möchte, dass für bestimmte ...