Пакетный скрипт для поиска и замены строки в текстовом файле без создания дополнительного выходного файла для хранения измененного файла
Я написал пакетный скрипт, чтобы найти и заменить строку в текстовом файле. Ниже мой сценарий.
@echo off &setlocal
set "search=%1"
set "replace=%2"
set "textfile=Input.txt"
set "newfile=Output.txt"
(for /f "delims=" %%i in (%textfile%) do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
echo(!line!
endlocal
))>"%newfile%"
del %textfile%
rename %newfile% %textfile%
Я могу успешно заменить слово.
Но я не хочу создавать Output.txt, а затем переименовывать его в исходный файл..
Помогите, пожалуйста, отредактировать текстовый файл, не перенаправляя вывод в новый файл.
1 ответ
@echo off
setlocal enableextensions disabledelayedexpansion
set "search=%1"
set "replace=%2"
set "textFile=Input.txt"
for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%textFile%" echo(!line:%search%=%replace%!
endlocal
)
for /f
будет читать все данные (сгенерированные type
comamnd), прежде чем начать его обрабатывать. В подпроцессе начали выполнять type
, мы включаем перенаправление, перезаписывающее файл (поэтому он очищается). Однажды do
предложение начинает выполняться (содержимое файла находится в памяти для обработки), вывод добавляется в файл.