escobar
Goto Top

String zerlegen in Batch

hallo,

ich habe eine datei, in der immer zwei aufeinanderfolgende verzeichnisse bzw. pfade stehen, etwa so:

da das mit der formatierung hier nicht geklappt hat, hab ich mal ein bsp-file hier hocgeladen (125 Byte)

hierbei koennen beide pfade, leerzeichen enthalten. bisher stehen die leerzeichen enthaltenden pfade in anfuehrungszeichen, das muss aber nicht so sein.

wie kann ich nun die beiden pfade aus dem textfile herausziehen?

mit
for /F "tokens=1 delims=" %%i in (%iniFile%) DO (set Zeile=%%i & call:ZeileBearbeiten)  
hole ich die komplette zeile raus.
eigentlich alle stringoperationen versagen, wenn ein anfuehrunggstrich in dieser zeile drin ist, deshalb wollte ich es erstmal weglassen. um nun die beiden pfade zu trennen, muesste ich eigentlich nur herausfinden, wie lange die zeile ist, und an welcher stelle sich der 2. doppelpunkt befindet. dies gestaltet sich leider auch etwas schwierig, da ich leider schon nicht weiss, wie lange die zeile ist. auch kann ich die zeile nicht durchgehen, dennw enn ich folgende befehle ausfuehre:
:ZeileBearbeiten
for /L %%Z in (0, 1, 3) do (call:Copy %%Z)
goto:eof

:Copy
set Cursor=%1
echo %Zeile:~%Cursor%,1%
goto:eof
dann rafft die cmd nicht, dass er %Cursor% ersetzen soll. Ich mach da jetzt ewig dran rum, mir faellt aber wirklich nix mehr ein. habt ihr da ne idee?

Esco

Content-ID: 40618

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

Ausgedruckt am: 13.11.2024 um 10:11 Uhr

Biber
Biber 21.09.2006 um 15:12:39 Uhr
Goto Top
Moin escobar,
wenn Du als Delimiter in Deiner *.ini-Datei ein Semikolon (oder ein "#" oder oder..) nimmst, dann hast Du kein Rumgeeiere mehr.
Und es ist auch beliebig, ob die einzelnen Quell/Ziel-Pfade in Anführungszeichen stehen oder nicht.

Demo am CMD-Prompt; "@echo copy" statt dem eigentlichen Befehl "copy"
>type ggh.ini
D:\exage\;G:\symber\exage\ 
D:\GG VII\;G:\symber\GG_VII\ 
"D:\GG VI\";G:\symber\GG_VI\   
C:\boot.ini;G:\symber\ 

>for /f "delims=; tokens=1-2" %i in (ggh.ini)  do @echo copy "%~i" "%~j"  
copy "D:\exage\" "G:\symber\exage\"  
copy "D:\GG VII\" "G:\symber\GG_VII\"  
copy "D:\GG VI\" "G:\symber\GG_VI\"  
copy "C:\boot.ini" "G:\symber\"  
## bzw. als Batch-Oneliner
:: --- snipp CopyGghIni.bat
@for /f "delims=; tokens=1-2" %i in (ggh.ini)  do @echo copy "%~i" "%~j"  
::----- snapp CopygghIni.bat

Gruß
Biber
Escobar
Escobar 21.09.2006 um 15:26:41 Uhr
Goto Top
hallo,

danke erstmal fuer die antwort. ich bin mir bewusst, dass das auch einfacher geht. allerdings hab' ich schonmal einen gesehen, der das so umgesetzt hat (leider hab ich nun keinen zugriff mehr auf die batch), deshalb wuerde ich das nu gern auch so machen. ich eier ja auch shcon ne gute weile rum, komm' aber auf kene loesung...

Esco
Escobar
Escobar 21.09.2006 um 16:15:12 Uhr
Goto Top
so, ich habs, dein delims hat mich drauf gebracht: ich benutze den doppelpunkt als delimiter und bastel mir dann das gelumpe aus den teilstrings wieder zusammen:
for /f "delims=: tokens=1-3" %%i in (ggh.ini)  do (set Ueberg1=%%i& set Ueberg2=%%j& set Ueberg3=%%k& call:[ZeileBearbeiten])  
pause
goto:eof

:[ZeileBearbeiten]
REM quelle ist der linke pfad, ziel der rechte
set Quelle=%Ueberg1%:%Ueberg2%
Set Quelle=%Quelle:~0,-2%
echo Quelle: %Quelle%
Set Ziel=%Ueberg2:~-1%
Set Ziel=%Ziel%:%Ueberg3%
echo Ziel: %Ziel%
goto:eof

Esco
miniversum
miniversum 21.09.2006 um 17:45:44 Uhr
Goto Top
Vorschlag, wenn du schon manchmal Pfadangaben mit " hast und manchmal ohne dann prüf das doch ab und vereinheitliche das, ist vielleicht besser zum weiterverarbeiten, oder?

miniversum