在批处理文件中使用时是否将一个 Powershell 命令拆分为多行?

在批处理文件中使用时是否将一个 Powershell 命令拆分为多行?

此命令用于将txt 文件中的OldText1OldText2和实例替换为 、和,当命令在批处理文件中位于一行时,如下所示:OldText3NewText1NewText2NewText3

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

我不太清楚这一点:

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"

相关内容