![]() |
Как добавить текст в середину текстрового файла
Есть текстовый файл 1.txt:
__________________________ aaa [paste] ccc __________________________ К примеру [paste] нужно заменить на bbb, при этом пустые строки должны остаться (FOR /F не помог) |
Будем думать, что под [paste] подразумевается только 1 строка, а не целый абзац
Код:
@echo off |
El Sanchez, спасибо за внимание!!! Но вопрос остаётся открытым - я писал: -"при этом пустые строки должны остаться" это важно!!!
Из справки цикла FOR: По умолчанию /F передает первый отделенный пробелом элемент из каждой строки каждого файла. Пустые строки пропускаются. |
Хех, вчера у меня этот сценарий работал, сегодня нет.
Вариант №2 Код:
@echo off |
А что если сделать возможность, при запуске пакетника, он просил ввести что-то в переменную ReplaceText?
Например: Код:
@echo off |
El Sanchez, спасибо за проделанную работу!
Остались не решённые вопросы: 1. если пустых строк несколько в подряд, этот скрипт отрабатывает не корректно 2. в строчке пробел или несколько (исключительно) |
Цитата:
Код:
@echo off Цитата:
|
уважаемый El Sanchez, ещё раз спасибо за помощь начинающему
последний вариант bat-файла не обрабатывает следующий текст: /////////////////////// 1 < > . ////////////////////// можно чтото сделать? |
Вложений: 1
Цитата:
Код:
@echo off P.P.S. Символ "^" не отрабатывается. ( |
El Sanchez, помоему данное задание из разряда программирования на C++
|
|
Похожий вопрос, но задача несколько иная. К примеру, как в шапке, 1.txt:
Код:
... |
Цитата:
Код:
@echo off |
Попробовал Ваш скрипт, что-то не так. Он просто удаляет параметр "ссс" и ничего более не делает. :(
|
|
Цитата:
|
amel27, всё работает, но в моём случае значение параметра содержит символы, в результате скрипт не срабатывает, то есть к примеру так:
Код:
CALL:INISET 1.ini paste ccc ""a 1","b 2","c 3"" |
Цитата:
Код:
@echo off |
amel27, Всё бы хорошо, но вот так работает:
Код:
set "$val="a 1","b 2"|"c 3"" Код:
set "$val="a 1","b 2""|c 3"" |
Цитата:
Код:
set $val="a 1"^|"b 2""|c 3" Код:
set "$val="a 1"|"b 2""^|c 3"" |
amel27, А можно ли так же использовать переменную для имени параметра, то есть в данном примере вместо ссс. Так работать не хочет:
Код:
set "$ByRef="a 1","b 2","c 3"" |
Цитата:
Код:
@echo off > очень странное имя для параметра... на всякий случай: оно не должно содержать символов ":" и "=" |
amel27, спасибо, теперь всё работает как надо.
Цитата:
Код:
[Quick Preferences Menu] |
Попробовал на реальном standard_menu.ini и обнаружилась новая проблема, связанная с кодировкой. Дело в том, что standard_menu.ini в кодировке UTF-8, и после отработки скрипта вместо русских букв получаем:
Код:
Item, "Speed Dial - ⨯ ⢮ ⣠穢= и т.д. p.s. С кодировкой standard_menu.ini всё в порядке, скрипт её не меняет, если русские буквы не использовать - всё отрабатывает корректно! |
BigBoo, возможно, Вам стоит перейти на использование WSH, а ещё лучше — PowerShell.
|
Цитата:
Цитата:
напрямую батник с UTF8 работать не может, так как для Windows "родными" являются OEM/ANSI/UTF-16 кодировки, но можно сделать предварительное преобразование в любую из этих кодировок, а после обработки вернуть в исходную (UTF8), вот пример для исходного файла UTF-8 with BOM: P.S. красным выделен BOM для UTF-8, лучше скопировать его с любого UTF8-текстовика P.P.S. если исходный файл не содержит BOM, код придется изменить |
Цитата:
И ещё вопрос: cmd-файл со скриптом в Вашем последнем примере сохраняется в OEM-866? |
Цитата:
Цитата:
- открыть полученный UTF8-файл в текстовом редакторе как DOS-текст (блокнот не поддерживает, я использую FAR); - скопировать первые три спецсимвола (BOM) в отмеченное место батника; P.S. Всё это имеет смысл только если обрабатываемые файлы Opera содержат BOM, в противном случае скрипт придется переделывать. |
amel27, испробовал Ваш скрипт с учётом "BOM". Скрипт зацикливается на ошибке и далее иероглифы:
Код:
Достигнут уровень рекурсии, максимально возможный для команды SETLOCAL. |
BigBoo,
Мне кажется вы выбрали не тот инструмент, голые батники плохо работают с текстом, тем более в utf8, а если конфиг большой, то есть вероятность, что он его вообще не пропарсит. Если вы хотите твик оперы, то на мой взгляд, было бы проще и надежней просто заменить файл конфига другим, модифицированным. |
Цитата:
Если с CMD никак, будем думать о WSH. |
Цитата:
Цитата:
учитывая свойства INI-файла, я бы вообще не парился с правкой "середины текстового файла", а подошел с другой стороны: - отфильтровать нужную строку через FIND/FINDSTR (вероятность того, что параметр встретится в другой секции =0); - добавил в конец INI-файла кусок секции с одним нужным параметром; - при запуске Opera автоматически сольёт все одноименные секции в одну. это не решает вопроса с кодировкой, но снимает проблему парсинга содержимого |
Цитата:
Код:
@echo off |
Главная беда с ini-файлами в том, что при переходе с Win3.x на Win9.x/WinNT почему-то, в эйфории, посчитали, что впредь ini-файлы будут не востребованы, и не добавили их встроенную поддержку ни в пакетные файлы, ни в Windows Script Host, ни, тем паче, в нынешний PowerShell.
|
Цитата:
с такими странными именами параметров nircmd его просто проигнорирует: Код:
Item, "Speed Dial - логотип вместо страницы" = ... |
Вложений: 1
Цитата:
|
BigBoo, как и предполагал - INI-файлы не содержат BOM, если добавить - всё работает... предупреждал же:
Цитата:
|
Цитата:
|
Цитата:
...но мы ушли в сторону, вот пара тем (там есть и другие WSH/CMD варианты): CMD/BAT - [решено] Автоматическая смена кодировки .txt файлов CMD/BAT - [решено] Изменение кодировки txt файла из ANSI в UTF-16 LE |
Цитата:
Код:
$file = gc test.ini |
Foreigner, виденные мною примеры были куда как длиннее (там, конечно, было не только чтение, а весь набор операций по чтению, записи, созданию, удалению файла, секций, параметров и значений). Не скажу, что увиденное мною выглядело наглядно, скорее наоборот.
|
Код:
For /F "Tokens=2*" %%I In ('Reg Query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /V Personal') Do Set Personal=%%J Как решить проблему с кодировкой, чтобы было F:\Мои документы\Закачки |
Доброго времени суток.
Помогите, пожалуйста. Задача: изменить текст в txt-файле. Решение: Код:
@echo off Пробовала разные варианты, результат одинаковый: текст меняет и пустые строки удаляет. Подскажите, пожалуйста, что делаю неправильно? Заранее спасибо. |
Код:
@echo off |
Georgio, Большое спасибо.
Разбирала написанный Вами код, и к сожалению, не смогла найти ответы на некоторые возникшие вопросы. Буду очень благодарна, если Вы на них ответите. Разбор строки Код:
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
Заранее спасибо. |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Код:
( Цитата:
Код:
… call set /p"=%%LINE:%search%=%change%%%"<nul Цитата:
Цитата:
Констатируя, можем сказать, что в данном случае вся строка: Код:
if defined LINE call set /p"=%%LINE:%search%=%change%%%"<nul Цитата:
|
Iska, большое спасибо.
|
Время: 01:53. |
Время: 01:53.
© OSzone.net 2001-