Пакет заменяет строку, НО также удаляет пустые строки [дубликаты]

У меня есть пакет, адаптированный из @MC ND, который ищет строку и заменяет ее в данном файле.

Он работает хорошо, за исключением того, что он удаляет пустые строки в моем исходном файле.

@echo off 
setlocal enableextensions disabledelayedexpansion

set "search=To_be_replaced"
set "replace=Well_Replaced"
set "File=TEST.txt"

for /f "delims=" %%i in ('type "%File%" ^& break ^> "%File%" ') do (
    set "line=%%i"

    setlocal enabledelayedexpansion
    >>"%File%" echo(!line:%search%=%replace%!
    endlocal
)

Входной файл:

A

To_be_replaced

B

Я ожидаю, что вывод будет:

A

Well_Replaced

B

Фактический результат:

A
Well_Replaced
B

Как я могу не удалять пустые строки?


person R.Omar    schedule 24.04.2019    source источник
comment
for /F удаляет пустые строки; однако поток, связанный пользователем BDM, демонстрирует, как этого избежать; альтернативой find /N /V "" является findstr /N "^" (но тогда вам нужно будет соответственно изменить параметр delims)...   -  person aschipfl    schedule 24.04.2019


Ответы (1)


Вот пример, основанный на комментариях до сих пор:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion

Set "search=To_be_replaced"
Set "replace=Well_Replaced"
Set "File=TEST.txt"

For /F "Tokens=1*Delims=]" %%A In ('Find /V /N ""^<"%File%"^&Break^>"%File%"'
)Do (Set "line=%%B"
    SetLocal EnableDelayedExpansion
    (If Not "%%B"=="" (Echo(!line:%search%=%replace%!)Else Echo()>>"%File%"
    EndLocal)
person Compo    schedule 24.04.2019
comment
Он работает отлично... не могли бы вы объяснить мне, что он делает в каждой части, пожалуйста? - person R.Omar; 24.04.2019
comment
Нет, я не могу! Вместо этого вы можете открыть окно командной строки, ввести каждую из используемых команд, добавив к ней переключатель помощи /?, прочитать содержимое и попытаться изучить и понять его самостоятельно. Вместе с информацией в связанном «дубликате» не должно быть невозможности разобраться самостоятельно. - person Compo; 24.04.2019