For-Schleife .txt Datei und 3 Variablen speichern

Mitglied: WulleBier

WulleBier (Level 1) - Jetzt verbinden

23.08.2011, aktualisiert 18.10.2012, 4676 Aufrufe, 22 Kommentare

Hallo zusammen,
ich weiß , dass es schon viele Beiträge zu dem Thema gibt. Leider bin ich aus diesen nicht schlau geworden, sodass ich mein Problem hätte lösen
können.
Allgemein kann man sagen, dass ich noch ein Neuling im Bereich Batch-Programmierung bin.

Ich möchte in einem Teil meiner Batch-Datei mit einer For-Schleife .txt Dateien lesen die so aufgebaut sind:
(Anfang)
....
....(Beschreibung)....
....
....
/variable1,variable2,variable3 (quasi die letzte Zeile der .txt)

(Ende)




Sobald eine Zeile mit "/ " beginnt sollen die auf den "/ " folgenden Wörter in 3 Variablen gespeichert werden. Getrennt werden diese Wörter durch Kommas.


Ich habe schon einen kleinen Ansatz der allerdings nicht der Rede Wert sein dürfte:



,weiter weiß ich nicht^^
Mitglied: Skyemugen
23.08.2011 um 10:36 Uhr
Aloha,

hast du es schon mit
versucht? ... deine delims=-Anordnung ist, nebenbei bemerkt, vollkommen fehlerhaft (und dabei haben wir hier ein so schönes Tutorial zur FOR-Schleife)

greetz André

P.S.:
quasi die letzte Zeile der .txt
Ist sie es nun oder nicht (dann könnte man auch anders herangehen)?
Bitte warten ..
Mitglied: WulleBier
23.08.2011 um 10:51 Uhr
Servus,

wie gesagt bin ein Neuling.

Wäre diese Andordnung jetzt Richtig??

Kann ich dann nach dem "do" einfach die Variablen setzen? Ungefähr so :

Kannst du mir mal nen Link zu dem Tutorial geben?
Bitte warten ..
Mitglied: bastla
23.08.2011 um 10:52 Uhr
... und Leerzeichen lassen einen Batch vielleicht schöner aussehen, sind aber oft, wie zB hier:
eher kontraproduktiv - sogar, wenn das schließende Anführungszeichen hinzugefügt würde.
Zusatzfrage: Was hast Du mit den Variablen vor - oft ist es nicht nötig, zusätzliche Variablen zu verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
23.08.2011 um 10:53 Uhr
Zitat von @WulleBier:
Servus,
Aloha
wie gesagt bin ein Neuling.
wir lernen alle täglich dazu ;-) face-wink
Wäre diese Andordnung jetzt Richtig??
Batch ist nicht VBS, achte auf unkorrekte Leerzeichen
Kann ich dann nach dem "do" einfach die Variablen setzen? Ungefähr so :
An sich spricht nichts dagegen, wenn du set "geraetename=%%s" etc. verwendest
Kannst du mir mal nen Link zu dem Tutorial geben?
Na sicher (link)

greetz André
Bitte warten ..
Mitglied: WulleBier
23.08.2011 um 10:59 Uhr
Die variablen werden für eine andere .bat Datei benötigt die ich im Verlauf aufrufe.
Sind die benötigten Parameter.

Gruss
WulleBier
Bitte warten ..
Mitglied: 99045
99045 (Level 2)
23.08.2011 um 11:11 Uhr
Zitat von @WulleBier:

Kannst du mir mal nen Link zu dem Tutorial geben?


Den kann man ziemlich einfach auch selbst finden. Man klickt auf der Hauptseite oben links auf "Anleitungen" und gibt dann im Suchfeld "nach einer Anleitung suchen" einfach "For" ein und klickt auf START. Voila, gleich der erste Treffer passt. .-)
Bitte warten ..
Mitglied: bastla
23.08.2011 um 11:11 Uhr
Hallo WulleBier!
Die variablen werden für eine andere .bat Datei benötigt die ich im Verlauf aufrufe.
Das wäre noch nicht notwendiger Weise ein Grund für "eigene" Variablen - Du könntest genausogut
innerhalb der Schleife ausführen - auch, wenn's nur um einen Satz an Werten geht ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
23.08.2011 um 11:33 Uhr
Moin WulleBier,

