Bestimmten gefundenen Wert aus txt verarbeiten
Hallo,
Biber und LotPings wissen bestimmt schnell rat.
jetzt fehlt mir die einstellung, dass er den ERSTEN gefundenen wert weiterverarbeitet. Wie folgt.
dann soll er den nächsten wert genauso bearbeiten.
zur schnelleren bearbeitung würde ich denke, dass noch eine abfrage ala
bei mir nimmt er zur zeit leider nur die LETZTE gefundene zeile (wenn nur eine gefunden wird nimmt er natürlich die)
ihr könnt bestimmt helfen
DANKE
Biber und LotPings wissen bestimmt schnell rat.
for /f "tokens=1* delims==" %%i in ('findstr /i /b "path=" "%ini%"') do set "js=%%j"
jetzt fehlt mir die einstellung, dass er den ERSTEN gefundenen wert weiterverarbeitet. Wie folgt.
for /f "usebackq delims=" %%k in ("%Datei%") do set "Line=%%k" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%t%"
dann soll er den nächsten wert genauso bearbeiten.
zur schnelleren bearbeitung würde ich denke, dass noch eine abfrage ala
'findstr /i /b "%von%" "%js%"'
bei mir nimmt er zur zeit leider nur die LETZTE gefundene zeile (wenn nur eine gefunden wird nimmt er natürlich die)
ihr könnt bestimmt helfen
DANKE
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 144191
Url: https://administrator.de/contentid/144191
Ausgedruckt am: 19.11.2024 um 17:11 Uhr
17 Kommentare
Neuester Kommentar
Moin connecthor,
im Prinzip hast du schon alles richtig, nur sollen ALLE Anweisungen, die in deiner zweiten Zeile nach dem FOR-Anweisungs-DO folgen
für jedes Element/jede Zeile angewandt werden. Also musst du diese in Klammern setzen.
Demo am CMD-Prompt:
Ich denke, der Unterschied zu deiner 2.Zeile (also die Einklammerung) ist erkennbar.
Die "@"-Zeichen sind bedeutungslos ... ist nur zur Echo-unterdrückung am Prompt.
Grüße
Biber
im Prinzip hast du schon alles richtig, nur sollen ALLE Anweisungen, die in deiner zweiten Zeile nach dem FOR-Anweisungs-DO folgen
für jedes Element/jede Zeile angewandt werden. Also musst du diese in Klammern setzen.
Demo am CMD-Prompt:
> rem die inputdatei sieht so aus.
>type x.txt
path=d:\temp
path=f:\temp
path=d:\temp\backup
> Rem Setzen der Von/nach-Variablen
> set "von=temp" & set "nach=another"
>for /f "usebackq delims=" %k in (x.txt) do @(set "Line=%k" & set Line=!Line:%Von%=%Nach%! & @echo !Line!)
path=d:\another
path=f:\another
path=d:\another\backup
Ich denke, der Unterschied zu deiner 2.Zeile (also die Einklammerung) ist erkennbar.
Die "@"-Zeichen sind bedeutungslos ... ist nur zur Echo-unterdrückung am Prompt.
Grüße
Biber
Nicht so ganz, ich finde ja toll was Biber da interpreiert hat, aber
jetzt fehlt mir die einstellung, dass er den ERSTEN gefundenen wert weiterverarbeitet. Wie folgt.
meinst du jetzt das du hier NUR den ersten gefundenen Wert bearbeiten willst?
dann soll er den nächsten wert genauso bearbeiten.
Hier fehlt mir der Zusammenhang und vor allem ein Ist-Soll-Vergleich der Eingangsdaten.
Falls du nur den ersten von mehreren möglichen Werten berabeiten willst:
Gruß
LotPings
for /f "tokens=1* delims==" %%i in ('findstr /i /b "path=" "%ini%"') do set "js=%%j"
for /f "usebackq delims=" %%k in ("%Datei%") do set "Line=%%k" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%t%"
zur schnelleren bearbeitung würde ich denke, dass noch eine abfrage ala
bei mir nimmt er zur zeit leider nur die LETZTE gefundene zeile (wenn nur eine gefunden wird nimmt er natürlich die)
ihr könnt bestimmt helfen
Vielleicht hat Biber das ja schon getan 'findstr /i /b "%von%" "%js%"'
ihr könnt bestimmt helfen
Falls du nur den ersten von mehreren möglichen Werten berabeiten willst:
Set "js=" 2>NUL
for /f "tokens=1* delims==" %%i in ('findstr /i /b "path=" "%ini%"') do If not defined js set "js=%%j"
Gruß
LotPings
dto, schönen Abend,
deine Anforderungen sind ja ganz schön variabel.
Das mit dem & ist kein Problem, kannst du aber einfach ausprobieren.
Wenn du Alle willst pack die Befehle in zus. Klammern oder eine Subroutine.
Wenn du z.Bsp. nur den 3. willst, brauchst du einen Zähler, und für den brauchst du Delayed Expansion oder eine Subroutine.
Gruß
LotPings
deine Anforderungen sind ja ganz schön variabel.
Das mit dem & ist kein Problem, kannst du aber einfach ausprobieren.
Wenn du Alle willst pack die Befehle in zus. Klammern oder eine Subroutine.
Wenn du z.Bsp. nur den 3. willst, brauchst du einen Zähler, und für den brauchst du Delayed Expansion oder eine Subroutine.
@Echo off & Setlocal EnableDelayedExpansion
Set X=0
for /f "tokens=1* delims==" %%i in ('findstr /i /b "path=" "%ini%"') do Set /A "X+=1"& If !X! EQU 3 set "js=%%j"
Gruß
LotPings
Na dann beeile ich mich wohl besser
Dein 2. Beispiel ganz oben könntest du auch so schreiben:
Alles Gute!
LotPings
Dein 2. Beispiel ganz oben könntest du auch so schreiben:
for /f "usebackq delims=" %%k in ("%Datei%") do (
set "Line=%%k"
set Line=!Line:%Von%=%Nach%!
echo !Line!>>"%t%"
)
Alles Gute!
LotPings
Moin connecthor,
Herzlichen Glückwunsch!
...war es denn sehr anstrengend für dich...?? *fg
Egal, wenn du schon bei einem einzigen Kiddie so durch den Wind bist, dass du dich für eine bereits gepostete Lösung und/oder dein Testen derselben im Voraus bedankst...
fang lieber erstmal keine Folgeprojekte an...*gg
Grüße
Biber
Herzlichen Glückwunsch!
...war es denn sehr anstrengend für dich...?? *fg
da habe ich zwischen windeln und scheien ein paar minuten zeit das mal zu testen.
Da fehlt ein Buchstabe .... nein, ich möchte nicht raten, wo und welcher...schönen dank im vorraus!!!
Dafür ist hier einer zuviel...Egal, wenn du schon bei einem einzigen Kiddie so durch den Wind bist, dass du dich für eine bereits gepostete Lösung und/oder dein Testen derselben im Voraus bedankst...
fang lieber erstmal keine Folgeprojekte an...*gg
Grüße
Biber
Hallo connecthor
Herzlichen Glückwunsch auch von mir
also cmd aufrufen for /? eingeben
und dann sollte da vielleicht ne Liste kommen.
Aber wie gesagt, ich bin mir nicht sicher.
MfG Karsten
Herzlichen Glückwunsch auch von mir
noch kurz ne frage... wo finde ich ne übersicht über die strings von FOR ? ich verwende immer %i du hast bei deinem
letzten tipp %k verwendet... wo liegt der unterschied?
Ich persönlich kenn den Unterschied zwar jetzt nicht aber ich vermute mal, dass du bei der kommandozeilenhilfe fündig wirst.letzten tipp %k verwendet... wo liegt der unterschied?
also cmd aufrufen for /? eingeben
und dann sollte da vielleicht ne Liste kommen.
Aber wie gesagt, ich bin mir nicht sicher.
MfG Karsten
Moin connecthor,
Das wird für dich als junger Vater in der Einarbeitung auch die nächsten paar Monate keinen grossen Unterschied machen...*gg
Erlaubt und dokumentiert sind a-z und A-Z.
Einige Batch-Schroter lassen die Zählvariablen mit %a, %b %c.. beginnen für das erste, zweite, dritte... Token.
Andere haben Präferenzen für %x, %y, %z
Andere verwenden Grossbuchstaben %A, %B, %C ..
Andere (so wie ich) verwenden %i, %j .... weil Zähler in anderen Skript-Sprachen meist so benamst werden.
Bei einem Variablennamen "i" weiss jeder Coder: "Aha, ist eine FOR/LOOP/Whatever-Zählvariable".
Dass ich hier mal %k fürs erste anzusprechende Token verwendet habe --> hatte keine tiefer gehende Bedeutung.
Grüße
Biber
Das wird für dich als junger Vater in der Einarbeitung auch die nächsten paar Monate keinen grossen Unterschied machen...*gg
noch kurz ne frage... wo finde ich ne übersicht über die strings von FOR ?
Hat kkboy94 treffsicher beantwortet..ich verwende immer %i du hast bei deinem letzten tipp %k verwendet... wo liegt der unterschied?
Wie du die Laufvariable nennst, ist im Rahmen der 58 möglichen Zeichen vollkommen beliebig.Erlaubt und dokumentiert sind a-z und A-Z.
Einige Batch-Schroter lassen die Zählvariablen mit %a, %b %c.. beginnen für das erste, zweite, dritte... Token.
Andere haben Präferenzen für %x, %y, %z
Andere verwenden Grossbuchstaben %A, %B, %C ..
Andere (so wie ich) verwenden %i, %j .... weil Zähler in anderen Skript-Sprachen meist so benamst werden.
Bei einem Variablennamen "i" weiss jeder Coder: "Aha, ist eine FOR/LOOP/Whatever-Zählvariable".
Dass ich hier mal %k fürs erste anzusprechende Token verwendet habe --> hatte keine tiefer gehende Bedeutung.
Grüße
Biber
@connecthor: Auch von mir einen herzlichen Glückwunsch und ich wünsche dir gute Nerven
Ohne Verrenkungen wie Escapen gibt es nur diese eine Folge:
Diese Datei
Ausgewertet mit dieser Batch
erzeugt diese Ausgabe:
Gruß
LotPings
Wie du die Laufvariable nennst, ist im Rahmen der 58 möglichen Zeichen vollkommen beliebig.
Erlaubt und dokumentiert sind a-z und A-Z.
Möglich sind darüber hinaus etliche weitere (Sonder-)Zeichen und auch alle Ziffern - empfehlen kann man deren Verwendung aber nur wenn man die (meiner Erfahrung nach) längst mögliche Sequenz von 31 tokens bei einem for /f auswerten möchte.Erlaubt und dokumentiert sind a-z und A-Z.
Ohne Verrenkungen wie Escapen gibt es nur diese eine Folge:
?@ABC...XYZ[\]
die das ermöglicht.Diese Datei
Test.txt
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132
@Echo off
for /f "tokens=1-31 delims=," %%? in (test.txt) do (
Echo %%? %%@ %%A %%B %%C
Echo %%D %%E %%F %%G %%H
Echo %%I %%J %%K %%L %%M
Echo %%N %%O %%P %%Q %%R
Echo %%S %%T %%U %%V %%W
Echo %%X %%Y %%Z %%[ %%\
Echo %%]
Echo ==============================)
>For-Tokens.cmd
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
26 27 28 29 30
31
==============================
101 102 103 104 105
106 107 108 109 110
111 112 113 114 115
116 117 118 119 120
121 122 123 124 125
126 127 128 129 130
131
==============================
Gruß
LotPings
Moin Lotpings,
in der Tat, es snd dann mehr als 58 mögliche Zeichen - die Variante mit den Ziffern kannte ich auch noch nicht.
Also sind ohne Maskierung möglich
roundabout 75 mögliche Zeichen.
Aber eben maximal 31 Token pro Zeile.
Grüße
Biber
in der Tat, es snd dann mehr als 58 mögliche Zeichen - die Variante mit den Ziffern kannte ich auch noch nicht.
Also sind ohne Maskierung möglich
- A-Z, a-Z ---------> 2x26 = 52 Zeichen
- 0-9 ---------> 10 Zeichen
- @, !, ?, _, ], [ , }, {, /, \ ----> 10 Zeichen
- + ein paar Exoten/Maskierte
roundabout 75 mögliche Zeichen.
Aber eben maximal 31 Token pro Zeile.
Grüße
Biber
Hallo,
mit Verspätung, versuch mal dies (ungetestet)
Gruß
LotPings
einige Fehlerchen inzwischen beseitigt
PS: Von und Nach musst du natürlich noch Irgendwo definieren
mit Verspätung, versuch mal dies (ungetestet)
@Echo off
Setlocal EnableDelayedExpansion
Set IniFile="d:\test\test.ini"
For /f "UseBackQ Tokens=1,* Delims==" %%A in (%IniFile%) Do Call :ProcessFile "%%B\prefs.js"
Goto :Eof
:ProcessFile
If Not Exist %1 Echo Nicht gefunden: %1 & Goto :Eof
Set "PrefNew=%~dpn1.NEW"
Type NUL >"%PrefNEW%"
for /f "usebackq delims=" %%k in (%1
) do set "L=%%k" & set "L=!L:%Von%=%Nach%!"& >>"%PrefNEW%" echo.!L!
Gruß
LotPings
einige Fehlerchen inzwischen beseitigt
PS: Von und Nach musst du natürlich noch Irgendwo definieren