Ich muss eine sehr lange Zeile in einer Textdatei (vielleicht Hunderttausende von Zeichen) in kürzere Zeilen (8184 Zeichen) aufteilen und .bat
kann 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 750
und 8184
ausführe, ABER wenn ich sie .bat
so 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`n
ist 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.exe
auch 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"