Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

String mit Batch mehrfach anhand von Teilern zerlegen

Frage Entwicklung Batch & Shell

Mitglied: RGraepel

RGraepel (Level 1) - Jetzt verbinden

20.12.2008, aktualisiert 02:37 Uhr, 20170 Aufrufe, 10 Kommentare

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 )


Ich freue mich auf Eure Unterstützung...

Bis hoffentlich bald
Rico
Mitglied: Biber
20.12.2008 um 01:29 Uhr
Moin Rico,

willkommen im Forum.
Die entsprechende Syntax der FOR/F-Anweisung wäre in etwa so:
01.
For /f "delims=/ tokens=1,2,6" %i in ("aaa/bb/cc/dddd/ee/ff/gg") do @echo [Ausgabe] %i %j %k 
02.
[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:

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

Grüße
Biber
Bitte warten ..
Mitglied: Biber
05.01.2009 um 10:20 Uhr
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
Bitte warten ..
Mitglied: RGraepel
06.01.2009 um 15:24 Uhr
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
Bitte warten ..
Mitglied: Fahrrad
10.08.2010 um 10:57 Uhr
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
Bitte warten ..
Mitglied: Biber
10.08.2010 um 11:46 Uhr
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
Bitte warten ..
Mitglied: Fahrrad
10.08.2010 um 13:35 Uhr
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
Bitte warten ..
Mitglied: Biber
10.08.2010 um 15:42 Uhr
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):
01.
>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
Bitte warten ..
Mitglied: Fahrrad
10.08.2010 um 15:53 Uhr
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
Bitte warten ..
Mitglied: Fahrrad
11.08.2010 um 10:40 Uhr
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
Bitte warten ..
Mitglied: Biber
11.08.2010 um 20:29 Uhr
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.
01.
@echo off & setlocal 
02.
:: Dein Batch 
03.
:: :....Dein-Batchkommentar 
04.
:.... deine Batch-SET anweisungen 
05.
:: deine Aufrufparemterauswertungen 
06.
:. ... 
07.
Set "DasDirWasIchAufdroselnWill=C:\verz1\Verz2\Verz 3a und 3b\Verz4" 
08.
::... 
09.
:: Variablen Dir1...dir50 löschen 8falls vorhanden) 
10.
For /L %%i in (1,1,50) do set "dir%%i=" 
11.
 
12.
call :PfadInVarPacker "%DasDirWasIchAufdroselnWill%" 
13.
.... 
14.
:: hier sollten die Variable Dir1, dir2 etc gesetzt sein 
15.
setlocal enabledelayedexpansion 
16.
For /L %%i in (1,1,50) do if defined !dir%%i! do echo dir%%i ist !dir!%%i 
17.
setlocal enabledelayedexpansion 
18.
:goto :eof 
19.
~~~~~~~~~~~~~Ende von Dein Batch ~~~~~~~~ 
20.
::PfadInVarPacker paramter %1 ist lw/pfad-Zeichenfolge in Anführungszeichen 
21.
setlocal enabledelayedexpansion 
22.
 
23.
set "DFD=%~1"  
24.
For %%i in ("%DFD:\=" "%") do  
25.
       set /a "ffh+=1"  
26.
     set "Dir!ffh!=%%~i" 
27.
28.
setlocal disabledelayedexpansion 
29.
 
30.
goto :eof
absolut ungetestet

Poste doch mal deinen Batch/dei Szenario.

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst PowerShell String zerlegen in Array, DataTable, Hashtable speichern (7)

Frage von derhoeppi zum Thema Batch & Shell ...

VB for Applications
gelöst Wie lese ich einen String nach einem mehrfach vorkommenden Buchstaben aus? (13)

Frage von GERz0cKErZ zum Thema VB for Applications ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (9)

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...