Я публикую это без тестирования, поскольку у меня нет среды для тестирования, как мы говорим.
Но чтобы объяснить вашу проблему, cmd
пропустит пустые строки, так как он построен таким образом. Это то же самое, что устанавливать переменную в ноль и ожидать, что она вернет результат, поэтому мы просто присваиваем значения каждой строке, имитируя обнаружение разрывов строк (не знаю точно, как это объяснить), но тем не менее, мы добавим несколько дополнительных символов в строки, чтобы гарантировать, что мы получим разрывы строк, просто избавимся от них, как только они у нас появятся, так что вот так:
@echo off
setlocal enabledelayedexpansion
set inputfile=t.txt
set outputfile=t-new.txt
set _strfind=old "data"
set _strinsert=new "data";
for /f "tokens=*" %%a in ('type "%inputfile%" ^| find /v /n "" ^& break ^> "%inputfile%"') do (
set "str=%%a"
set "str=!str:*]=!"
if "!str!"=="%_strfind%" set "str=%_strinsert%"
>>%outputfile% echo(!str!
)
Это должно послать в выходной файл. Однако вы можете сделать выходной файл таким же, как и входной, поскольку он будет таким же, как и замена текста, встроенного в исходный файл. Как только я смогу проверить, я исправлю ответ, если с ним возникнут какие-либо проблемы.
В качестве примечания, будьте осторожны с тем, где у вас есть дополнительные пробелы в ваших переменных set
. Например:
set a = b
имеет 2 проблемы, переменная, содержащая пробел после того, как будет создан с пробелом. Так что это будет выглядеть как:
%a %
Последствием этого является то, что значение переменной будет начинаться с начального пробела, поэтому, когда вы ожидаете b
в качестве значения, оно фактически становится b
И, наконец, всегда хорошая идея заключить ваши переменные в двойные кавычки, просто снова, чтобы исключить пробел, потому что:
set a=b
Даже если вы не можете видеть это невооруженным глазом, в конце содержится пробел, поэтому выполняйте прямое сопоставление, например:
if "b"=="b"
приведет к ложному утверждению, как на самом деле мы имеем:
if "b"=="b "
Таким образом, правильным утверждением было бы установить переменные следующим образом:
set "a=b"
if "%a%"=="b"
, что будет идеальным совпадением.
Примечание Я отправил сообщение со своего телефона, поэтому любые проблемы с орфографией, грамматикой и кодом я буду решать по мере прохождения ответа.