2012-10-11 4 views
7

Ich versuche, eine Konfigurationsdatei mithilfe einer Windows-Batchdatei neu zu schreiben. Ich durchlaufe die Zeilen der Datei und suche nach der Zeile, die ich durch eine bestimmte neue Zeile ersetzen möchte.Echo von String mit doppelten Anführungszeichen in Ausgabedatei mit Windows Batch

Ich habe eine ‚Funktion‘, die die Zeile in die Datei

:AddText %1 %2 
set Text=%~1% 
set NewLine=%~2% 
echo "%Text%" | findstr /C:"%markerstr%" 1>nul 
if errorlevel 1 (
    if not "%Text%" == "" (
     setlocal EnableDelayedExpansion 
     (
      echo !Text! 
    ) >> outfile.txt 
) else (
    echo. >> outfile.txt 
) 
) else (
    set NewLine=%NewLine"=% 
    setlocal EnableDelayedExpansion 
    (
     echo !NewLine! 
) >> outfile.txt 

) 
exit /b 

Das Problem ist, wenn% Text% ist ein String mit eingebetteten Anführungszeichen schreiben. Dann schlägt es fehl. Möglicherweise gibt es andere Zeichen, die es auch scheitern lassen würden. Wie kann ich dies erreichen, um mit dem gesamten in der Konfigurationsdatei gefundenen Text arbeiten zu können?

+0

Wenn Sie es zuverlässig arbeiten mögen Verwenden Sie keine Batch-Verwendung von Powershell oder VBScript oder einer anderen Skriptsprache. –

+0

Das wäre großartig, aber ich habe das wirklich nicht als Option. –

+0

Eigentlich scheint das Problem darin zu liegen, welche Anführungszeichen in das Echo eingebettet sind: echo% Text% | findstr/C: "% markerstr%" 1> nul –

Antwort

7

Versuchen Sie, alle " in mit ^" zu ersetzen.

^ ist Charakter zu entkommen, so das die " als reguläre Zeichen

Sie folgende versuchen können behandelt werden:

:AddText %1 %2 
set _Text=%~1% 
set Text=%_Text:"=^^^"% 

... rest of your code 

REM for example if %1 is "blah"blah"blah" 
REM _Text will be blah"blah"blah 
REM Text will be blah^"blah^"blah 

Andere Zeichen, die Sie Fehler verursachen könnten (Sie es mit dem oben lösen kann Lösung) sind:

1

In einem Windows-Batch-Shell (Befehl) Doppelzitat sind Escape mit ^ auf Standard-Befehlszeile, aber mit einem doppelten Anführungszeichen in einem doppelten Anführungszeichen

echo Hello ^"Boy^" 
echo "Hello ""Boy""" 

(Bemerkung: zweite Zeile die externen umgebenden doppelten Anführungszeichen in der Ausgabe auch produzieren)

Verwandte Themen