Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch - Strings ersetzen (mit Sonderzeichen)

Frage Entwicklung Batch & Shell

Mitglied: kali64

kali64 (Level 1) - Jetzt verbinden

13.08.2010, aktualisiert 15:00 Uhr, 13422 Aufrufe, 13 Kommentare

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:

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



para.txt:

01.
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
Mitglied: pieh-ejdsch
13.08.2010 um 15:08 Uhr
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
Bitte warten ..
Mitglied: kali64
13.08.2010 um 15:23 Uhr
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
Bitte warten ..
Mitglied: 60730
13.08.2010 um 15:35 Uhr
moin

Zeile 4
set "ersetzenmit=printer_name ^= 9966558"

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

Gruß
Bitte warten ..
Mitglied: bastla
13.08.2010 um 15:41 Uhr
Hallo kali64 und willkommen im Forum!

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

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
13.08.2010 um 15:53 Uhr
müsste dann die Maskierung nicht in
die Variable zuersetzen
weil das erste unmaskierte = wird doch für die Zuweisung genommen

Gruß Phil
Bitte warten ..
Mitglied: bastla
13.08.2010 um 15:55 Uhr
@PH
müsste dann die Maskierung nicht in
die Variable zuersetzen
... auch nicht - dann wird der String gar nicht erst gefunden ...

Grüße
bastla
Bitte warten ..
Mitglied: kali64
13.08.2010 um 16:00 Uhr
Hi TimoBeil,

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

Trotzden danke für die schnelle Hilfe
Bitte warten ..
Mitglied: pieh-ejdsch
13.08.2010 um 16:06 Uhr
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
Bitte warten ..
Mitglied: kali64
13.08.2010 um 16:09 Uhr
Hi bastla,

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

Grüße
kali
Bitte warten ..
Mitglied: bastla
13.08.2010 um 16:16 Uhr
Hallo kali64!

Ich habe mit
01.
printer 
02.
printer_name = 
03.
printer_location =
als "para.txt" und der oben stehenden (wieder heruntergeladenen) Batch-Version folgendes Ergebnis erhalten:
01.
printer 
02.
printer_name = 9966558 
03.
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
Bitte warten ..
Mitglied: Biber
13.08.2010 um 16:23 Uhr
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...

Grüße
Biber
Bitte warten ..
Mitglied: bastla
13.08.2010 um 16:29 Uhr
@Biber
Hoffentlich müsste ich sie noch nicht mal runterladen ...

Grüße
bastla
Bitte warten ..
Mitglied: kali64
13.08.2010 um 16:55 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...