du bekommst nun gerade kompetente Antworten von zwei geschätzten Mitgliedern, die rein handwerklich so ziemlich alles irgendwie umsetzen.
Ich halte manchmal nicht so viel von einer nur wortwörtlichen Antwort auf die gestellte Frage und bitte dann doch darum, mal zwei Schritt zurückzutreten und den Plan mal mit etwas Distanz anzuschauen.

Bei deinem Vorgehen wird
  • eine Zeile aus einer Textdatei gelesen
  • und der Nutz-Inhalt der Zeile als "Liste" weiterverarbeitet
  • die Elemente dieser "Liste" sollen nun im weiteren Verlauf wieder als namentlich identifizierbare Variablen getrennt werden und einzeln ansprechbar zur Verfügung stehen.

Das sind mir schon zu viele Paradigmenwechsel.
Eine "Liste" hat viele Vorteile - sie kann eine variable Anzahl von Elementen beinhalten und ich kann alle Elemente in einer Schleife durchlaufen
Wenn du aber in deinem Folgeablauf keine flexible Anzahl benötigst, sondern -als Beispiel- IMMER drei Parameter/Variablen, die als %Geraetename%", "%clientname%" und "%Druckername% benötigt werden - dann solltest du in der Text/Konfigdatei nicht eine "Liste mit drei Werten" hinterlegen, sondern drei konkret benannte Werte.

Also den Aufbau in der Textdatei ähnlich konzipieren wie in einer Windows-Ini-Datei.

Grüße
Biber
Bitte warten ..
Mitglied: WulleBier
23.08.2011 um 15:22 Uhr
Servus Biber,

Also das mit der "Liste" habe ich nicht verstanden. Ich speichere die Zeile doch nur in 3 lokalen Variablen ?!

Vielleicht beschreib ich einfach mal mein Problem, dann kann man vielleicht diskutieren ob ich(wir) überhaupt den richtigen Ansatz gewählt haben:

Es geht darum Dateien, die sich lokal auf einem PC unserer Entwickler befinden, möglichst automatisiert (am Besten mit einer Art Skript (um denen die Arbeit zu erleichtern)) auf die Wiki des Betriebes, am besten gleich als Attachments einer Page des Wiki's, zu kopieren. Das hochkopieren in den richtigen Space auf die richtige Page stellt kein Problem dar, dank des Command Line Interface, welches von der Firma welches die Wiki Software herstellt, zur Verfügung gestellt wird (die Software heißt "Confluence" von der Firma Atlassian).

Dieses Tool ermöglicht es einem die Administration des Wikis per Command Shell. Confluence ist übrigens eine Tomcat-WebApplikation.

Unser Ansatz ist nun in jeden Projektordner eine beschreibende .txt Datei zu erstellen, wo angegeben wird in welchem SPACE(var1), auf welcher PAGE(var2) und welche Datei(Pfad(var3)),
benötigt wird. Diese ist vom Entwickler selbst zu editieren.

Ausgehend von diesen 3 Variablen kann ich dann, das CommandLineInterface der WebApplikation aufrufen und jeweilig den Parameter angeben. (Ist auch ein .bat Datei)
Dazu muss man natürlich die richtige Aktion( in dem Fall --action addAttachement) angeben, aber dies ist ja uninteressant.

Ich hoffe ich konnte einigermaßen Beschreiben, mit was ich mich gerade auseinander setzen muss.

gruss David
Bitte warten ..
Mitglied: bastla
23.08.2011 um 15:29 Uhr
Hallo WulleBier!

Wenn Ihr die Textdatei selbst erstellen könnt (wovon ich ursprünglich einmal nicht ausgegangen bin), würde ich sie (ganz in Bibers Sinn) einfach so aufbauen:
Dann genügt im Batch eine einfache Schleife der Art
um alle Variablen (%SPACE%, %PAGE%, %FILE%) samt Werten auszulesen und Letztere Ersteren zuzuweisen ...

Die Angabe von "eol=;" könnte übrigens unterbleiben, wenn Kommentarzeilen mit dem Defaultwert ";" eingeleitet werden - ansonsten ist natürlich auch zB "eol=#" möglich ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
23.08.2011 um 15:47 Uhr
Moin WulleBier,

bist du verwandt mit dem "WulleRoseKaufen" aus Bremen-Vegesack?

