Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как добавить текст в середину текстрового файла

Ответить
Настройки темы
CMD/BAT - Как добавить текст в середину текстрового файла

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Есть текстовый файл 1.txt:

__________________________
aaa

[paste]

ccc
__________________________

К примеру [paste] нужно заменить на bbb, при этом пустые строки должны остаться (FOR /F не помог)

Отправлено: 09:54, 04-01-2010

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Foreigner, виденные мною примеры были куда как длиннее (там, конечно, было не только чтение, а весь набор операций по чтению, записи, созданию, удалению файла, секций, параметров и значений). Не скажу, что увиденное мною выглядело наглядно, скорее наоборот.

Отправлено: 10:28, 23-04-2011 | #41



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для BigBoo

Старожил


Автор проектов


Сообщения: 474
Благодарности: 120

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
For /F "Tokens=2*" %%I In ('Reg Query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /V Personal') Do Set Personal=%%J
start "" /wait "nircmd.exe" inisetval "%AppData%\Opera\Opera\operaprefs.ini" "User Prefs" "Download Directory" "%Personal%\Закачки"
В итоге в operaprefs.ini: Download Directory=F:\ 𐆿𐊺𐊶𐉶\Ƞ롷릍
Как решить проблему с кодировкой, чтобы было F:\Мои документы\Закачки

Отправлено: 14:07, 03-04-2012 | #42


Аватара для AdBes

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток.
Помогите, пожалуйста.

Задача: изменить текст в txt-файле.
Решение:
Код: Выделить весь код
 @echo off
cls
setlocal enabledelayedexpansion
:: указываем файл
	set file=.\WEB-INF\classes\tops\unicus\resources\unicus.properties
:: ввести строку для поиска
	set /p search=[enter text to search]
:: ввести строку для замены
	set /p change=[enter the text to change]
	@echo off
	setlocal enabledelayedexpansion
	set COUNT=0
:: ищем строку и заменяем
	for /F "usebackq tokens=*" %%s in (!file!) do (
			set LINE=%%s
			::замена текущей строки
			set TMPR=!LINE:%search%=%change%!
			::добавляем строку к временному файлу
			Echo.!TMPR!>>TMP.TXT				 
	)
	:: Делаем резервное копирование исходного файла, на случай что что то пойдет не так…
	copy %file% %file%.bak
	:: Заменяем исходный файл временным
	move TMP.TXT %file%
Проблема: при замене текста удаляются пустые строки, а не должны

Пробовала разные варианты, результат одинаковый: текст меняет и пустые строки удаляет.

Подскажите, пожалуйста, что делаю неправильно?
Заранее спасибо.

Последний раз редактировалось AdBes, 06-02-2014 в 17:59. Причина: орфографическая ошибка


Отправлено: 17:41, 06-02-2014 | #43


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo off
:: указываем файл
    set file=.\web-inf\classes\tops\unicus\resources\unicus.properties
:: ввести строку для поиска
    set /p search=[enter text to search]
:: ввести строку для замены
    set /p change=[enter the text to change]

 for /f %%i in ('find /c /v ""^<"%file%"') do set n=%%i
(
 for /l %%i in (1 1 %n%) do (
  set LINE=
  set /p "LINE="
  if defined LINE call set /p"=%%LINE:%search%=%change%%%"<nul
  if %%i==%n% goto exit
  echo.
 )
)<"%file%">tmp.txt

:exit
:: делаем резервное копирование исходного файла
    copy "%file%" "%file%.bak">nul
:: заменяем исходный файл временным
    move tmp.txt "%file%">nul
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:29, 06-02-2014 | #44


Аватара для AdBes

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Georgio, Большое спасибо.
Разбирала написанный Вами код, и к сожалению, не смогла найти ответы на некоторые возникшие вопросы.
Буду очень благодарна, если Вы на них ответите.

Разбор строки
Код: Выделить весь код
for /f %%i in ('find /c /v ""^<"%file%"') do set n=%%i
Вопросы:
  1. Ключи команды find /c /v выполняют противоположные действия, подскажите, пожалуйста, правильно ли я понимаю, что при сочетании этих ключей получается более точные поиск искомой строки?
  2. Правильно ли я понимаю, что это "" обозначение пустой строки?
  3. Подскажите, пожалуйста, зачем выполняется экранирование ^<


Разбор строки
Код: Выделить весь код
for /l %%i in (1 1 %n%) do (
Вопрос:
  1. Подскажите, пожалуйста, что означает (1 1 %n%) ?


Разбор строки
Код: Выделить весь код
set LINE=
Вопрос:
  1. Подскажите, пожалуйста, это добавление пустой строки?


Разбор строки
Код: Выделить весь код
set /p "LINE="
Вопрос:
  1. Ключ /p означает ввод значения с клавиатуры, но в данном случае этого не происходит. Подскажите, пожалуйста, почему?


Разбор строки
Код: Выделить весь код
if defined LINE call set /p"=%%LINE:%search%=%change%%%"<nul
Вопросы:
  1. Двойной процент %% означает вывод на экран символа %. Сомневаюсь, что в данном случае подразумевается именно вывод символа %. Расшифруйте, пожалуйста, назначение процентов в данной строке
  2. Сочетание >nul означает запрет вывода на экран команды и ее действия. Подскажите, пожалуйста, что означает сочетание <nul

Заранее спасибо.

Отправлено: 13:05, 07-02-2014 | #45


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата AdBes:
Ключи команды find /c /v выполняют противоположные действия, подскажите, пожалуйста, правильно ли я понимаю, что при сочетании этих ключей получается более точные поиск искомой строки? »
Нет. Командой «find /c /v ""^<"%file%"» осуществляется подсчёт числа строк во входном файле «%file%». «/v ""» используется для вывода всех строк, а «/c» их считает.
Цитата find.exe /?:
/V Вывод всех строк, НЕ содержащих заданную строку.
/C Вывод только общего числа строк, содержащих заданную строку.
Затем в цикле «for /f» производится разбор вывода команды «find», и выведенное ею число строк файла «%file%» присваивается переменной окружения «n».

Цитата AdBes:
Правильно ли я понимаю, что это "" обозначение пустой строки? »
Да.

Цитата AdBes:
Подскажите, пожалуйста, зачем выполняется экранирование ^< »
Потому что иначе символ перенаправления «<» будет воспринят циклом разбора «for /f», а не передан команде «find».

Цитата AdBes:
Подскажите, пожалуйста, что означает (1 1 %n%) ? »
Цитата for /?:
FOR /L %переменная IN (начало,шаг,конец) DO команда [параметры]

Набор раскрывается в последовательность чисел с заданными началом, концом и шагом приращения. Так, набор (1,1,5) раскрывается в (1 2 3 4 5), а набор (5,-1,1) заменяется на (5 4 3 2 1).
В данном случае «%%i» будет раскрываться, начиная с «1», с шагом «1» и до полученного числа строк файла «%file%», которое было выше сохранено в переменной окружения «n».

Цитата AdBes:
Подскажите, пожалуйста, это добавление пустой строки? »
Нет. Это удаление переменной окружения «LINE».

Цитата AdBes:
Ключ /p означает ввод значения с клавиатуры, но в данном случае этого не происходит. Подскажите, пожалуйста, почему? »
Потому что значимым здесь является весь блок команд:
Код: Выделить весь код
(
	for /l %%i in (1 1 %n%) do (
		set LINE=
		set /p "LINE="
		if defined LINE call set /p"=%%LINE:%search%=%change%%%"<nul
		if %%i==%n% goto exit
		echo.
	)
)<"%file%">tmp.txt
и ввод в «set /p "LINE="» осуществляется из файла «%file%», а вывод из того же блока команд — в файл «tmp.txt». Ввод в «set /p "LINE="» при этом осуществляется построчно — по одной строке на каждом цикле прохода «for /l».

Цитата AdBes:
Двойной процент %% означает вывод на экран символа %. »
Не означает вывод. Рассматривайте команду:
Код: Выделить весь код
… call set /p"=%%LINE:%search%=%change%%%"<nul
целиком. Она распадается на две команды — собственно вызов «call» и вычисляемая при его вызове подкоманда «set /p"=%LINE:«Здесь вычисленное при вызове call значение переменной окружения «search»»=«Здесь вычисленное при вызове call значение переменной окружения «change»»%"<nul».

Цитата AdBes:
Сочетание >nul означает запрет вывода на экран команды и ее действия. »
Тоже неверное толкование. «>nul» означает перенаправление стандартного потока вывода команды в пустое устройство («nul»). Именно поэтому видимым следствием такого перенаправления может быть отсутствие вывода команды на экран.

Цитата AdBes:
Подскажите, пожалуйста, что означает сочетание <nul»
Обратное. «<nul» — перенаправление стандартного потока ввода команды на ввод из пустого устройства («nul»). Для любой команды, ожидающей ввода строки из стандартного потока ввода, сие означает ввод пустой строки.

Констатируя, можем сказать, что в данном случае вся строка:
Код: Выделить весь код
if defined LINE call set /p"=%%LINE:%search%=%change%%%"<nul
означает примерно следующее:
Цитата:
Если переменная окружения LINE существует (т.е., очередная строка текста из файла «%file%», сохранённая в «LINE», оказалась не пуста), то вывести эту строку (<nul set /p Var=%LINE%), заменив в ней «search» на «change».
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:58, 07-02-2014 | #46


Аватара для AdBes

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, большое спасибо.

Отправлено: 11:28, 10-02-2014 | #47



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как добавить текст в середину текстрового файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
ALTLinux - Как наложить на JPG текст (дата создания файла) user51 Общий по Linux 6 30-06-2008 15:37
[решено] как добавить путь к текущей директории в reg файл из bat файла ? mitiya Автоматическая установка приложений 7 27-03-2008 16:12
Как искать в поисковиках, еисли я не помню середину слова taras.v Хочу все знать 5 12-03-2008 06:41
Разное - [решено] Как в список "Символы" добавить собственные символы для вставки в текст T-IIIJ Microsoft Windows 2000/XP 4 23-02-2008 16:27
Как добавить текст в свое сообщение? Vadikan О сайте и форуме 4 17-10-2002 07:55




 
Переход