pbelcl
Goto Top

Space im delimiter entfernen

space im Delimiter verhindern

Hallo Leute,

Habe ein kleines Problem beim Auslesen einer Liste via Batch.

folgendes Textfile (Demoauszug)
2 - Pocket PC.cabs\Heute Plugins\SPB Mobile Shell\V 2.0\SpbMobileShell2_de_arm.cab,True,5_
2 - Pocket PC.cabs\Tools\Total Commander\TotalCommander25_PublicBeta3_PB.cab,False,8_
2 - Pocket PC.cabs\Video und Audio\Voice Minder\V1.6 Build 1405\VoiceMinder_WM5.cab,True,7_

soll in einen Copybefehl umgewandelt werden. Dazu habe ich eine kleine Demo Batch Datei gemacht welche die eingelesenen Parameter in Variablen schreibt:

For /F "eol=;delims=, tokens=1,2,3" %%i in (S_kaiser.txt) do call x_runcopy %%i %%j %%k   

Ich würde erwarten dass in der Datei x_runcopy.bat dann folgendes ankommt:

%1 = 2 - Pocket PC.cabs\Heute Plugins\SPB Mobile Shell\V 2.0\SpbMobileShell2_de_arm.cab
%2 = true
%3 = 5_
es kommt aber leider das an:
%1= 2
%2= -
%3= Pocket
u.s.w

Das bedeutet dass der delimiter auch auf SPACE als Trenner reagiert, was ich aber nicht will. Es soll einzig das "," als Delimiter gültig sein!

Wenn ich allerdings den call Befehl in ein echo umwandle dann klappt das

z.B.
For /F "eol=;delims=, tokens=1,2,3" %%i in (S_kaiser.txt) do echo %%i__%%j__%%k  

gibt:

2 - Pocket PC.cabs\Heute Plugins\SPB Mobile Shell\V 2.0\SpbMobileShell2_de_arm.c
ab__True__5_
2 - Pocket PC.cabs\Tools\Total Commander\TotalCommander25_PublicBeta3_PB.cab__Fa
lse__8_
2 - Pocket PC.cabs\Video und Audio\Voice Minder\V1.6 Build 1405\VoiceMinder_WM5.
cab__True__7_

aus.

Kann mir jemand einen Tip geben was ich da falsch mache?

Content-Key: 84251

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

Printed on: April 25, 2024 at 22:04 o'clock

Member: bastla
bastla Mar 30, 2008 at 08:23:14 (UTC)
Goto Top
Hallo pbelcl!

Das Problem hinsichtlich der Leerzeichen entsteht durch die fehlenden Anführungszeichen, daher:
For /F "eol=; tokens=1,2,3 delims=," %%i in (S_kaiser.txt) do call x_runcopy "%%i" "%%j" "%%k"  
Um die Anführungszeichen in "x_runcopy" wieder loszuwerden, kannst Du dort anstelle von "%1" "%~1" verwenden.

Grüße
bastla
Member: pbelcl
pbelcl Mar 30, 2008 at 10:16:46 (UTC)
Goto Top
Danke bastla für Deinen Tip!

Das mit dem "%~1" hatte ich wieder vergessen face-wink

Nun habe ich es geschafft daß die Strings richtig zusammengebaut werden.
Nur wird beim kopieren dieses automatisch zusammengebauten Befehls:
if Exist "p:\CD's\2 - Pocket PC.cabs\Heute Plugins\SPB Mobile Shell\V 2.0\SpbMobileShell2_de_arm.cab" xcopy "p:\CD's  
\2 - Pocket PC.cabs\Heute Plugins\SPB Mobile Shell\V 2.0\SpbMobileShell2_de_arm.
cab" "p:\CD's\2 - Pocket PC.cabs\0 - Install kaiser\5_SpbMobileShell2_de_arm.cab  
" /f /v /y  
noch gefragt:
Ist das Ziel P:\CD's\2 - Pocket PC.cabs\0 - Install kaiser\5_SpbMobileShell2_de_  
arm.cab ein Dateiname
oder ein Verzeichnisname
(D = Datei, V = Verzeichnis)?

