Ausführen eines Powershell-Befehls aus dem Batch

Ausführen eines Powershell-Befehls aus dem Batch

Ich muss eine sehr lange Zeile in einer Textdatei (vielleicht Hunderttausende von Zeichen) in kürzere Zeilen (8184 Zeichen) aufteilen und .batkann diese Aufgabe nicht bewältigen.

Ich habe jedoch eine PowerShell-Lösung gefunden (Hier):

(gc in.txt) -replace ".{750}" , "$&`r`n" | sc out.txt

Das funktioniert, wenn ich das PowerShell-Fenster öffne und die leicht angepasste Version dort einfüge 750und 8184ausführe, ABER wenn ich sie .batso in mein einbinde ...:

powershell -Command "(gc test.txt) -replace '.{8184}' , '$&`r`n' | sc temp.txt"

... es funktioniert nicht wie vorgesehen und fügt ein ...

`r`n

... nach jedem 8184. Zeichen (ich kann das nicht inline formatieren, tut mir leid).


Ich habe versucht, Folgendes zu nutzen:

powershell -Command "& {(gc test.txt) -replace '.{8184}' , '$&`r`n' | sc temp.txt}"

powershell -Command "(gc test.txt) -replace '.{8184}' , '$&\r\n' | sc temp.txt"

powershell -Command "(gc test.txt) -replace '.{8184}' , '$&VbCrLf' | sc temp.txt"

Aber ich schaffe es nicht, es zum Laufen zu bringen. Was ist hier das Problem?

Antwort1

`r`nist die richtige Escape-Sequenz für einen Zeilenumbruch, aber das Problem ist, dass Zeichenfolgen in einfachen Anführungszeichen nicht die Escape-Sequenzauswertung oder Variableninterpolation durchführen, die Zeichenfolgen in doppelten Anführungszeichen durchführen, daher landet die wörtliche Escape-Sequenz in Ihrer Ausgabe. Wir müssen die Zeichenfolge in doppelten Anführungszeichen an PowerShell übergeben, was etwas knifflig ist, da wir uns cmd.exeauch mit der Interpretation von befassen müssen. Die Verwendung von vier doppelten Anführungszeichen pro verstandenem doppelten Anführungszeichen erledigt die Aufgabe:

powershell -Command "(gc test.txt) -replace '.{8184}' , """"$&`r`n"""" | sc temp.txt"

verwandte Informationen