Wie kann ich eine neue Zeile durch Ersetzen mit diesem Skript einfügen?

3

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?

Mr. Mendelli
quelle
Hört sich gut an, ich arbeite noch etwas am Skript und poste eine neue Frage, wenn nötig.
Mr. Mendelli
Keine Sorge, ich brauche nur mehr Details, um das zu beheben, und es scheint, als wäre etwas besser für eine neue Frage geeignet, die ein wenig über den Rahmen der ursprünglichen Frage hinausgeht. Es klang für mich nicht nach etwas Offensichtlichem, wie Sie im einfachen Kommentarfeld erklärt haben. Wenn Sie also mehr Details zu dem Fehler, Beispielen für den Pfad und der endgültigen Logik, die Sie in Bezug auf das Skript verwenden, haben, wäre dies ein großes Problem hilfreich und mit so viel mehr Details, könnte es genauso gut eine neue Frage machen.
Pimp Juice IT

Antworten:

3

Du kannst Geben enter image description here 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

@echo off
setlocal enableextensions disabledelayedexpansion

set search=Old string
set replace=New`r`nstring
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%'"
PAUSE
EXIT

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.

enter image description here


Ergebnisse

Vor

Old string

Nach dem

New
String

Weitere Ressourcen

Pimp Juice IT
quelle
Vielen Dank für Ihre Antwort. Diese tut Arbeit, aber es scheint nur auf einfacheren Textdokumenten zu tun. Es gibt ein Dokument, mit dem ich arbeite und das ich ausprobieren möchte. Es ist komplexer. Ihre Methode gibt diesen Fehler zurück: 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?
Mr. Mendelli
@ Mr.Mendelli Gibt es eine Möglichkeit, wie Sie versuchen können, diesen Fehler mit einem kleineren Inhalt der Beispieldatei zu beheben und mir etwas zum Testen bereitzustellen? Wenn ich testen könnte, womit Sie arbeiten, oder etwas Kleineres, das vielleicht auch dieses Problem hat, kann ich es wahrscheinlich für Sie herausfinden. Gib mir Bescheid.
Pimp Juice IT
@ Mr.Mendelli - Ich habe das Backtick-Problem mit den Kommentaren herausgefunden, also versuche es set search=;-------- MSI Parameters ---------- und dann verwenden set 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
Pimp Juice IT