Normalerweise umgehe ich das indem ich dem Zieldateinamen die Endung ".cab" gegen ".*" ersetze. Leider geht das im zusammengebauten String nicht so einfach!

Gibt es eine andere Lösung?

Unter den XCOPY Parametern habe ich leider nichts gefunden ....
Member: miniversum
miniversum Mar 30, 2008 at 10:42:57 (UTC)
Goto Top
Häng mal noch den Parameter /I dran.
miniversum
Member: pbelcl
pbelcl Mar 30, 2008 at 13:46:16 (UTC)
Goto Top
Häng mal noch den Parameter /I dran.

Danke Miniversum, aber diese Parameter bewirkt lt. Hilfe dass angenommen wird es sei ein Verzeichnis.
Ich such nach dem umgekehrten Befehl, ich wil festlegen dass es eine DATEI ist...
Member: bastla
bastla Mar 30, 2008 at 15:08:01 (UTC)
Goto Top
Hallo pbelcl!

Ich such nach dem umgekehrten Befehl, ich wil festlegen dass es eine DATEI ist...
Den habe ich auch schon vergeblich gesucht ...

Ein Lösungsweg wäre, zunächst den benötigten Pfad zu erzeugen und danach ein gewöhnliches "copy" (ohne "x") zu verwenden, also etwa:
if Exist "p:\CD's\2 - Pocket PC.cabs\Heute Plugins\SPB Mobile Shell\V 2.0\SpbMobileShell2_de_arm.cab" (  
	if not exist "p:\CD's\2 - Pocket PC.cabs\0 - Install kaiser\" md "p:\CD's\2 - Pocket PC.cabs\0 - Install kaiser\"  
	copy "p:\CD's\2 - Pocket PC.cabs\Heute Plugins\SPB Mobile Shell\V 2.0\SpbMobileShell2_de_arm.cab" "p:\CD's\2 - Pocket PC.cabs\0 - Install kaiser\5_SpbMobileShell2_de_arm.cab"  
)

Eigentlich sollte es aber auch genügen (wenn Du den Namen der Datei nicht ändern wolltest), als Ziel des "xcopy" nur den Ordner anzugeben und diesen mit "\" abzuschließen, also:
if Exist "p:\CD's\2 - Pocket PC.cabs\Heute Plugins\SPB Mobile Shell\V 2.0\SpbMobileShell2_de_arm.cab" xcopy "p:\CD's\2 - Pocket PC.cabs\Heute Plugins\SPB Mobile Shell\V 2.0\SpbMobileShell2_de_arm.cab" "p:\CD's\2 - Pocket PC.cabs\0 - Install kaiser\"  
Die Änderung des Dateinamens wäre dann über ein nachfolgendes
ren "p:\CD's\2 - Pocket PC.cabs\0 - Install kaiser\SpbMobileShell2_de_arm.cab" "5_SpbMobileShell2_de_arm.cab"  
auch noch möglich.

Grüße
bastla
Member: miniversum
miniversum Mar 30, 2008 at 15:17:58 (UTC)
Goto Top
Ich meine eigentlich es funktioniert trotzdem. Aber schonmal mit /-I versucht?
Member: pbelcl
pbelcl Mar 30, 2008 at 16:40:52 (UTC)
Goto Top
Ich meine eigentlich es funktioniert
trotzdem. Aber schonmal mit /-I versucht?
Danke für den Tip, den habe ich schon probiert!
Da kommt eine Fehlermeldung mit falsche Option oder so ähnlich
Member: pbelcl
pbelcl Mar 30, 2008 at 16:44:14 (UTC)
Goto Top
Ein Lösungsweg wäre, zunächst
den benötigten Pfad zu erzeugen und
danach ein gewöhnliches "copy"
(ohne "x") zu verwenden, ....

Hey bastla,

Danke für den Tip mit "Copy" das war die Lösung!
Du bist super !!

Musste nicht einmal die Parameter verändern, einfach "xcopy" gegen "copy" tauschen brachte schon die Lösung.
Den Pfad erzeuge ich so wieso schon vorher, daher alles bestens!