テキスト ファイル内の非常に長い行 (おそらく数十万文字) を短い行 (8184 文字) に分割する必要がありますが、.bat
このタスクを処理できません。
しかし、PowerShellソリューションを見つけました(ここ):
(gc in.txt) -replace ".{750}" , "$&`r`n" | sc out.txt
PowerShell ウィンドウを開いて、わずかに調整したバージョンを貼り付けて750
実行8184
すると、これが機能しますが、次のように含めると.bat
...:
powershell -Command "(gc test.txt) -replace '.{8184}' , '$&`r`n' | sc temp.txt"
... 意図したとおりに動作せず、挿入されます...
`r`n
... 8184 文字目ごとに (申し訳ありませんが、これをインライン フォーマットすることはできません)。
私が利用しようとしたのは:
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"
しかし、うまく動作しません。何が問題なのでしょうか?
答え1
`r`n
は改行の正しいエスケープ シーケンスですが、問題は、一重引用符で囲まれた文字列は、二重引用符で囲まれた文字列のようにエスケープ シーケンスの評価や変数の補間を行わないため、出力にリテラル エスケープ シーケンスが残ってしまうことです。文字列を二重引用符で囲んで PowerShell に渡す必要がありますが、cmd.exe
の解釈も処理する必要があるため、これはやや面倒です。理解できる二重引用符ごとに 4 つの二重引用符を使用すると、うまくいきます。
powershell -Command "(gc test.txt) -replace '.{8184}' , """"$&`r`n"""" | sc temp.txt"