|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как добавить текст в середину текстрового файла |
|
CMD/BAT - Как добавить текст в середину текстрового файла
|
Новый участник Сообщения: 9 |
Есть текстовый файл 1.txt:
__________________________ aaa [paste] ccc __________________________ К примеру [paste] нужно заменить на bbb, при этом пустые строки должны остаться (FOR /F не помог) |
|
Отправлено: 09:54, 04-01-2010 |
Ветеран Сообщения: 1273
|
Профиль | Отправить PM | Цитировать Будем думать, что под [paste] подразумевается только 1 строка, а не целый абзац
|
Отправлено: 17:05, 04-01-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать El Sanchez, спасибо за внимание!!! Но вопрос остаётся открытым - я писал: -"при этом пустые строки должны остаться" это важно!!!
Из справки цикла FOR: По умолчанию /F передает первый отделенный пробелом элемент из каждой строки каждого файла. Пустые строки пропускаются. |
Последний раз редактировалось sv_diz, 05-01-2010 в 09:12. Отправлено: 23:25, 04-01-2010 | #3 |
Ветеран Сообщения: 1273
|
Профиль | Отправить 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 |
Отправлено: 14:44, 05-01-2010 | #4 |
Ветеран Сообщения: 902
|
Профиль | Отправить 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 |
|
------- Отправлено: 21:40, 05-01-2010 | #5 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать El Sanchez, спасибо за проделанную работу!
Остались не решённые вопросы: 1. если пустых строк несколько в подряд, этот скрипт отрабатывает не корректно 2. в строчке пробел или несколько (исключительно) |
Последний раз редактировалось sv_diz, 07-01-2010 в 13:32. Отправлено: 23:57, 06-01-2010 | #6 |
Ветеран Сообщения: 1273
|
Профиль | Отправить PM | Цитировать Цитата sv_diz:
@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:
|
||
Отправлено: 13:31, 07-01-2010 | #7 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать уважаемый El Sanchez, ещё раз спасибо за помощь начинающему
последний вариант bat-файла не обрабатывает следующий текст: /////////////////////// 1 < > . ////////////////////// можно чтото сделать? |
Отправлено: 23:37, 07-01-2010 | #8 |
Ветеран Сообщения: 1273
|
Профиль | Отправить PM | Цитировать Цитата sv_diz:
@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.P.S. Символ "^" не отрабатывается. ( |
|
Отправлено: 19:11, 08-01-2010 | #9 |
Ветеран Сообщения: 902
|
Профиль | Отправить PM | Цитировать El Sanchez, помоему данное задание из разряда программирования на C++
|
------- Отправлено: 19:34, 08-01-2010 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|