Como faço para escapar corretamente '=' no meu script de substituição de string?

4

Eu fiz um script em lote que substitui as strings em um arquivo baseado em texto especificado. Dentro do meu arquivo, a string OutDir=bin deve ser substituída como OutDir=Build , mas obtém a saída como bin=OutDir=Build=bin . Como faço para escapar do = em OutDir=bin para que a string não fique truncada? Eu tentei OutDir^= , mas usar a cenoura não funciona.

Aqui está meu script atual:

@echo off 
    setlocal enableextensions disabledelayedexpansion

    set search=OutDir=bin
    set replace=OutDir=Build

    set textFile=%DOCUMENT%.txt

    for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
        set "line=%%i"
        setlocal enabledelayedexpansion
        >>"%textFile%" echo(!line:%search%=%replace%!
        endlocal
    )

Eu tentei alterar as variáveis localizar e substituir para compensar o = na cadeia que estou substituindo, mas nenhuma funcionou:

set search= "OutDir=bin"
set replace= "OutDir=Build"

set search="OutDir=bin"
set replace="OutDir=Build"

set "search=OutDir=bin"
set "replace=OutDir=Build"

"set search=OutDir=bin"
"set replace=OutDir=Build"
    
por Mr. Mendelli 04.01.2018 / 01:35

1 resposta

2

Substituindo o símbolo igual = em uma seqüência de caracteres por lote usando o PowerShell

Depois de testar e, em seguida, pesquisar depois, cheguei esta resposta em StackOverflow que então também apontou para este tópico e posts em DosTips e substituindo o = por lote puro não é fácil.

Quando me deparo com problemas com scripts em lote, onde é necessária uma grande quantidade de lógica de lote complexa ou simplesmente não consigo descobrir como fazer isso funcionar facilmente, geralmente tento incorporar alguns PowerShell à mistura desde ele é Windows nativo e pode ser muito mais robusto do que lote sem lógica complexa.

The below batch script will essentially:

  • Use Get-Content and Replace for the string to search and replace
  • Then it will use Set-Content to put the newly replaced string back into the file accordingly

Script

@echo off
setlocal enableextensions disabledelayedexpansion

set search=OutDir=bin
set replace=OutDir=Build
set textFile=%DOCUMENT%.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

Resultado da saída

OutDir=Build

Mais recursos

por 04.01.2018 / 14:10