2017-11-09 11 views
2

角括弧(> <)の間に改行を置き換えるWindowsバッチを書き込もうとしています。 私はPowerShellのすることではなくても可能な解決策を探しに新しいですが、私はPowerShellのから、次の作品を発見した:Powershellコマンドとウィンドウ内の改行改行を使用しています

(get-content input.txt) -replace "><", ">`n<" | set-content output.txt 

は、Windowsのバッチ内にこれを使用するには、私は内部でそれをラップする必要が

powershell -command "arguments" 
置き換えるテキストの周りの単一引用符は、墓のqが発生するため

powershell -command "(gc input.txt) -replace '><', '>`n<' | sc output.txt" 

しかし、もちろん、これは動作しません:

だから、最終的なコマンドは何かに似ています文字通り扱われるべき文字をエスケープする。

PSエスケープ文字が認識され、同様の回答in hereが見つかりましたが、これを試してみると、「<は予期せぬ私の検索文字列に角かっこも含まれているので、私は必要なのはもっと複雑だと思います。

+0

問題を引用するための汎用的な修正は、ここで説明する '-EncodedCommand'パラメータです。https://stackoverflow.com/a/47173505/478656 – TessellatingHeckler

答えて

1

powershell.exeコマンドラインオプションを見てください。あなたは、スクリプトブロックを使用することができます。

powershell -command {(gc input.txt) -replace "><", ">`n<" | sc output.txt} 
+0

PowerShellに既に入っている場合にのみscriptblock引数を使用できます。コマンドプロンプトインタープリタはPowerShellスクリプトブロックが何であるかを知らず、バッチファイルでは動作せず、サービス管理のために 'sc.exe'を実行しようとします。 – TessellatingHeckler

1

は、エスケープ文字と二重引用符を使用しないでください?

powershell -command "(gc d:\t\input.txt) -replace '><', ('>'+[char]10+'<') | sc d:\t\output.txt" 
0

私はこの問題を解決しました。 私も遅れ拡張を使用し、最終的なコマンドは次のとおりです。

powershell -Command "(gc !inputfile!) -replace (\"^>^<\", \"^>`n^<\") | sc !outputfile!" 

だから、実際にはエスケープ文字の3つの異なる種類を使用しています! \と^と `の組み合わせ。

論理的にはうまくいきましたが、最終的には> <で異なるエスケープを使用したランダムな試みでした。 これは、エスケープ文字をリテラルに変換する一重引用符を使用せずに、Windowsバッチ内でpowershellを使用する方法の良いリファレンスです。