Используя сценарий .bat, я хочу найти строку, которая говорит # Site 1
, и заменить текст в следующей строке переменной. Я нашел руководства по StackOverflow для поиска и замены строки, но не нашел строку и заменил следующую строку. Любая помощь?Найдите строку в файле и замените следующую строку
ответ
@echo off
set "the_file=C:\someFile"
set "search_for=somestring"
set "variable=http://site1"
for /f "tokens=1 delims=:" %%# in ('findstr /n /c:"%search_for%" "%the_file%"') do (
set "line=%%#"
goto :break
)
:break
set /a lineBefore=line-1
set /a nextLine=line+1
break>"%temp%\empty"&&fc "%temp%\empty" "%the_file%" /lb %lineBefore% /t |more +4 | findstr /B /E /V "*****" >newFile
echo %variable%>>newFile
more "%the_file%" +%nextLine% 1>>newFile
echo move /y newFile "%the_file%"
Проверьте newFile
нормально и удалить echo
в передней части последней строки.
вам необходимо установить три переменные в начале по yourself.Have на виду, что более команда устанавливает пробелы вместо вкладок
@ECHO OFF
SETLOCAL
SET "filename=q28567045.txt"
SET "afterme=# Site 1"
SET "putme=put this line after # Site 1"
SET "skip1="
(
FOR /f "usebackqdelims=" %%a IN ("%filename%") DO (
IF DEFINED skip1 (ECHO(%putme%) ELSE (ECHO(%%a)
SET "skip1="
IF /i "%%a"=="%afterme%" SET skip1=y
)
)>newfile.txt
GOTO :EOF
Производит newfile.txt
флаг `skip1, чтобы пропустить строка сначала сбрасывается, затем файл читается по строкам.
Если установлен флажок skip1
, тогда вместо строки будет отображаться строка замены echo
ed; если нет, чтение строки повторяется.
Затем skip1
флаг сброшен
Если линия читать %%a
соответствует строка присваивается afterme
то флаг skip1
установлен (для y
- но это не имеет значения, что значение)
Обратите внимание, что пустые строки и те, которые начинаются ;
, будут проигнорированы и не воспроизведены - это стандартное поведение for /f
.
Если вы хотите Заменяйте стартовый файл, а затем просто добавить
move /y newfile.txt "%filename%"
до goto :eof
линии.
Несмотря на то, что мне нравится работать с партией, я обычно избегаю использования чистой исходной партии для редактирования текстовых файлов, потому что надежное решение обычно сложное и медленное.
Это можно сделать легко и эффективно с помощью JREPL.BAT - гибридной утилиты JScript/пакетной обработки, которая выполняет регулярную замену выражения. JREPL.BAT - это чистый скрипт, который запускается изначально на любом компьютере Windows с XP.
@echo off
setlocal
set "newVal=Replacement value"
call jrepl "^.*" "%newValue%" /jbeg "skip=true" /jendln "skip=($txt!='# Site 1')" /f test.txt /o -
Параметр/F параметр определяет файл для обработки
Опция/O со значением -
указывает заменить исходный файл с результатом.
Параметр/JBEG инициализирует команду пропускать (не заменять) каждую строку.
Параметр/JENDLN проверяет значение каждой строки непосредственно перед ее записью и устанавливает значение SKIP off (false), если оно соответствует # Site 1
. Следующая строка будет заменена только тогда, когда SKIP будет ложным.
Строка поиска соответствует целой строке.
Строка замены - это ваше значение, хранящееся в переменной.
Эта проблема аналогична this one и может использовать эквивалентное решение. Решение чистого пакетного файла ниже должно быть самым быстрым в своем роде.
@echo off
setlocal EnableDelayedExpansion
set "search=# Site 1"
set "nextLine=Text that replaces next line"
rem Get the line number of the search line
for /F "delims=:" %%a in ('findstr /N /C:"%search%" input.txt') do set /A "numLines=%%a-1"
rem Open a code block to read-input-file/create-output-file
< input.txt (
rem Read the first line
set /P "line="
rem Copy numLines-1 lines
for /L %%i in (1,1,%numLines%) do set /P "line=!line!" & echo/
rem Replace the next line
echo %nextLine%
rem Copy the rest of lines
findstr "^"
) > output.txt
rem Replace input file with created output file
move /Y output.txt input.txt > NUL
Этот метод не будет работать, если входной файл имеет пустые строки и также имеет другие ограничения. Дополнительное описание этого метода см. В this post.
- 1. Найдите строку и замените ее переменной
- 2. пакетный скрипт, найдите строку в текстовом файле по строке, затем замените целую строку на другую строку
- 3. Замените строку в TXT-файле
- 4. найдите строку в другом файле и замените ее на другую строку в узле js
- 5. Найдите строку в файле и удалите ее
- 6. Искать строку в файле и возвращать следующую строку (на Java)
- 7. Замените строку в файле с помощью groovy
- 8. Powershell. Замените следующую строку после сопоставления
- 9. VBA - Найдите следующую пустую строку на листе
- 10. Найдите подходящую строку и замените ее в новой колонке
- 11. Найдите строку регулярного выражения и замените ее в R
- 12. Как записать строку в следующую строку в файле?
- 13. Замените целую строку в txt-файле
- 14. Как найти строку в файле и скопировать найденную строку и следующую строку в другой файл?
- 15. Замените строку в файле csv 20 gb
- 16. VB.net Найдите и замените данные в DataGridView в текстовом файле
- 17. Что касается пакетных игр, найдите и замените строку
- 18. Найдите строку и замените ее всей базой данных
- 19. Найдите слово в файле и замените его на C?
- 20. Найдите слово и замените всю строку, содержащую слово в файле в Python, используя fileinput
- 21. Найдите и замените слово в txt-файле, используя matlab
- 22. Найдите строку внутри текстового файла и замените ее на другую строку
- 23. Замените строку
- 24. Выделите строку наведения и следующую строку
- 25. Прочтите файл в django и найдите строку в файле
- 26. Переверните строку на следующую строку
- 27. Замените некоторую строку в файле и сохраните ее
- 28. Замените строку в текстовом файле только fprintf и fscanf
- 29. удалите строку и замените ее новым текстом в txt-файле
- 30. Найдите определенную строку в файле и извлеките ее часть
Так что же означает каждая переменная? –
@AidanEdwards - переменная, которую вы хотите установить на следующей строке (после search_for) – npocmaka
Кажется, что не работает с этим: set/p ip = "Вставить сервер ip:" Установите "the_file = pc2v9. ini " set" search_for = # Site 1 " set" variable = server = "% ip%": 50002 " –