wisch
Goto Top

Backslash mit maskierten (doppelten) Backslash in Textdatei ersetzen

Hallo.

Hier habe ich schon einmal gefragt, wie man Textstellen per Batch-Script in einer Textdatei austauscht.
Das klappt wunderbar... bis auf ein neues Problem:

Aus einem Backslash soll ein maskierter, also doppelter Backslash werden.

Leider macht er aus einem nicht zwei sondern vier!
Erklären könnte ich mir das so:
Es wird der Backslash gefunden und durch zwei ersetzt.
Das nächste gefundene Zeichen ist (jetzt!) ja auch ein Backslash, der wiederrum ersetzt wird... usw.

Als Zwischenlösung habe ich das auch in zwei Schritten/Aufrufen versucht.
Soll heißen, ich habe den Backslash erst durch eine eigene, eindeutige Zeichenkette ersetzt und diese im zweiten Schritt durch den doppelten Backslash... funktioniert allerdings auch nicht?
<KORREKTUR> Die Zwischenlösung hat doch funktioiniert, hatte noch einen anderen Fehler im Script. face-wink

Wie kann ich das verhindern?
Leider sind mir zum Zeitpunkt des Austausches die Zeichen vor und/oder nach dem vorhandenen Backslash nicht bekannt, sodass ich diese nicht in mein Suchmuster
mit aufnehmen kann...


Danke für Eure Hilfe,
WiSch

Content-Key: 158390

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

Printed on: April 23, 2024 at 19:04 o'clock

Mitglied: 60730
60730 Jan 11, 2011 at 14:52:02 (UTC)
Goto Top
moin,

sinnvoll wäre es deinen umgebauten Bastla zu kennen...

@echo off & setlocal
set "Datei=GroupInfo_2.txt"  

set R=%temp%\Replace5.vbs
>%R%  echo F = WScript.Arguments(0)
>>%R% echo Set fso = CreateObject("Scripting.FileSystemObject")  
>>%R% echo T = fso.OpenTextFile(F).ReadAll
>>%R% echo T = Replace(T, "\", "\\")  
>>%R% echo fso.CreateTextFile(F).Write T 

for %%f in ("%Datei%") do cscript //nologo %R% "%%f"  

Works as designed....

Gruß
Member: bastla
bastla Jan 11, 2011 at 14:58:00 (UTC)
Goto Top
Hallo WiSch!

Nach dem ursprünglichen Muster funktioniert
@echo off & setlocal
set "Datei=Datei.txt"  

set R=%temp%\ReplaceIt.vbs
>%R%  echo F = WScript.Arguments(0)
>>%R% echo Set fso = CreateObject("Scripting.FileSystemObject")  
>>%R% echo T = fso.OpenTextFile(F).ReadAll
>>%R% echo T = Replace(T, "\", "\\")  
>>%R% echo fso.CreateTextFile(F).Write T 

cscript //nologo %R% "%Datei%" 
bei mir.

Grüße
bastla

[Edit] @t-mo: Bist Du aber schnell ... face-wink [/Edit]
Member: WiSch
WiSch Jan 11, 2011 at 15:48:46 (UTC)
Goto Top
Hallo zusammen.

Was auch hilft: AUGEN AUF!

Ich habe genau Eure Lösung als erstes Versucht.
Leider dabei aber übersehen, das ich in meinem Script mehrere Dateien entsprechend anpassen will.
Copy'n'Paste ist dabei ok, aber nur, wenn man auch den Dateinamen dabei anpasst. face-sad

Letztlich bin ich aber trotzdem bei meiner Zwischenlösung geblieben, da in der ursprünglichen Datei der einfache und der doppelte Backslash vorkommen kann.
Korrigiert werden soll aber nur der Einfache, weshalb ich beide im ersten Schritt durch einen jeweils eindeutigen Platzhalter und dann im zweiten Schritt beide wieder zum doppelten Backslash ersetze.

Danke für die schnelle Hilfe, ich geh jetzt zum Optiker. face-wink

Grüße,
WiSch