web-dev-qa-db-ja.com

バッチからPowerShellコマンドを実行する

テキストファイルの非常に長い行(おそらく数十万文字)を短い行(8184文字)に分割する必要があり、.batはこのタスクを処理できません。

ただし、PowerShellソリューションを見つけました( ここ ):

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

これは、PowerShellウィンドウを開いて、少し調整したバージョンを貼り付けると機能します。ここで、7508184ですが、それを.batに含めると次のようになります...

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

...意図したとおりに機能せず、挿入されます...

`r`n

... 8184文字ごとに(これをインラインフォーマットすることはできません、sry)。


私は利用しようとしました:

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
FatalBulletHit

`r`nは改行の正しいエスケープシーケンスですが、問題は、一重引用符で囲まれた文字列が、二重引用符で囲まれた文字列のようにエスケープシーケンスの評価や変数補間を行わないため、文字通りのエスケープシーケンスが出力。文字列を二重引用符で囲まれたPowerShellに渡す必要があります。これは、cmd.exeの解釈も処理する必要があるため、やや注意が必要です。理解された二重引用符ごとに4つの二重引用符を使用すると、次のことができます。

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