rgraepel
Goto Top

String mit Batch mehrfach anhand von Teilern zerlegen

Hallo zusammen,

ich habe einen String (den könnte ich z.B. aus einer Datei auslesen). Dieser String ist immer nach dem Muster
xxxxx/xxxxxxx/xxxxxxxx/xxxxxxxx/xxxxx
aufgebaut. Als Trennzeichen sind somit die / vorhanden.
Ich möchte jetzt die Werte des ersten, zweiten und sechsten Blocks haben und an ein php-Skript übergeben.

Geht das mit FOR /f ?
Muss ich dazu nach jedem Durchgang die Daten in eine andere Datei schreiben? Oder kann ich die Daten in verschiedenen Variablen speichern und dann den php-Aufruf von dieser Batch aus realisieren?
(Von php hab ich leider keine Ahnung. Sonst würde ich es vermutlich damit machen face-wink)


Ich freue mich auf Eure Unterstützung...

Bis hoffentlich bald
Rico

Content-ID: 104499

Url: https://administrator.de/contentid/104499

Ausgedruckt am: 23.11.2024 um 18:11 Uhr

Biber
Biber 20.12.2008 um 01:29:53 Uhr
Goto Top
Moin Rico,

willkommen im Forum.
Die entsprechende Syntax der FOR/F-Anweisung wäre in etwa so:
For /f "delims=/ tokens=1,2,6" %i in ("aaa/bb/cc/dddd/ee/ff/gg") do @echo [Ausgabe] %i %j %k  
[Ausgabe] aaa bb ff
...wobei dort, wo ich jetzt den hart verdrahteten Text "aa/bb..." eingegeben habe natürlich der Name der Textdatei stehen sollte. Ist also nur zum Spielen am CMD-Prompt.
In Deiner Batch-Verarbeitung könnte das dann so aussehen:

@echo off & setLocal
For /f "delims=/ tokens=1,2,6" %%i in ("D:\Eine\Textdatei.txt") do (  
      Set "myvar1=%%i"   
      Set "myvar2=%%j"  
      Set "myvar3=%%k"  
)
Echo var1 hat Wert [%var1%]
Echo var2 hat Wert [%var2%]
Echo var3 hat Wert [%var3%]

Grüße
Biber
Biber
Biber 05.01.2009 um 10:20:42 Uhr
Goto Top
Moin und eine Nachfrage, RGraepel,

Bis hoffentlich bald

Wie definiert Ihr dort wo Dein Rechner steht "bald"??
Ich freue mich auf Eure Unterstützung...
Wie lange noch dürfen wir uns auf ein Feedback von Dir freuen?

Grüße
Biber
RGraepel
RGraepel 06.01.2009 um 15:24:55 Uhr
Goto Top
Hallo Biber,

was lange währt wird endlich gut.
Nein, im Ernst: Ich habe einen Beruf, in dem ich häufiger über längere Zeit leider nicht im Lande bin. Daher komme ich nicht immer dazu so schnell zu antworten, wie ich es mir selber gerne wünschen würde. Bitte entschuldige die Verzögerung.

Dein Beitrag hat mir super geholfen. Ich habe es mit Hilfe Deiner Angaben hinbekommen. Die Batch läuft wunderbar.

Vielen Dank nochmal

Bis BALD
Rico
Fahrrad
Fahrrad 10.08.2010 um 10:57:26 Uhr
Goto Top
Moin,

ich suche etwas ähnliches, nur das ich einen Verzechnispfad zerlegen will, als DELIMS=\ kommt natürlich nur Sch... heraus

Habt ihr eine Idee?

Danke & Gruß
Fahrrad
Biber
Biber 10.08.2010 um 11:46:34 Uhr
Goto Top
Moin Fahrrad,

Zitat von @Fahrrad:
Moin,

ich suche etwas ähnliches, nur das ich einen Verzechnispfad zerlegen will, als DELIMS=\ kommt natürlich nur Sch...
heraus

Habt ihr eine Idee?
Jepp, immer.

Das Eröffnen eines neuen Beitrags mit einer etwas konkreteren Beschreibung des Problems wären ein Anfang.
Und nichts gegen angedeutete Kraftworte, wenn sie das Ergebnis plastischer vorstellbar machen.

Aber in deinem Kommentar hat es absolut nichts gebracht.

Grüße
Biber
Fahrrad
Fahrrad 10.08.2010 um 13:35:56 Uhr
Goto Top
Du hast Recht.....

Ich möchte eine willkürliche Pfadnagabe mit willkürlicher Länge in ihre Einzelverzeichnisse zerlegen und als Variablen speichern

zB

C:\Verz1Verz2\Verz3\Verz4

in %Dir1%=Verz1
%Dir2%=Verz2 usw.

Danke
Biber
Biber 10.08.2010 um 15:42:27 Uhr
Goto Top
Na ja... "willkürlich" will ich ja auch oft... aber lass uns mal von Gebrauchsbätchen ausgehen.

Also lassen wir mal kurz die Fälle beiseite in denen die Verzeichnistiefe größer ist als 4 Mio Ebenen.

