Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

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

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


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

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


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

__________________________
aaa

[paste]

ccc
__________________________

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

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

 

Аватара для El Sanchez

Ветеран


Contributor


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

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


Будем думать, что под [paste] подразумевается только 1 строка, а не целый абзац
Код: Выделить весь код
@echo off
set "SRC=C:\Temp\1.txt"

for /f "usebackq tokens=*" %%a in ("%SRC%") do (
if not "%%a"=="" (
if "%%a"=="[paste]" (echo bbb>>tmp) else (echo %%a>>tmp)) else (echo.>>tmp)
)
copy /y tmp %SRC% 1>nul&&del /f /q tmp>nul

Отправлено: 17:05, 04-01-2010 | #2



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

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


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


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

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


El Sanchez, спасибо за внимание!!! Но вопрос остаётся открытым - я писал: -"при этом пустые строки должны остаться" это важно!!!

Из справки цикла FOR: По умолчанию /F передает первый отделенный пробелом элемент из каждой строки каждого файла. Пустые строки пропускаются.

Последний раз редактировалось sv_diz, 05-01-2010 в 09:12.


Отправлено: 23:25, 04-01-2010 | #3


Аватара для El Sanchez

Ветеран


Contributor


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

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


Хех, вчера у меня этот сценарий работал, сегодня нет.
Вариант №2
Код: Выделить весь код
@echo off
setlocal ENABLEDELAYEDEXPANSION
set "SRC=C:\Temp\1.txt"
set "ReplaceText=bbb"

set count=1
for /f "usebackq tokens=1* delims=:" %%a in (`findstr /in . "%SRC%"`) do call :func "%%a" "%%b" "%ReplaceText%"
endlocal
copy /y tmp %SRC% 1>nul&&del /f /q tmp>nul
goto :eof

:func
if not "%~1"=="!count!" (
set /a count+=1&echo.>>tmp
if "%~2"=="[paste]" (echo %~3>>tmp) else (echo %~2>>tmp)) else (
if "%~2"=="[paste]" (echo %~3>>tmp) else (echo %~2>>tmp))
set /a count+=1
P.S. Переменная ReplaceText не должна содержать спец. символов
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:44, 05-01-2010 | #4


Аватара для Devils0411

Ветеран


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

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


А что если сделать возможность, при запуске пакетника, он просил ввести что-то в переменную ReplaceText?
Например:
Код: Выделить весь код
@echo off
setlocal ENABLEDELAYEDEXPANSION
set "SRC=C:\Temp\1.txt"
set /P ReplaceText=Enter the data in the variable :
set count=1
for /f "usebackq tokens=1* delims=:" %%a in (`findstr /in . "%SRC%"`) do call :func "%%a" "%%b" "%ReplaceText%"
endlocal
copy /y tmp %SRC% 1>nul&&del /f /q tmp>nul
goto :eof

:func
if not "%~1"=="!count!" (
set /a count+=1&echo.>>tmp
if "%~2"=="[paste]" (echo %~3>>tmp) else (echo %~2>>tmp)) else (
if "%~2"=="[paste]" (echo %~3>>tmp) else (echo %~2>>tmp))
set /a count+=1
Текст написанный красным будет отображаться при запуске пакетника с просьбой ввести данные в переменную. Соответственно в переменной ReplaceText будет находится та информация, которую вы ввели.

-------
Скрипт автоустановки WINDOWSXP; Скрипт мультиустановки ОС

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:40, 05-01-2010 | #5


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


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

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


El Sanchez, спасибо за проделанную работу!
Остались не решённые вопросы:
1. если пустых строк несколько в подряд, этот скрипт отрабатывает не корректно
2. в строчке пробел или несколько (исключительно)

Последний раз редактировалось sv_diz, 07-01-2010 в 13:32.


Отправлено: 23:57, 06-01-2010 | #6


Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата sv_diz:
1. если пустых строк несколько в подряд, этот скрипт отрабатывает не корректно »
Все верно, моя ошибка. Вариант №3:
Код: Выделить весь код
@echo off
setlocal ENABLEDELAYEDEXPANSION
set "SRC=C:\Temp\1.txt"
set /p ReplaceText=Заменяемый текст :
set /p ReplaceableText=Замещаемый текст :
set count=1
for /f "usebackq tokens=1* delims=:" %%a in (`findstr /in . "%SRC%"`) do call :func "%%a" "%%b" "%ReplaceText%"
endlocal
copy /y tmp %SRC% 1>nul&&del /f /q tmp>nul
goto :eof

:func
set /a Diff=%~1-!count!
if %Diff% GTR 0 (
	for /l %%a in (1,1,%Diff%) do (set /a count+=1&echo.>>tmp)
	if /i "%~2"=="%ReplaceableText%" (echo %~3>>tmp) else (echo %~2>>tmp)
) else (
	if /i "%~2"=="%ReplaceableText%" (echo %~3>>tmp) else (echo %~2>>tmp)
)
set /a count+=1
Цитата sv_diz:
2. в строчке есть пробел или несколько »
Не знаю я как строку, состоящую из одного или нескольких пробелов записать в файл.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:31, 07-01-2010 | #7


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


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

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


уважаемый El Sanchez, ещё раз спасибо за помощь начинающему
последний вариант bat-файла не обрабатывает следующий текст:

///////////////////////
1
<
>
.
//////////////////////

можно чтото сделать?

Отправлено: 23:37, 07-01-2010 | #8


Аватара для El Sanchez

Ветеран


Contributor


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

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


Вложения
Тип файла: rar sed.rar
(36.2 Kb, 14 просмотров)

Цитата sv_diz:
не обрабатывает следующий текст »
Потому что средствами cmd довольно-таки сложно обрабатывать богатый спецсимволами текст, поэтому без спецсредств не обойтись. Предлагаю вариант 4 с применением утилиты sed.

Код: Выделить весь код
@echo off

set "SRC=C:\Temp\1.txt"
set "SedReplaceableText="
set /p ReplaceText=Заменяемый текст :
set /p ReplaceableText=Замещаемый текст :

for /f "tokens=1* delims==" %%a in ('set ReplaceText^|sed -e s/\\/\\\\/g^;s/\[/\\\[/g^;s/\./\\\./g^;s/\*/\\\*/g^;s/\$/\\\$/g') do set "ReplaceText=%%b"
for /f "tokens=1* delims==" %%a in ('set ReplaceableText^|sed -e s/\\/\\\\/g^;s/\[/\\\[/g^;s/\./\\\./g^;s/\*/\\\*/g^;s/\$/\\\$/g') do set "ReplaceableText=%%b"
sed -e /"%ReplaceableText%"/s//"%ReplaceText%"/<"%SRC%">>tmp
copy /y tmp %SRC% 1>nul&&del /f /q tmp>nul
P.S. С sed-ом я не особо дружу, регулярное выражение сделал как смог. (
P.P.S. Символ "^" не отрабатывается. (

Отправлено: 19:11, 08-01-2010 | #9


Аватара для Devils0411

Ветеран


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

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


El Sanchez, помоему данное задание из разряда программирования на C++

-------
Скрипт автоустановки WINDOWSXP; Скрипт мультиустановки ОС


Отправлено: 19:34, 08-01-2010 | #10



Компьютерный форум 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




 
Переход