Как через cmd заменить n-ую строку в текстовом файле?

Здравствуйте. Сабж. Надо заменить 13ю строку в файле на заранее известную. Пишу так

for /f "skip=12" in (settings.ini) do (echo dparm=BIND=0,lck='ru',APP='GPS',HST='%COMPUTERNAME%')

По задумке должно пропустить 12 строк с начала файла и заменить на то, что указано в скобках. По факту - ноль реакции. Возможно, надо еще прервать цикл, т.к. замена производится один раз, но не уверен, это предположение, раньше с смд дел не имел.
  • Вопрос задан
  • 6910 просмотров
Решения вопроса 1
tw1ggyz
@tw1ggyz Автор вопроса
В общем, полазил еще по форумам и сделал. Изначально задача была заменить в файле кусок именем компьютера, на котором запущен файл. Но я намудрил, решил заменить целую строчку, поэтому долго возился. Все оказалось прозаичнее. В примере ниже pc-name - это кусок, подлежащий замене на имя компа, получаемое через %computername%.

@echo off
setlocal enabledelayedexpansion
Set infile=settings.ini
Set find=pc-name
Set replace=%COMPUTERNAME%
@echo off
setlocal enabledelayedexpansion
set COUNT=0
for /F "tokens=* delims=, eol=#" %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
Echo !TMPR!>>TMP.TXT
)
move TMP.TXT %infile%
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
POS_troi
@POS_troi
СадоМазо Админ, флудер, троль.
Контент в 12-й строке известен?

как вариант

Можно PowerShell
$FilePath = C:\path_to_settings.ini
(Get-Content $FilePath) -replace 'parametr =.*','parametr = "YOUR TEXT"' | Out-File $FilePath
Ответ написан
@yellowmew
Cloud infrastructure, monitoring engineer. SRE
На PowerShell делается просто
Запустить PoSH из скрипта в командной строке : (содержимое bat файла)
powershell "$f=(Get-Content вашфайлик);$f[номерстроки]='новыйконтент';$f | set-content вашфайлик"

И никто не заставляет писать монструозные конструкции, правда? :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы