kali64
Goto Top

Batch - Strings ersetzen (mit Sonderzeichen)

Batch - Strings ersetzen (mit Sonderzeichen)

Hallo allerseits,

ich möchte per batch eine config-datei öffnen, Strings suchen und an diese dann Werte anhängen.
Das batch läuft auch, nur leider gibt es Probleme mit den Sonderzeichen, die ich einfach nicht bewerkstelligt bekomme.

Hier mein Quelltext:

@echo off & setlocal enabledelayedexpansion 
set "Datei=para.txt"   
set "zuersetzen=printer_name"  
set "ersetzenmit=printer_name = 9966558"  
set "t=%temp%\text.tmp"   
if exist "%t%" del "%t%"   
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set Line=!Line:%zuersetzen%=%ersetzenmit%! & echo !Line! >> "%t%"   
move /y "%t%" "%Datei%"  



para.txt:

printer_name = 

Klappt alles wunderbar, nur, dass im Anschluss "printer_name = 9966558=" und nicht "printer_name = 9966558" in der Datei "para.txt" steht.

Wenn ich set "zuersetzen=printer_name = " eingebe, gibt er mir sogar "=printer_name = 9966558=" aus.

Hat zufällig jemand eine Idee?

Vielen Dank schonmal im Vorraus für eure Bemühungen

Content-Key: 148950

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

Printed on: April 26, 2024 at 12:04 o'clock

Member: pieh-ejdsch
pieh-ejdsch Aug 13, 2010 at 13:08:51 (UTC)
Goto Top
moin Kali64,

Du erstzt ja auch (nur) den teil "printer_name" mit "printer_name = 9966558"

da ist ja klar das aus "printer_name =" das " =" dahinter noch übrigbleibt.

demo am Promt:
set a=abc =
set a=%a:abc=%
echo %a%
Ausgabe:
 =


Gruß Phil
Member: kali64
kali64 Aug 13, 2010 at 13:23:46 (UTC)
Goto Top
Hi Phil,

ja, das ist mir bewusst. Das Problem ist nur, dass wenn ich set "zuersetzen=printer_name = " schreibe, dann gibt er mir komischerweise
"=printer_name = 9966558=" in meinem File aus.

Grüße kali
Mitglied: 60730
60730 Aug 13, 2010 at 13:35:50 (UTC)
Goto Top
moin

Zeile 4
set "ersetzenmit=printer_name ^= 9966558"

Dann klappert das auch - obwohl ohne echo off.....

Gruß
Member: bastla
bastla Aug 13, 2010 at 13:41:01 (UTC)
Goto Top
Hallo kali64 und willkommen im Forum!

Versuch es so:
@echo off & setlocal
set "Datei=para.txt"   
set "zuersetzen=printer_name ="  
set "ersetzenmit=printer_name ^= 9966558"  
set "t=%temp%\text.tmp"   
del "%t%" 2>nul  
for /f "usebackq delims=" %%i in ("%Datei%") do (echo %%i|findstr /b /c:"%zuersetzen%">nul && echo %ersetzenmit%||echo %%i)>>"%t%"  
move "%t%" "%Datei%"  
[Edit] Zeile 7 noch etwas "behübscht" face-wink [/Edit]

Grüße
bastla
Member: pieh-ejdsch
pieh-ejdsch Aug 13, 2010 at 13:53:10 (UTC)
Goto Top
müsste dann die Maskierung nicht in
die Variable zuersetzen
weil das erste unmaskierte = wird doch für die Zuweisung genommen

Gruß Phil
Member: bastla
bastla Aug 13, 2010 at 13:55:27 (UTC)
Goto Top
@ph
müsste dann die Maskierung nicht in
die Variable zuersetzen
... auch nicht - dann wird der String gar nicht erst gefunden ...

Grüße
bastla
Member: kali64
kali64 Aug 13, 2010 at 14:00:11 (UTC)
Goto Top
Hi TimoBeil,

das habe ich auch schon versucht, kommt leider auch wieder "=tp5_printer_name = 9966558= " raus.

Trotzden danke für die schnelle Hilfe
Member: pieh-ejdsch
pieh-ejdsch Aug 13, 2010 at 14:06:35 (UTC)
Goto Top
also ich habs grad probiert

man kann also das = aus einer Variable nicht mit Set ersetze(String=)mit(String-Irgendwas) herauslösen

naja wieder was gelernt
Gruß Phil
Member: kali64
kali64 Aug 13, 2010 at 14:09:07 (UTC)
Goto Top
Hi bastla,

bei mir ändert sich nichts in der para.txt, es wird nur eine Datei "nulfor" angelegt ohne Inhalt.

Grüße
kali
Member: bastla
bastla Aug 13, 2010 at 14:16:45 (UTC)
Goto Top
Hallo kali64!

Ich habe mit
printer
printer_name =
printer_location =
als "para.txt" und der oben stehenden (wieder heruntergeladenen) Batch-Version folgendes Ergebnis erhalten:
printer
printer_name = 9966558
printer_location =
Auch wenn ich das (ohnehin unnötige) "^" in Zeile 4 entferne, funktioniert es weiterhin ...

Wenn Du Timos anderen Tipp (das Vermeiden von "echo off") umsetzt, solltest Du dem Fehler leichter auf die Spur kommen ...
[Edit] ... zB, dass es zwischen "nul" in Zeile 6 und "for" in Zeile 7 eine Zeilenschaltung geben sollte ... [/Edit]

Grüße
bastla
Member: Biber
Biber Aug 13, 2010 at 14:23:56 (UTC)
Goto Top
Moin bastla,

Zitat von @bastla:
Ich habe mit [...] der oben stehenden (wieder heruntergeladenen) Batch-Version folgendes Ergebnis erhalten:

Du würdest den Fehler bestimmt sofort finden, wenn kali64 seine Version postet und du diese herunterlädst... face-wink

Grüße
Biber
Member: bastla
bastla Aug 13, 2010 at 14:29:25 (UTC)
Goto Top
@Biber
Hoffentlich müsste ich sie noch nicht mal runterladen ... face-wink

Grüße
bastla
Member: kali64
kali64 Aug 13, 2010 at 14:55:30 (UTC)
Goto Top
Juhuu...es RENNT!!!

Keine Ahnung, warum es gerade eben nicht funktioniert hat, aber jetzt läuft es ohne Fehler.

Vielen Dank für eure schnelle Hilfe, ihr seid echt Klasse!!!

Viele Grüße + angenehmen Abend noch
Kali