Also das mit der "Liste" habe ich nicht verstanden. Ich speichere die Zeile doch nur in 3 lokalen Variablen ?!
Ich versuch nochmal anders auszudrücken, wo ich den Unterschied zwischen einer "Liste" und "namentlich definierten Variablen" sehe.

Liste
  • gleichartige Elemente - wie "Wein, Weib und Gesang". oder "Laufwerke D:, E: und F:"
  • Anzahl variabel
  • Reihenfolge zufällig bzw. beliebig

Namentlich benannte Elemente
  • Jeder Variableninhalt macht nur unter einem bestimmten Variablenname Sinn
  • Reihenfolge ist nicht beliebig
  • Anzahl ist nicht variabel, sondern EXAKT drei
  • unter SPACE steht eben eine Spaceangabe und unter FILE eine Dateiangabe

Und du verarbeitest doch keine Parameterliste, sondern einzelne, fast schon individuelle Parameter.

Bei einer "Listenverarbeitung" im Batch würdest du u.U. noch die drei Variablen unter %VAR1%, %VAR2% und %VAR3% weiterschieben mit dem "Kopfwissen", dass eigentlich %VAR3% für die Variable %FILES% steht.

P.S. Thx@bastla - ich denke, mit deinem Beispiel wird es deutlicher.

Grüße
Biber
Bitte warten ..
Mitglied: WulleBier
23.08.2011 um 15:51 Uhr
Jetzt verstehe ich dich Biber.

Ich danke allen für ihre Antworten. Hat mir sehr geholfen.

Gruss WulleBier
Bitte warten ..
Mitglied: WulleBier
25.08.2011 um 11:11 Uhr
Nochmals servus zusammen,

Es scheint irgendwie doch nicht zu funktionieren...
ich habe jetzt folgenden Aufbau der .txt datei:

Dazu folgende For-Schleife

von den 3 Variablen wird nur %file% richtig ausgegeben die anderen jeweil "%b% und %c%

kann mir jemand sagen was daran falsch ist?
Bitte warten ..
Mitglied: bastla
25.08.2011 um 11:32 Uhr
Hallo WulleBier!
kann mir jemand sagen was daran falsch ist?
Wenn ich Dir sage, was richtig ist, geht's schneller .. ;-) face-wink

Versuch es mit folgenden Inhalten (irgendwie ein Déjà-vu):
[Edit] Kann natürlich - da Du ja anscheinend die gesamte Zeile in der Variablen haben wolltest - auch
sein ... [/Edit]

Batch:
wobei ich davon ausgehe, dass in der Variablen %laufwerk% (warum immer die auch so heißt) der Pfad zur Textdatei steht ...

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
25.08.2011, aktualisiert 18.10.2012
Aloha,

du solltest dir einmal unser Tutorial zur FOR-Schleife durchlesen und nicht versuchen ohne Messer aus einem Kuchen drei Stücke herauszubekommen ... (wobei der Kuchen nicht einmal so geteilt werden kann, wie du es glauben möchtest) .. oder anders ausgedrückt: es gibt kein %%b und auch kein %%c

greetz André
Bitte warten ..
Mitglied: Biber
25.08.2011 um 11:43 Uhr
Moin WulleBier,

es gibt Unterschiede und Gemeinsamkeiten zwischen FDP-Politikern und Skriptentwicklern.

Eine Gemeinsamkeit ist die nicht leistungsgerechte Bezahlung.
Ein Unterschied ist, dass ein Skripter sich irgendwann auf eine Strategie festlegen muss.

Bei dem Aufbau deiner jetzigen INI-Datei haben wir jetzt zwei Strategie-Elemente nutzbar:
  • alle Variablen/Wert-Pärchen sind "gleich" verarbeitbar - wie Elemente einer beliebig langen Liste
  • alle Variablen/Wert-Pärchen sind aber auch einzeln "namentlich" ansprechbar.

Die Kunst ist jetzt, diese Eigenschaften jeweils dann zu nutzen, wenn es sinnvoll ist.

Wechsele mal zum CMD-Prompt und mach dir Platz:
Dann gib ein ( nur die erste Zeile; Rest ist Ausgabe)
natürlich mit auf deine INI-Datei angepassten Namen/Pfad

