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 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 )
Ich freue mich auf Eure Unterstützung...
Bis hoffentlich bald
Rico
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
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 )
Ich freue mich auf Eure Unterstützung...
Bis hoffentlich bald
Rico
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 104499
Url: https://administrator.de/contentid/104499
Ausgedruckt am: 23.11.2024 um 18:11 Uhr
10 Kommentare
Neuester Kommentar
Moin Rico,
willkommen im Forum.
Die entsprechende Syntax der FOR/F-Anweisung wäre in etwa so:
...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:
Grüße
Biber
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
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
Moin Fahrrad,
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
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.Moin,
ich suche etwas ähnliches, nur das ich einen Verzechnispfad zerlegen will, als DELIMS=\ kommt natürlich nur Sch...
heraus
Habt ihr eine Idee?
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
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):
Nach der Vorbereitung lautet eine mögliche proof-of-concept-Zeile.
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}
Wolltest du nicht einen eigenen Beitrag aufmachen?
Grüße
Biber
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
>@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
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
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
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
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.
absolut ungetestet
Poste doch mal deinen Batch/dei Szenario.
Grüße
Biber
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
Poste doch mal deinen Batch/dei Szenario.
Grüße
Biber