2 Variablen in einer Zeile verarbeiten
Auslesen einer Date via Batch und deren Inhalt in mehrere Variablen übernehmen
Hi Leute,
Ich habe diesen Beitrag zwar schon mal hier gepostet, aber leider ist der irgendwie verschwunden
Ich habe mit Eurer Hilfe eine Batchdatei erzeugt die aus einer Liste Infos einliest und daraus ein spezielles Config FIle erstellt.
Das funktioniert auch hervorragend.
Das Batch: (nur das Kernstück kopiert!!)
For /F "eol=; tokens=255*" %%i in (S_%device%.txt) do (
if Exist %lw%\%%i echo CAB;%stor%%%i;False; >> %filename% | goto end
macht aus dem hier:
Pocket PC.cabs\Customize CABs\PB_WM5_Customize.cab
Pocket PC.cabs\Customize CABs\Tastenbelegung\Tasten_HTC_P3600.cab
das:
CAB;Speicherkarte\Pocket PC.cabs\Customize CABs\PB_WM5_Customize.cab
CAB;Speicherkarte\Pocket PC.cabs\Customize CABs\Tastenbelegung\Tasten_HTC_P3600.cab
Nun hat sich die Herausforderung gestellt daß meine SOURCE Liste einen Parameter dazu bekommt:
Pocket PC.cabs\Customize CABs\PB_WM5_Customize.cab,True
Pocket PC.cabs\Customize CABs\Tastenbelegung\Tasten_HTC_P3600.cab,False
Der Parameter "TRUE" oder "FALSE" soll am Ende der SOURCE Liste angehängt werden wobei ich mir aussuchen kann ob mit "," oder ";" oder einem anderen Zeichen!
Das Ergebnist muss dann so aussehen:
CAB;Speicherkarte\Pocket PC.cabs\Customize CABs\PB_WM5_Customize.cab;True;
CAB;Speicherkarte\Pocket PC.cabs\Customize CABs\Tastenbelegung\Tasten_HTC_P3600.cab;False;
Ich hab mit allen möglichen (eher geratenen) Varianten in meiner Batch Datei rumgespielt aber keine Lösung gefunden. Hab auch ehrlich gesagt diese FOR Funktion noch nicht 100% verstanden
Hat jemand einen Tip oder vielleicht sogar ein paar COdezeilen für mich ???
Hi Leute,
Ich habe diesen Beitrag zwar schon mal hier gepostet, aber leider ist der irgendwie verschwunden
Ich habe mit Eurer Hilfe eine Batchdatei erzeugt die aus einer Liste Infos einliest und daraus ein spezielles Config FIle erstellt.
Das funktioniert auch hervorragend.
Das Batch: (nur das Kernstück kopiert!!)
For /F "eol=; tokens=255*" %%i in (S_%device%.txt) do (
if Exist %lw%\%%i echo CAB;%stor%%%i;False; >> %filename% | goto end
macht aus dem hier:
Pocket PC.cabs\Customize CABs\PB_WM5_Customize.cab
Pocket PC.cabs\Customize CABs\Tastenbelegung\Tasten_HTC_P3600.cab
das:
CAB;Speicherkarte\Pocket PC.cabs\Customize CABs\PB_WM5_Customize.cab
CAB;Speicherkarte\Pocket PC.cabs\Customize CABs\Tastenbelegung\Tasten_HTC_P3600.cab
Nun hat sich die Herausforderung gestellt daß meine SOURCE Liste einen Parameter dazu bekommt:
Pocket PC.cabs\Customize CABs\PB_WM5_Customize.cab,True
Pocket PC.cabs\Customize CABs\Tastenbelegung\Tasten_HTC_P3600.cab,False
Der Parameter "TRUE" oder "FALSE" soll am Ende der SOURCE Liste angehängt werden wobei ich mir aussuchen kann ob mit "," oder ";" oder einem anderen Zeichen!
Das Ergebnist muss dann so aussehen:
CAB;Speicherkarte\Pocket PC.cabs\Customize CABs\PB_WM5_Customize.cab;True;
CAB;Speicherkarte\Pocket PC.cabs\Customize CABs\Tastenbelegung\Tasten_HTC_P3600.cab;False;
Ich hab mit allen möglichen (eher geratenen) Varianten in meiner Batch Datei rumgespielt aber keine Lösung gefunden. Hab auch ehrlich gesagt diese FOR Funktion noch nicht 100% verstanden
Hat jemand einen Tip oder vielleicht sogar ein paar COdezeilen für mich ???
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 52468
Url: https://administrator.de/contentid/52468
Ausgedruckt am: 26.11.2024 um 11:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo pbelcl!
Falls Du nicht vor hast, aus einem "," in der "S_%device%.txt" ein ";" in der Ausgabe zu machen, könntest Du einfach bereits in der "S_%device%.txt" als Trennzeichen ";" verwenden und es so versuchen:
Grüße
bastla
Falls Du nicht vor hast, aus einem "," in der "S_%device%.txt" ein ";" in der Ausgabe zu machen, könntest Du einfach bereits in der "S_%device%.txt" als Trennzeichen ";" verwenden und es so versuchen:
for /f "delims=" %%i in (S_%device%.txt) do if exist %lw%\%%i echo CAB;%stor%%%i; >>%filename%
Grüße
bastla
Hallo pbelcl!
Sorry, hatte nicht genau genug hingesehen ...
Sollte eigentlich so gehen:
Wozu brauchst Du eigentlich "eol=;" - üblicherweise dient das dazu, Kommentarzeilen, die mit ";" beginnen, nicht zu verarbeiten (indem alles nach dem ";" ignoriert wird)?
Was mich auch überrascht ist das "| goto end" - was bezweckst Du damit?
Grüße
bastla
Sorry, hatte nicht genau genug hingesehen ...
Sollte eigentlich so gehen:
SET device=Trinity
SET LW=p:\CD's
SET STOR=Speicherkarte
SET Filename=S_%DEVICE%.dat
del %filename%
For /F "eol=; delims=, tokens=255*" %%i in (S_%device%.txt) do (
if Exist %lw%\%%i echo CAB;%stor%%%i;%%j; >> %filename% | goto end
if NOT EXIST %LW%\%%i echo ---! FEHLT !---%%i >> %filename%
)
:end
Was mich auch überrascht ist das "| goto end" - was bezweckst Du damit?
Grüße
bastla
Hallo pbelcl!
Hinsichtlich des "| goto end": Ist eigentlich überflüssig, aber damit es in Deinem Sinn verwendet würde, müsstest Du "& goto :end" schreiben.
Grüße
bastla
Vielleicht soll da sowas wie "token y,x" rein?
Ja, passe die Schreibweise so an:For /F "eol=; delims=, tokens=1,2" %%i in (S_%device%.txt) do (
Grüße
bastla
Hallo pbelcl!
Grüße
bastla
Versteh ich das richtig daß man damit die Anzahl der zu verwendeten Variablen angibt? könnte ich mit:
For /F "eol=; delims=, tokens=1,2,3" %%i in (S_%device%.txt) do (
zum Beispiel eine Zeile:
2a Pocket PC.cabs\2 - Customize CABs\1 - System\IdentEintrag\HTC_Trinity_Ident.cab,false,MDAPro
so aufteilen daß:
%%i = 2a Pocket PC.cabs\2 - Customize CABs\1 - System\Ident Eintrag\HTC_Trinity_Ident.cab
%%j = false
%%k = MDAPro
erzeugt wird ?
Ja; alternativ ginge auch "tokens=1-3". Ein "tokens=3" zB würde nur %%i mit dem Wert "MDAPro" liefern.For /F "eol=; delims=, tokens=1,2,3" %%i in (S_%device%.txt) do (
zum Beispiel eine Zeile:
2a Pocket PC.cabs\2 - Customize CABs\1 - System\IdentEintrag\HTC_Trinity_Ident.cab,false,MDAPro
so aufteilen daß:
%%i = 2a Pocket PC.cabs\2 - Customize CABs\1 - System\Ident Eintrag\HTC_Trinity_Ident.cab
%%j = false
%%k = MDAPro
erzeugt wird ?
Müßte ich nicht statt "& goto :end" eher "& goto end" schreiben?
Bei "goto" ist der Doppelpunkt nicht erforderlich (aber zulässig), nach einem "call" hingegen wird er benötigt - daher habe ich mir angewöhnt, immer ":Sprungmarke" zu schreiben.Wie viele "&" kann ich in einer For Schleife hintereinander machen, nur 1 x oder öfter?
Mir sind keine diesbezüglichen Beschränkungen bekannt ...Grüße
bastla