Dann kannst du das alles auch zwar mit einem Batch machen, aber eigentlich würde ich die eine Zeile gleich vom CMD-Prompt aus abschicken.
Das lohnt ja da das Speichern nicht.

Ich weiss nicht, ob dir "EnableDelayedExpansion" was sagt.
Falls ja, ist sie sicherlich ohnehin standardmäßig aktiv.
Falls wider Erwarten nein, dann bitte folgende vorbereitenden Massnahmen zum Test am CMD-Prompt
{CMD-Fenster öffnen auf welche Art auch immer}
Dort eingeben [bei allem, was jetzt kommt: führendes ">" NICHT mit eingeben; is' sich mein Prompt):
>Mode con cols=155 lines =44 & Cmd /V:on /K
Nach der Vorbereitung lautet eine mögliche proof-of-concept-Zeile.
>@setlocal enabledelayedexpansion & set "DFD=C:\verz1\Verz2\Verz 3a und 3b\Verz4" & @For %i in ("%DFD:\=" "%") do @(set /a "ffh+=1" & set "Dir!ffh!=%~i")
  • Erkennen kannst du
a) meine Schreibfaulheit
b) eine Variable DFD [=DasFahrradDir], die den Inhalt "C:\verz1\Verz2\Verz 3a und 3b\Verz4" zugewiesen bekommt
c) eine Variable ffh [=fahrradferzeichnishochzähler] für die späteren Dir1, Dir2, Dir3-Variablen

Überprüfung -< Ausgabe aller Variablen namens Dir[irgendwas}
>set dir
Dir1=C:
Dir2=verz1
Dir3=Verz2
Dir4=Verz 3a und 3b
Dir5=Verz4

Wolltest du nicht einen eigenen Beitrag aufmachen?

Grüße
Biber
Fahrrad
Fahrrad 10.08.2010 um 15:53:15 Uhr
Goto Top
Hallo biber,

soweit vielen Dank, ich werde mal testen und berichten.

ich hatte die Suchfunktion bemüht und bin bei diesem Beitrag hängengeblieben, weil ich mir recht ähnlich schien (nur \ und / vertauscht), deshalb habe ich keine eigenen aufgemacht

gruß
Fahrrad
Fahrrad
Fahrrad 11.08.2010 um 10:40:49 Uhr
Goto Top
Hallo biber,

das klappt soweit sehr gut, (wie häufig ein kleines ) aber.....

ich möchte die Variablen gerne in meinem Skript erzeugen und weiterverwenden

Beingt durch den Aufruf CMD habe ich eine neue Instanz des Interpreters, wie bekomme ich das in einem Skript unter? Stehe ich auf dem Schlauch?

Danke & Gruß
Fahrrad
Biber
Biber 11.08.2010 um 20:29:38 Uhr
Goto Top
Moin Fahrrad,

die Zeile oben sollte ja nur eine Strategieskizze sein.

für die Nutzung in einem Batch gibt es ja wieder das Szenario
a) du brauchst es innerhalb eines (konkreten, real existierenden) bestehenden Batches
b) du brauchst diese Funktionalität öfters mal, standalone, weil du das von verschiedenen Stellen aus (Batches oder auch mal von CMD-Prompt) aufrufen willst.

Macht insofern einen Unerschied, weil im ersten Fall die Variablen %dir1%, %dir2%.....%dirN% eben auch wenig Seiteneffekte verursuchen können,
im zweiten Fall müssten die Variablen eben sessionweit, nicht nur local gesetzt werden (und eben auch entsorgt).

Da ich doch dein Szenario von hier aus nicht sehen kann, selbst wenn ich mich ganz weit vorbeuge und auf Zehenspitzen stelle... was soll ich rumratenß

Innerhalb eines bestehenden Batches kannst du es sinngemäß so machen.
@echo off & setlocal
:: Dein Batch
:: :....Dein-Batchkommentar
:.... deine Batch-SET anweisungen
:: deine Aufrufparemterauswertungen
:. ...
Set "DasDirWasIchAufdroselnWill=C:\verz1\Verz2\Verz 3a und 3b\Verz4"  
::...
:: Variablen Dir1...dir50 löschen 8falls vorhanden)
For /L %%i in (1,1,50) do set "dir%%i="  

call :PfadInVarPacker "%DasDirWasIchAufdroselnWill%"  
....
:: hier sollten die Variable Dir1, dir2 etc gesetzt sein
setlocal enabledelayedexpansion
For /L %%i in (1,1,50) do if defined !dir%%i! do echo dir%%i ist !dir!%%i
setlocal enabledelayedexpansion
:goto :eof
~~~~~~~~~~~~~Ende von Dein Batch ~~~~~~~~
::PfadInVarPacker paramter %1 ist lw/pfad-Zeichenfolge in Anführungszeichen
setlocal enabledelayedexpansion

set "DFD=%~1"   
For %%i in ("%DFD:\=" "%") do   
       set /a "ffh+=1"   
     set "Dir!ffh!=%%~i"  
)
setlocal disabledelayedexpansion

goto :eof
absolut ungetestet

Poste doch mal deinen Batch/dei Szenario.

Grüße
Biber