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

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

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

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


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

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


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

__________________________
aaa

[paste]

ccc
__________________________

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

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

 

Аватара для BigBoo

Старожил


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


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

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


Цитата Foreigner:
проще и надежней просто заменить файл конфига другим, модифицированным »
в принципе так я и делаю, просто интересно скриптом, чисто из познавательных соображений.
Если с CMD никак, будем думать о WSH.

Отправлено: 23:09, 21-04-2011 | #31



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

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


Googler


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

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


Цитата BigBoo:
Скрипт зацикливается на ошибке и далее иероглифы »
не могу воспроизвести ошибку, выложите в архиве: INI-файл + сам батник

Цитата Foreigner:
Мне кажется вы выбрали не тот инструмент.»
это вопрос скорее философский, чем технический - так или иначе, с использованием "сторонних" решений или без них задачу можно решить любым инструментом... можно запускать NETSH из WSH и считать это чистым WSH-решением, с равным успехом можно задействовать WSH из батников, в конечном счете всё зависит от конкретной задачи и глубины её проработки


учитывая свойства INI-файла, я бы вообще не парился с правкой "середины текстового файла", а подошел с другой стороны:

- отфильтровать нужную строку через FIND/FINDSTR (вероятность того, что параметр встретится в другой секции =0);
- добавил в конец INI-файла кусок секции с одним нужным параметром;
- при запуске Opera автоматически сольёт все одноименные секции в одну.

это не решает вопроса с кодировкой, но снимает проблему парсинга содержимого

Отправлено: 05:13, 22-04-2011 | #32


Ветеран


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

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


Цитата amel27:
это вопрос скорее философский »
Я бы сказал, что это вопрос удобства. Писать портянку или использовать готовый нструмент:
Код: Выделить весь код
@echo off
setlocal

set "file=Full\Path\To\file.ini"

:: Добавить или переписать параметр

nircmdc inisetval "%file%" "section 1" "key" "value"
nircmdc inisetval "%file%" "section 2" "testkey" "|^\><#@&&"
http://www.nirsoft.net/utils/nircmd.html

Отправлено: 07:25, 22-04-2011 | #33


Ветеран


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

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


Главная беда с ini-файлами в том, что при переходе с Win3.x на Win9.x/WinNT почему-то, в эйфории, посчитали, что впредь ini-файлы будут не востребованы, и не добавили их встроенную поддержку ни в пакетные файлы, ни в Windows Script Host, ни, тем паче, в нынешний PowerShell.

Отправлено: 07:51, 22-04-2011 | #34


Googler


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

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


Цитата Foreigner:
nircmdc »
UTF-8 без костылей не осилит, да и заявленный файл не похож на обычный INI,
с такими странными именами параметров nircmd его просто проигнорирует:
Код: Выделить весь код
Item, "Speed Dial - логотип вместо страницы" = ...
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:06, 22-04-2011 | #35


Аватара для BigBoo

Старожил


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


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

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


Вложения
Тип файла: 7z standard_menu + cmd.7z
(18.5 Kb, 20 просмотров)

Цитата amel27:
выложите в архиве: INI-файл + сам батник »

Отправлено: 10:47, 22-04-2011 | #36


Googler


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

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


BigBoo, как и предполагал - INI-файлы не содержат BOM, если добавить - всё работает... предупреждал же:
Цитата amel27:
Всё это имеет смысл только если обрабатываемые файлы Opera содержат BOM, в противном случае скрипт придется переделывать »
определитесь сначала с кодировкой исходных файлов... кстати, в моей Опере все INI с BOM

Отправлено: 12:07, 22-04-2011 | #37


Аватара для BigBoo

Старожил


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


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

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


Цитата amel27:
как и предполагал - INI-файлы не содержат BOM »
Как же так, пользовался AkelPad - в строке состояния определяет: Win 65001 (UTF-8) *BOM!

Отправлено: 12:26, 22-04-2011 | #38


Googler


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

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


Цитата BigBoo:
Как же так »
а проверить? ;)
...но мы ушли в сторону, вот пара тем (там есть и другие WSH/CMD варианты):

CMD/BAT - [решено] Автоматическая смена кодировки .txt файлов
CMD/BAT - [решено] Изменение кодировки txt файла из ANSI в UTF-16 LE

Отправлено: 12:42, 22-04-2011 | #39


Ветеран


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

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


Цитата Iska:
и не добавили их встроенную поддержку ни в пакетные файлы, ни в Windows Script Host, ни, тем паче, в нынешний PowerShell. »
Но по крайней мере в PowerShell гораздо проще работать с текстом. Вот пример:
Код: Выделить весь код
$file = gc test.ini

$sections = @()
switch -regex ($file) {

    "\[.*\]" { 
    
               $sec = @{}
               $sec.name = $_
               $sec.param = @()
               $sec.value = @()
      
               $sections += $sec 
    
             }

     ".*=.*" { 
     
               $sec.param += $($_ -replace '(.*)=.*', '$1')
               $sec.value += $($_ -replace '.*=(.*)', '$1')
                
             }

}

for ($i = 0; $i -le $($sections.count-1); $i++) {

    $sections[$i].name
    0..$($sections[$i].param.count-1) | % {

        "$($sections[$i].param[$_]) = $($sections[$i].value[$_])"

    }

}
Здесь просто выводится содержимое ini-файла, но не построчно, а как именованные свойства ini. Т.е. к любому из них можно обратиться не как к строке.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:38, 23-04-2011 | #40



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




 
Переход