-> hier behandele ich alle Variable/wert-Pärchen gleich beim Rausflöhen mit FindStr/Suche nach "--"
Ich kann aber auch alles gezielt einzeln ansprechen:
In deinem Batch kannst du jetzt z.B. schreiben
Grüße
Biber
Bitte warten ..
Mitglied: WulleBier
25.08.2011 um 13:32 Uhr
Hah ich sehe Licht im Dunkenln :) face-smile !!
@bastla
Ich habe das "--" immer genommen, da man für das andere Skript so die Parameter immer angibt also :
,deswegen wollt ich immer die ganze Zeile inklusive "--".

Vielen dank für den Code, jetzt funtioniert alles!

@Biber sehr guter Vergleich ;)

C:\Users\WulleRose>for /f "tokens=1,2 delims=- " %i in ('Findstr /c:"--"
e:\schnipsel\wullebiers.ini') do @echo %i Wert [%j]
space Wert [Space]
page Wert [Page]
file Wert ["data.txt"]

Dieses Beispiel hat mir Einiges klar gemacht. Danke dafür :) face-smile!
Ich schreib nochmal auf wie ich des verstanden habe korrigiert mich im Zweifel :) face-smile:

-FOR-Schleife geht durch jede unkommentierte Zeile durch --> Führt DO-Anweisung für jede Zeile aus. Da wir nach "--" suchen wird gleich in die entsprechenden Zeilen gesprungen.
-DO Anweisung: Da Tokens auf 1,2 gesetzt wurden wird zuerst die Variable %%i, space dann page dann file zugeordnet.
Da die Zeile durch die Token-Angabe getrennt wurde(wobei ich nicht verstehe warum "delims= - ") wird nun %%j dem jeweiligen Wert nach der Leerzeile zugeordnet.

Habe ich dies soweit richtig verstanden???


Vielen Dank nochmal

Gruss WulleBier
Bitte warten ..
Mitglied: Biber
25.08.2011 um 14:29 Uhr
Moin WulleBier,

Zitat von @WulleBier:
Ich schreib nochmal auf wie ich des verstanden habe korrigiert mich im Zweifel :) face-smile:

-FOR-Schleife geht durch jede unkommentierte Zeile durch --> Führt DO-Anweisung für jede Zeile aus. Da wir nach
"--" suchen wird gleich in die entsprechenden Zeilen gesprungen.
Jepp - bzw nur die "--"-Zeilen werden nicht überlesen (wobei doppelte Negation "nicht überlesen" == "gelesen")

-DO Anweisung: Da Tokens auf 1,2 gesetzt wurden wird zuerst die Variable %%i, space dann page dann file zugeordnet.
Jepp.
Da die Zeile durch die Token-Angabe getrennt wurde(wobei ich nicht verstehe warum "delims= - ")
wird nun %%j dem jeweiligen Wert nach der Leerzeile zugeordnet.
Die "delims" habe ich auf "Minuszeichen" und "SPACE" gesetzt, weil die FOR-Anweisung dann die Zeile wie folgt auffasst
Ursprungsgedanke ein paar Kommentare früher war ja, als DELIM ein Gleichheitszeichen zu vewenden.
Dann würde aus einer Zeile
...und einer FOR-Anweisung
Grüße
Biber
Bitte warten ..
Mitglied: WulleBier
25.08.2011 um 16:15 Uhr
Die "delims" habe ich auf "Minuszeichen" und "SPACE" gesetzt, weil die FOR-Anweisung dann die Zeile
wie folgt auffasst
Stimmt ist logisch. Delim bedeutet in der Zeile wo gelesen wird dieses Zeichen überlesen quasi?! ^^


Gruss WulleBier
Bitte warten ..
Mitglied: Biber
25.08.2011 um 16:47 Uhr
Moin WulleBier,

Delim bedeutet in der Zeile wo gelesen wird dieses Zeichen überlesen quasi?! ^^
Hinter dem Wort "quasi" in deinem Satz steht eine Zeichenfolge, bei der ich ganz sicher bin, ob es der zum Zerreissen überdehnte Spannungsbogen einer an mich gerichtete Frage ist...
Kann ja auch sein, dass "?! ^ ^" soviel bedeutet wie "Ja wie jezz'? Ach nee, *vornKoppKlatsch* na klar! Schau mal an..."

