batch text auslesen und text ersätzen
leer
! REG.EXE VERSION 3.0
leer
HKEY_CURRENT_USER\Software\game\chicka
LastGameNameUsed REG_SZ superman
1# wie kann ich mit for den superman auslesen.. der superman könnte aber auch viellänger heissen z.b. supermanduperman
2# wie kann ich in einem txt ein text suchen: test 500 nun soll er die txt öffnen und im wirwar die zeile mit test finden und löschen dabei ersätzt er es durch test "500"
oder test2 "c" "500" er soll den test2 "c" suchen und durch test2 "c" "500" ersätzen..
ich weis das die for frage schon mal diskutiert wurde jedoch verstehe ich die skip token delims eol oder /f /B /R nicht so ganz.. ich weis nicht wie ich forgehen soll..
ich hoffe jemand kann mir helfen und erleutern wie das ganze funzt..
thx
! REG.EXE VERSION 3.0
leer
HKEY_CURRENT_USER\Software\game\chicka
LastGameNameUsed REG_SZ superman
1# wie kann ich mit for den superman auslesen.. der superman könnte aber auch viellänger heissen z.b. supermanduperman
2# wie kann ich in einem txt ein text suchen: test 500 nun soll er die txt öffnen und im wirwar die zeile mit test finden und löschen dabei ersätzt er es durch test "500"
oder test2 "c" "500" er soll den test2 "c" suchen und durch test2 "c" "500" ersätzen..
ich weis das die for frage schon mal diskutiert wurde jedoch verstehe ich die skip token delims eol oder /f /B /R nicht so ganz.. ich weis nicht wie ich forgehen soll..
ich hoffe jemand kann mir helfen und erleutern wie das ganze funzt..
thx
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 22057
Url: https://administrator.de/contentid/22057
Ausgedruckt am: 08.11.2024 um 00:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo,
vielleicht kannst du deine Fragen nochmal neu formulieren. Momentan habe ich keine Ahnung, was du willst. Evtl. gib uns das ganze "drumherum" auch mit an, das kann durchaus hilfreich sein.
Wenn du Fragen zur for-Schleife hast. kannst du die hier gerne stellen. Wenn du dich in Batch im allgemeinen etwas einarbeiten willst, guck dir doch mal die Tutorials von Biber dazu an. Die sind wirklich gut.
Gruß
Michael
vielleicht kannst du deine Fragen nochmal neu formulieren. Momentan habe ich keine Ahnung, was du willst. Evtl. gib uns das ganze "drumherum" auch mit an, das kann durchaus hilfreich sein.
Wenn du Fragen zur for-Schleife hast. kannst du die hier gerne stellen. Wenn du dich in Batch im allgemeinen etwas einarbeiten willst, guck dir doch mal die Tutorials von Biber dazu an. Die sind wirklich gut.
Gruß
Michael
Moin opixantos,
das meiste hast Du ja schon gelöst, und gar nicht so schlecht...
Bei den TABs begibst Du Dich wieder in den vo M$ ...na, sagen wir mal etwas lieblos dokumentierten Bereich. Ich werde das bei Gelegenheit mal in meinem Batch-Tut IV ("Undokumentierte Bugs, Features und Workarounds im Batch") etwas ausführlicher auswalzen.
Also, wie Du richtig gemerkt hast, kommt bei Reg.exe (und einigen anderen CMD-Befehlen) ein TAB als Trennzeichen zurück.
Im FOR-Befehl kannst Du auch den TAB als "Delimiter" (also Parameter delims=.... angeben. Aber: Nur im Batch, mit einem Editor, nicht an der CMD-Line.
Wenn Deine Zeile so aussieht: "xxxxLastGameNameUsedxxxxxtabxxxxxREG_SZxxxxxtabxxxxxsuperman .....(mit TABS und Spaces zwischen den Tokens), dann im Batch:
...
For /F "tokens=3 delims= " %%a ('find "LastGameNameUsed" temp.txt') do set "LastGameNameUsed=%%a"
:: delims ist ein TAB gefolgt von einem LEERZEICHEN
...
-oder- ohne den Zwischenschritt mit der Temp-Datei folgendes in die Klammer vor dem DO:
'reg query HKEY_CURRENT_USER\Software\game\chicka /v LastGameNameUsed ^|find "LastGameNameUsed" '
(Rest wie oben.)
Zum Thema Reg-Key ( mit REG-exe oder RegEdit.exe ) auslesen gibt es auch Tutorials hier in Batch und Shell.
Zum Thema FOR..IN..DO.. hatte ich diese Woche etwas weiter ausgeholt hier: Hilfe bei Batchdatei
Den Parameter "eol.." in der FOR-Anweisung vergiss einfach; kommt auch in Batch-Tut IV. Unwichtig jetzt.
HTH Biber
das meiste hast Du ja schon gelöst, und gar nicht so schlecht...
Bei den TABs begibst Du Dich wieder in den vo M$ ...na, sagen wir mal etwas lieblos dokumentierten Bereich. Ich werde das bei Gelegenheit mal in meinem Batch-Tut IV ("Undokumentierte Bugs, Features und Workarounds im Batch") etwas ausführlicher auswalzen.
Also, wie Du richtig gemerkt hast, kommt bei Reg.exe (und einigen anderen CMD-Befehlen) ein TAB als Trennzeichen zurück.
Im FOR-Befehl kannst Du auch den TAB als "Delimiter" (also Parameter delims=.... angeben. Aber: Nur im Batch, mit einem Editor, nicht an der CMD-Line.
Wenn Deine Zeile so aussieht: "xxxxLastGameNameUsedxxxxxtabxxxxxREG_SZxxxxxtabxxxxxsuperman .....(mit TABS und Spaces zwischen den Tokens), dann im Batch:
...
For /F "tokens=3 delims= " %%a ('find "LastGameNameUsed" temp.txt') do set "LastGameNameUsed=%%a"
:: delims ist ein TAB gefolgt von einem LEERZEICHEN
...
-oder- ohne den Zwischenschritt mit der Temp-Datei folgendes in die Klammer vor dem DO:
'reg query HKEY_CURRENT_USER\Software\game\chicka /v LastGameNameUsed ^|find "LastGameNameUsed" '
(Rest wie oben.)
Zum Thema Reg-Key ( mit REG-exe oder RegEdit.exe ) auslesen gibt es auch Tutorials hier in Batch und Shell.
Zum Thema FOR..IN..DO.. hatte ich diese Woche etwas weiter ausgeholt hier: Hilfe bei Batchdatei
Den Parameter "eol.." in der FOR-Anweisung vergiss einfach; kommt auch in Batch-Tut IV. Unwichtig jetzt.
HTH Biber
Tja, opixantos,
kann aber nichts Gravierendes mehr sein - vielleicht habe ich etwas bei Deinem Beispiel falsch interpretiert und irgendwo einen TAB zuviel....
Also, ich hab Deinen Output, den Du gepostet hast übernommen
xxxxLastGameNameUsedxxxxxtabxxxxxREG_SZxxxxxtabxxxxxsuperman
und so in eine Textdatei temp.dat kopiert (Cut & Paste).
Mit meinem Editor habe ich alle x'e mit Leerzeichen übertippt und alle "tab"s durch TABs ersetzt.
Sieht also so aus:
---inhalt temp.txt
LastGameNameUsed REG_SZ superman
---ende temp.txt
---Mein einzeiliger TestLUName.Bat (wieder mit "delims=TAB+LEERZEICHEN":
$cmd$ type testLUName.bat
For /F "tokens=3 delims= " %%a in (temp.txt) do echo set "LastGameNameUsed=%%a"
Z:\>testLUName
(Output)
$cmd$ For /F "tokens=3 delims= " %a in (temp.txt) do echo set "LastGameNameUsed=%a"
$cmd$ echo set "LastGameNameUsed=superman"
set "LastGameNameUsed=superman"
Works as designed. Beaverproofed.
Also entweder habe ich Deine x'e und "tab"s fehlinterpretiert oder Dir fehlt ein TAB oder ein SPACE beim "delims"- Parameter.
Wenn Du das nicht zum Laufen bekommst, schick mir den Reg.exe-Output als Textdatei und Deinen Batch-Schnipsel.
Bei mir laufen die meisten Bätchelchen nach relativ kurzem Sträuben freiwillig.
Und von diesem Zeitpunkt an auch sogar unter Wasser.
Bis dann
Biber
kann aber nichts Gravierendes mehr sein - vielleicht habe ich etwas bei Deinem Beispiel falsch interpretiert und irgendwo einen TAB zuviel....
Also, ich hab Deinen Output, den Du gepostet hast übernommen
xxxxLastGameNameUsedxxxxxtabxxxxxREG_SZxxxxxtabxxxxxsuperman
und so in eine Textdatei temp.dat kopiert (Cut & Paste).
Mit meinem Editor habe ich alle x'e mit Leerzeichen übertippt und alle "tab"s durch TABs ersetzt.
Sieht also so aus:
---inhalt temp.txt
LastGameNameUsed REG_SZ superman
---ende temp.txt
---Mein einzeiliger TestLUName.Bat (wieder mit "delims=TAB+LEERZEICHEN":
$cmd$ type testLUName.bat
For /F "tokens=3 delims= " %%a in (temp.txt) do echo set "LastGameNameUsed=%%a"
Z:\>testLUName
(Output)
$cmd$ For /F "tokens=3 delims= " %a in (temp.txt) do echo set "LastGameNameUsed=%a"
$cmd$ echo set "LastGameNameUsed=superman"
set "LastGameNameUsed=superman"
Works as designed. Beaverproofed.
Also entweder habe ich Deine x'e und "tab"s fehlinterpretiert oder Dir fehlt ein TAB oder ein SPACE beim "delims"- Parameter.
Wenn Du das nicht zum Laufen bekommst, schick mir den Reg.exe-Output als Textdatei und Deinen Batch-Schnipsel.
Bei mir laufen die meisten Bätchelchen nach relativ kurzem Sträuben freiwillig.
Und von diesem Zeitpunkt an auch sogar unter Wasser.
Bis dann
Biber
Sorry, war über Kreuz gepostet..
Wenn das Phänomen so ist, wie von Dir gepostet, dann verwende bitte beim FIND-Aufruf den Schalter /i (=ignoriere Klein/Großscheibung)
Dann steht in der Registry "LastgameNameUser" und geprüft wird "LastGameNameUser" (oder so ähnlich) und die sind ungleich. Wenn man/frau es genau nimmt.
Also ändern:
'reg query HKEY_CURRENT_USER\Software\game\chicka /v LastGameNameUsed^|find "LastGameNameUsed" '
in
'reg query HKEY_CURRENT_USER\Software\game\chicka /v LastGameNameUsed^|find /i "LastGameNameUsed" '
Und wichtig ist das "maskierte" Pipezeichen (das "^" vor dem "|"), das fehlt in Deinem Antwortposting !! Grad gemerkt. Das könnte auch der Fehler sein.
Das schaffen wir schon, dass bei Dir "superman" statt "nicki" rauskommt
Wenn das Phänomen so ist, wie von Dir gepostet, dann verwende bitte beim FIND-Aufruf den Schalter /i (=ignoriere Klein/Großscheibung)
Dann steht in der Registry "LastgameNameUser" und geprüft wird "LastGameNameUser" (oder so ähnlich) und die sind ungleich. Wenn man/frau es genau nimmt.
Also ändern:
'reg query HKEY_CURRENT_USER\Software\game\chicka /v LastGameNameUsed^|find "LastGameNameUsed" '
in
'reg query HKEY_CURRENT_USER\Software\game\chicka /v LastGameNameUsed^|find /i "LastGameNameUsed" '
Und wichtig ist das "maskierte" Pipezeichen (das "^" vor dem "|"), das fehlt in Deinem Antwortposting !! Grad gemerkt. Das könnte auch der Fehler sein.
Das schaffen wir schon, dass bei Dir "superman" statt "nicki" rauskommt