4

Я сделал пакетный скрипт, который заменяет строки в указанном текстовом файле. В моем файле строка OutDir=bin должна быть заменена как OutDir=Build но выводится как bin=OutDir=Build=bin . Как мне выйти из = в OutDir=bin чтобы строка не искажалась? Я пробовал OutDir^= но использование моркови тоже не работает.

Вот мой текущий сценарий:

@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
    )

Я попытался изменить переменные поиска и замены, чтобы компенсировать = в строке, которую я заменяю, но ни одна из них не сработала:

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"

1 ответ1

2

Замена символа равенства = в строке с помощью пакета PowerShell

После тестирования, а затем исследования, я нашел ответ на StackOverflow, который также указал на этот поток и сообщения на DosTips, и заменить = на чистый пакет нелегко.

Когда я сталкиваюсь с проблемами с пакетными сценариями, когда требуется тонна сложной пакетной логики или просто не могу понять, как заставить ее работать легко, я обычно пытаюсь включить в микс некоторую PowerShell, поскольку она является родной для Windows и может быть гораздо более надежной. чем партия без сложной логики.

Ниже приведен пакетный скрипт:

  • Используйте Get-Content и Replace для строки для поиска и замены
  • Затем он будет использовать Set-Content, чтобы поместить вновь замененную строку обратно в файл соответственно.

скрипт

@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

Результат на выходе

OutDir=Build

Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .