opixantos
Goto Top

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

Content-ID: 22057

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

Ausgedruckt am: 08.11.2024 um 00:11 Uhr

Lord-Helmi
Lord-Helmi 21.12.2005 um 12:56:22 Uhr
Goto Top
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
opixantos
opixantos 21.12.2005 um 19:41:36 Uhr
Goto Top
hi lord danke für deinen tipp.. ja ich möchte mich in die batch programiereung einarbeiten.. meine frage bezüglich for.. der text oben ist aus einer regi in eine txt ausgegeben das kann ich zumindest jedoch den superman kann ich nicht auslesen..

das mit test2 "c" "500" habe ich per find /v gelöst alle anderen text werden in eine datei eingefügt und und zuletzt füge ich die per echo xy >> text.txt ein das klappt gut..

ich habe wie geschrieben die mühe mit dem for schleifen.. ich verstehe das mit skip token delims und eol nicht so ganz.. wie kann ich den superman auslesen..

ich habe es mal mit find

reg query HKEY_CURRENT_USER\Software\game\chicka /v LastGameNameUsed >temp.txt
find /v "HKEY_" temp.txt > temp2.txt
DEL /s/q/f temp.txt
find /v "!" temp2.txt > temp.txt
DEL /s/q/f temp2.txt

jetzt habe ich in der temp.txt


TEMP2.TXT

TEMP.TXT


xxxxLastGameNameUsedxxxxxtabxxxxxREG_SZxxxxxtabxxxxxsuperman

wie kann ich die leerzeichen und diese ---------- TEMP2.TXT löschen damit nur noch

xxxxLastGameNameUsedxxxxxtabxxxxxREG_SZxxxxxtabxxxxxsuperman

in der txt steht damit wehere es einfache um es auszulesen und in den %nickname% per set nickname=%%i zu setzen

es hat eben bei xxxxLastGameNameUsedxxxxxtabxxxxxREG_SZxxxxxtabxxxxxsuperman
auch leerzeichen und tab ich weis nicht wie ich die auch ausklammern kann..

x leerzeichen
xxxxxtabxxxxx tab

thx
Biber
Biber 21.12.2005 um 21:46:20 Uhr
Goto Top
Moin opixantos,

das meiste hast Du ja schon gelöst, und gar nicht so schlecht... face-wink

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
opixantos
opixantos 22.12.2005 um 23:45:50 Uhr
Goto Top
hallo bibe ich danke dir..

For /F "tokens=3 delims= " %%a in ('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" '

hab da einige ergenzung da es sonst bei mir nicht läuft

jedoch giebt er wenn ich echo %LastGameNameUsed% > test.txt in die test.txt ECHO ist eingeschaltet (ON).

bei der temp steht jetzt nur noch dank dir

xxxxLastGameNameUsedxxxxxtabxxxxxREG_SZxxxxxtabxxxxxsuperman

aber superman wird nicht ausgegeben face-sad

thx opi
opixantos
opixantos 23.12.2005 um 00:06:14 Uhr
Goto Top
For /F "tokens=3 delims=   " %%a in ('find "REG_SZ" temp.txt') do set "nicki=%%a"

damit ging es dan
mal schauen was als nechstes anstehet

big thx biber & Co.
Biber
Biber 23.12.2005 um 00:10:54 Uhr
Goto Top
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
Biber
Biber 23.12.2005 um 00:10:57 Uhr
Goto Top
Biber
Biber 23.12.2005 um 00:22:58 Uhr
Goto Top
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 face-wink
opixantos
opixantos 23.12.2005 um 00:23:29 Uhr
Goto Top
biber big thx das war eben mein fehler dort.. ich wusste nicht was für zeichen bei delims kommt da es leer war ;) aber das ^|find ging irgend wie nicht face-sad also hab ich den ^ weg gemacht und jetzt geht alles.. superman wird angezeigt :D