バッチ ファイルで使用する場合、1 つの Powershell コマンドを複数の行に分割しますか?

バッチ ファイルで使用する場合、1 つの Powershell コマンドを複数の行に分割しますか?

このコマンドは、コマンドがバッチ ファイル内で次のように 1 行に記述されている場合に、txtファイル内の 、およびのインスタンスOldText1を、および に置き換えます。OldText2OldText3NewText1NewText2NewText3

start /wait /min Powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Get-ChildItem 'Old and New text.txt' | ForEach-Object {(Get-Content $_) -replace 'OldText1', 'NewText1' -replace 'OldText2', 'NewText2' -replace 'OldText3', 'NewText3' | Set-Content $_.FullName}"

シンボルを使用してコマンドを分割しようとすると^(通常はバッチ ファイルで機能します)、機能しません。たとえば、これは機能せず、txt ファイルでは何も置き換えられません。

start /wait /min Powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Get-ChildItem 'Old and New text.txt' | ForEach-Object {(Get-Content $_) ^
-replace 'OldText1', 'NewText1' ^
-replace 'OldText2', 'NewText2' ^
-replace 'OldText3', 'NewText3' ^
| Set-Content $_.FullName}"

バックティックの使用も機能しません (ただし、これは PS1 スクリプトではないため機能しません)。

start /wait /min Powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Get-ChildItem 'Old and New text.txt' | ForEach-Object {(Get-Content $_) `
-replace 'OldText1', 'NewText1' `
-replace 'OldText2', 'NewText2' `
-replace 'OldText3', 'NewText3' `
| Set-Content $_.FullName}"

午前中ずっとチャットボットに質問しているのですが、何もうまくいきません。半分の時間は、コマンドを 1 行にまとめ直し、ぐるぐる回っているだけです。

私がやろうとしていることは不可能でしょうか?

コマンドを複数行に分割する理由は、単純に、(最終的には) 巨大なコマンドを横に見なくても、何が置き換えられるのかを読めるようにするためです。これよりはるかに多くの置換コマンドを追加するつもりですが、置換コマンドが 3 つあってもまだ機能していません。

なぜこれが機能しないのか知っている人がいたら、事前に感謝します。

答え1

これは私にはよく分かりません:

Get-ChildItem 'Old and New text.txt' | ForEach-Object {(Get-Content $_)

この部分は、フォルダー内のアイテム、正確にはファイルであるアイテムを取得することを示していますが、コマンドはすぐに、コンテンツ内で文字列の置換が実行されるファイルを定義します。

その部分を削除することで、置換は期待どおりに行われましたが、同じ置換を行う複数のファイルの場合は、質問を編集することをお勧めします。混乱しますが、コンテンツの処理には「Get-ChildItem 'Old and New text.txt' | ...」は必要ではなく、直接使用できます。Get-Content 'Old and New text.txt' ^|...

start "Start PS1/CMD" /wait /min PowerShell.exe -c  ^
"$Strings=Get-Content 'Old And New Text.txt' ^| %%  ^
   ^{ $_ -replace('OldText1','NewText1')^
         -replace('OldText2','NewText2')^
         -replace('OldText3','NewText3')^}^
  ; sc 'Old And New Text.txt' -Value $Strings -Force"

関連情報