Also FALLS es eine Frage war:
Ja, DELIMs sind so etwas wie die Löcher im Schweizer Käse - die sind nötig, aber werden nicht mitgegessen.

Oder, die Mutter aller Delimiter (nein, nicht Liz Taylor, die war zwar auch oft getrennt, aber..) ist die CSV-Datei,
in der einzelne "Felder" getrennt durch ein Semikolon transportiert werden
--> hier ist das Prinzip der "Delimiter" erkennbar und vertraut.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
25.08.2011 um 19:08 Uhr
... obwohl: Das Beispiel zeigt eine SSV-Datei ... ;-) face-wink

Grüße
bastla
Bitte warten ..
Mitglied: Biber
25.08.2011 um 19:33 Uhr
Zitat von @bastla:
... obwohl: Das Beispiel zeigt eine SSV-Datei ... ;-) face-wink
... laut meinen PraktikantInnen gibt es seit Jahren weder SSV noch WSV, sondern ganzjährig SALE.

....immer diese Haarspaltereien in gewissen Forumsbereichen... ;-) face-wink

@WulleBier
Lass dich nicht verunsichern,
Das CSV-Format heisst halt so wie es heisst und die unfreiwillige Komik des Wortsinns wird ebensowenig hinterfragt wie bei "hot dogs" oder "coffee shops" oder "Windows Professional".

Grüße
Biber
Bitte warten ..
Heiß diskutierte Inhalte
Zusammenarbeit
Klimaschutz
NebellichtVor 1 TagTippZusammenarbeit54 Kommentare

Hallo friends, (friends in Anlehnung an die vielen Fs in dem englischen von FFF: fridays for future. Übrigens am 19.03.2021 gibts wieder einen globalen ...

Notebook & Zubehör
Tipp für festgefressene Scharniere bei Lenovo V120 Notebook?
gelöst LochkartenstanzerVor 1 TagFrageNotebook & Zubehör20 Kommentare

Moin Kollegen, Ich habe hier ein Lenovo V120 mit einem laut Internet üblichen Problem von "festgefressenen" Scharnieren. Ich könnte jetzt aufwendig das Notebook zerlegen ...

Viren und Trojaner
Ryuk Ransomware Warnzeichen
gelöst SchlemihlVor 1 TagFrageViren und Trojaner9 Kommentare

Guten Abend, nachdem ich hier und hier erfahren habe, wie sich die Ransomware Ryuk verhält, musste ich feststellen, dass unser kleines Netzwerk für eine ...

Microsoft Office
Microsoft365 und Outlook verbinden
ratzekahl1Vor 1 TagFrageMicrosoft Office31 Kommentare

Guten Morgen zusammen, ich habe einige Probleme / Fragen. Ich habe Office 365 auf den ersten Rechnern installiert. Admin angelegt, Benutzer usw. Da ich ...

Internet
Sichere Verbindung von zu Hause zu einem Firmenpc
haiflosseVor 1 TagFrageInternet6 Kommentare

Hallo! Ich suche eine Lösung mit der ich eine sichere Verbindung (ohne das ein Virus, Trojaner oder Ransom Virus den Computer bzw. Netzwerk zerstört) ...

Hyper-V
ESXi free oder Windows Hyper-V Server 2019
lukas0209Vor 21 StundenAllgemeinHyper-V15 Kommentare

Hallo, ich brauche ca. 2 oder 3 Windows 10 virtualisiert um Dinge zu testen. Ist es dafür sinnvoller ein Windows Hyper-V Server 2019 (kostenlos) ...

Off Topic
Nach 700 Tagen adwcleaner
altmetallerVor 22 StundenAllgemeinOff Topic7 Kommentare

Hallo, ich habe in meinem Netzwerk diverse Maßnahmen, um nicht nur Angriffe, sondern auch - sagen wir mal - unerwünschte Datenabflüsse und Tracking zu ...

Server-Hardware
Was bedeuten die Abkürzungen beim HPE-Server wie z.B. NC, Mod-X?
gelöst kaineanungVor 1 TagFrageServer-Hardware17 Kommentare

Hallo Leute, ich habe ein HPE-Serverangebot vorliegen bei dem ich an 1-2 Positionen nicht weiß was diese überhaupt bedeuten. Suche ich im Internet danach ...