Este comando funciona para substituir instâncias de OldText1
, OldText2
e OldText3
em um arquivo txt, por NewText1
, NewText2
e NewText3
quando o comando está em uma linha em um arquivo em lote da seguinte forma:
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}"
Se eu tentar usar o ^
símbolo para dividir o comando (que normalmente funciona em um arquivo em lote), ele não funcionará. Por exemplo, isso não funciona, nada é substituído no arquivo 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}"
Usar backticks também não funciona (mas não funcionaria porque este não é um script 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}"
Tenho perguntado aquela coisa do bot de bate-papo a manhã toda e não consigo pensar em nada que funcione. Na metade do tempo, ele continua colocando o comando em uma linha novamente e estou apenas andando em círculos com ele.
É impossível fazer o que estou tentando fazer?
A razão pela qual quero dividir o comando em várias linhas é simplesmente porque quero ser capaz de ler o que está sendo substituído sem ter que olhar horizontalmente ao longo (o que eventualmente será) um comando massivo. Pretendo adicionar muito mais comandos de substituição do que este, mas não está funcionando nem para três comandos de substituição... ainda!
Agradeço antecipadamente a qualquer pessoa que possa saber por que isso não está funcionando.
Isso não está claro para mim:
Esta parte sugere que você obterá itens em uma pasta, precisamente itens que são arquivos, mas imediatamente seu comando define um arquivo onde as substituições de string serão feitas diretamente no conteúdo.
Veja, removendo essa parte, as substituições saíram conforme o esperado, mas se for para vários arquivos para as mesmas substituições, sugiro editar a pergunta. Embora confuso, para manipulação de conteúdo você não precisa de "
Get-ChildItem 'Old and New text.txt' | ...
", e pode usar diretamenteGet-Content 'Old and New text.txt' ^|...