Echo der String mit Doppelten Anführungszeichen Ausgabe-Datei mithilfe der Windows-Batch
Versuche ich zu umschreiben, eine Konfigurationsdatei mithilfe einer Windows-Batch-Datei.
Ich bin die Schleife durch die Zeilen der Datei und suchen Sie die Zeile, die ich ersetzen wollen mit einer neuen Zeile angegeben.
Habe ich eine "Funktion", schreibt 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 eine Zeichenkette mit eingebetteten doppelten Anführungszeichen.
Dann schlägt es fehl. Möglicherweise gibt es andere Zeichen, die dazu führen würde, dass es zu scheitern, zu.
Wie kann ich diese arbeiten zu können, werden alle Texte gefunden, in die Konfiguration-Datei?
- Wenn Sie möchten, dass es zuverlässig funktioniert, nicht verwenden Sie batch - verwenden von powershell oder vbscript oder einer anderen scripting-Sprache.
- Das wäre toll, aber ich glaube wirklich nicht, dass als option.
- Tatsächlich scheint das problem zu sein, die doppelte Anführungszeichen eingebettet in das echo hier: echo %Text% | findstr /C:"%markerstr%" 1>nul
- Es wird erweitert, um so etwas wie: echo #blah blah on " | findstr /C:"blabla" -- Das doppelte Anführungszeichen bewirkt, dass Probleme
- Mit verzögerte Erweiterung wird die Lösung für das spezielle problem, denke ich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie ersetzen alle
"
imText
mit^"
.^
ist das escape-Zeichen, damit der den"
behandelt werden als reguläre Zeichenkönnen Sie Folgendes versuchen:
Andere Zeichen, die verursachen könnten Sie Fehler (kann man es lösen mit der obigen Lösung) sind:
In einer windows batch shell ("Befehl") Anführungszeichen escape mit
^
auf standard-command-line SONDERN mit einem doppelten Anführungszeichen innerhalb eines double quoted string(Anmerkung: die zweite Zeile erzeugt die externe umgebenden Anführungszeichen in der Ausgabe auch)