Ich habe ein Stapelskript, das Text ersetzen kann, und ich möchte, dass es Zeichenfolgen ersetzt, auf die eine neue Textzeile unterhalb des Originals folgt. Ein Beispiel wäre wie folgt:
Vor:
Old string
Nach dem:
New
String
Ich habe eine Reihe von Newline-Befehlen ausprobiert, die im Batch verwendet wurden (Einige davon befinden sich auf Stack Exchange-Sites.) und keiner von ihnen funktioniert. Ich glaube, das liegt an der Syntax des Skripts. Hier ist das Skript, mit dem ich arbeite:
@echo off
setlocal enableextensions disabledelayedexpansion
set search=Old string
set replace=New string
set textFile=Test.txt
:PowerShell
SET PSScript=%temp%\~tmpStrRplc.ps1
ECHO (Get-Content "%~dp0%textFile%").replace("%search%", "%replace%") ^| Set-Content "%~dp0%textFile%">"%PSScript%"
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"
EXIT
Wie kann ich eine Newline "Injection" in mein Skript implementieren?
Antworten:
Du kannst Geben anstelle des Leerzeichens zwischen der Ersatzzeichenfolge, in der die neue Zeile eingefügt werden soll (
CRLF
) platziert werden, um das erwartete Ergebnis zu erzielen - backtick "r" backtick "n" (siehe unten).Dies erfordert nur eine kleine Änderung am vorhandenen Skript, und es funktioniert erwartungsgemäß gemäß Ihrer Beschreibung und den Ergebnissen der Beispielausgabe.
Skript
Hinweis: Achten Sie darauf, keine Leerzeichen zwischen den beiden Zeichenfolgen in das
replace=
Variable, um sicherzustellen, dass die neue Zeichenfolge keine nachgestellten oder führenden Leerzeichen enthält.Ergebnisse
Vor
Nach dem
Weitere Ressourcen
Escape-Zeichen, Trennzeichen und Anführungszeichen
Backtick-Schlüssel
quelle
You cannot call a method on a null-valued expression.
Ich habe die Zeichenfolge erfolgreich ersetzt, als es der einzige vorhandene Inhalt im Dokument war. Irgendwelche Ideen, warum das so ist?set search=;-------- MSI Parameters ----------
und dann verwendenset replace=;-------- MSI Parameters ----------`r`n.ShowSB=0
um das erwartete Ergebnis gemäß Ihrer aktualisierten Erläuterung zu erhalten. Skriptbeispiel: i.imgur.com/yEXNsI8.png und Ausgabebeispiel: i.imgur.com/q451qtb.png