Como posso injetar uma nova linha substituindo esse script?

3

Eu tenho um script em lotes que pode substituir o texto e quero que ele substitua as strings seguidas por uma nova linha de texto abaixo do original. Um exemplo seria o seguinte:

Antes:

Old string

Depois:

New
String

Eu tentei vários comandos de nova linha usados em lotes (alguns dos quais são encontrados em sites do Stack Exchange) e nenhum deles funciona. Eu acredito que é por causa da sintaxe do script. Aqui está o script com o qual estou trabalhando:

@echo off
setlocal enableextensions disabledelayedexpansion

set search=Old string
set replace=New string
set textFile=Test.txt

:PowerShell
SET PSScript=%temp%\~tmpStrRplc.ps1
ECHO (Get-Content "%~dp0%textFile%").replace("%search%", "%replace%") ^| Set-Content "%~dp0%textFile%">"%PSScript%"

SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"
EXIT

Como posso implementar uma nova "injeção" no meu script?

    
por Mr. Mendelli 27.02.2018 / 03:06

1 resposta

3

Você pode colocar nolugardoespaçoentreastringsubstitutaondevocêdesejaqueanovalinha(CRLF)sejacolocadaparaobteroresultadoesperado-backtick"r" backtick "n" (veja abaixo ).

Isso requer apenas uma pequena alteração no script existente e ele funcionará conforme o esperado de acordo com sua descrição e exemplos de resultados de saída.

Script

@echo off
setlocal enableextensions disabledelayedexpansion

set search=Old string
set replace=New'r'nstring
set textFile=Test.txt

:PowerShell
SET PSScript=%temp%\~tmpStrRplc.ps1
ECHO (Get-Content "%~dp0%textFile%").replace("%search%", "%replace%") ^| Set-Content "%~dp0%textFile%">"%PSScript%"

SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"
PAUSE
EXIT

Observação: Não coloque espaços entre as duas strings na variável replace= para garantir que não haja espaços à direita ou iniciais na nova string com a nova linha como você necessidade.

Resultados

Antes

Oldstring

Depoisde

NewString

Maisrecursos

  • Escape caracteres, Delimitadores e Citações

    Special characters
    
      Special characters are used to format/position string output.
    
      'r'n  Carriage return + New line
    
  • Chave Backtick

por 27.02.2018 / 03:37

Tags