Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 10

Модерирует : KLASS, IFkO

vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108

   

vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачи на bat-файлах 10
(часть 1, часть 2, часть 3, часть 4, часть 5, часть 6, часть 7, часть 8, часть 9)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Делаем паузу в командном файле стандартными средствами Windows
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:53 09-01-2011 | Исправлено: mazafakermazafaka, 11:22 04-06-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    > могу файлик скинуть куда-нибудь
    Сюда. Завернув в тэг [more].

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:47 04-05-2011
    Alexey87

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ASE_DAG, файл выложил
    Подробнее...

    Всего записей: 678 | Зарегистр. 27-01-2008 | Отправлено: 21:03 04-05-2011 | Исправлено: Alexey87, 21:10 04-05-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alexey87
    Предлагаете скачать его с очередного говнообменника? Ладно.
     
    > В файле c:\html\0125.html есть аж целых 12
    И не одного не разорванного возвратом каретки и переводом строки, а Греп-тот читает файл построчно.
    На свое удивление не нашел у него ключа, задающего произвольный символ — разделитель записей, поэтому могу только преложить предварительно потереть эти символы:
    $ awk -v RS='\r\n' -v ORS=' ' '1' /tmp/0125.html.utf-8 | grep -Pio '<h[1-6].*?>.*?</h[1-6]>'
    <h1 id="fav_name_1" class="news_item_header">Всемирный день IPv6: мир движется к новой версии интернет-протокола</h1>
    <h1 id="fav_name_1" class="news_item_header">Мультимедиа: DarkWave Studio v.3.2.6</h1>
    <h1 id="fav_name_1" class="news_item_header">Чистильщики: Driver Sweeper v.2.8.5</h1>
    <h1 id="fav_name_1" class="news_item_header">Почтовые клиенты и фильтры: Gmail Manager v.0.6.3</h1>
    <h1 id="fav_name_1" class="news_item_header">Настройщики: GBoost v.1.03.0</h1>
    <h1 id="fav_name_1" class="news_item_header">Чистильщики: Norton Removal Tool 2011.0.5.9</h1>
    <h1 id="fav_name_1" class="news_item_header">Утилиты: PDFCreator v.1.2.0</h1>
    <h1 id="fav_name_1" class="news_item_header">Мультимедиа: VideoLAN v.1.1.6</h1>
    <h1 id="fav_name_1" class="news_item_header">Диагностика: Gigabyte EasyTune6 v.B10.1228.1</h1>
    <h1 id="fav_name_1" class="news_item_header">SearchInform о прогнозах в области информационной безопасности на 2011 год</h1>
    <h1 id="fav_name_1" class="news_item_header">OPTIMA-WorkFlow и iDecide — управление бизнес-процессами на iPad</h1>
    <h1 id="fav_name_1" class="news_item_header">Российским врачам будет ассистировать iPad</h1>

    — вот как-то так это выглядит у меня.

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 21:21 04-05-2011 | Исправлено: ASE_DAG, 21:34 04-05-2011
    Alexey87

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ASE_DAG, большое спасибо!
    вроде заработало (в командной строке пробегает сканирование заголовков), но информация не сохраняется в txt-файл.
    Вместо этого по завершению операции в txt-файле запись:

    Цитата:
    Режим вывода команд на экран (ECHO) отключен


    Всего записей: 678 | Зарегистр. 27-01-2008 | Отправлено: 22:43 04-05-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alexey87
    > большое спасибо!  
    > вроде заработало
    Я аж удивлен. :)
     
    Так что у вас заработало? Опять вижу от вас только какие-то слова вместо вашего ввода и машинного вывода.
     
    > в командной строке пробегает сканирование заголовков
    Чавой?

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 22:48 04-05-2011 | Исправлено: ASE_DAG, 22:49 04-05-2011
    Alexey87

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    > в командной строке пробегает сканирование заголовков  
     Чавой?

    я хотел сказать появляется следующее:
       
    а когда запускаю bat-файл с кодом:

    Цитата:
    @echo off
    setlocal
    pushd "C:\html"
    for %%i in (*.html) do (
    grep.exe -Pio ^<h[1-2].*?^>.*?^</h[1-2]^> c:\html\0125.html
    )
    popd
    echo %title% >> c:\out.txt

    то информация не сохраняется в txt-файл.  
    Вместо этого по завершению операции в txt-файле запись:  

    Цитата:
    Режим вывода команд на экран (ECHO) отключен

    Всего записей: 678 | Зарегистр. 27-01-2008 | Отправлено: 10:15 05-05-2011 | Исправлено: Alexey87, 10:17 05-05-2011
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    то информация не сохраняется в txt-файл.  
    Вместо этого по завершению операции в txt-файле запись:  
    неудивительно - у тебя же не определена переменная %title%, содержимое которой ты просишь напечатать (с перенаправлением)
     
    ты наверно это хотел написать:
    Код:
    @echo off
    setlocal
    pushd "C:\html"
    for %%i in (*.html) do (
     1>>c:\out.txt grep.exe -Pio ^<h[1-2].*?^>.*?^</h[1-2]^> %%i
    )
    popd
    (это если ты хотел напечатать в один файл все однострочные заголовки всех *.html)
     
     
     
    Добавлено: ASE_DAG
    Цитата:
     Все верно, несколько постов выше, если вы не заметили, говорили (т. NIKZZZZ, кажется) о том, что даже внутри двойных кавычек угловые кавычки надо экранировать.  
    ну если очень хочется - то можно и экранировать. А вообще, если эта строка не внутри for /f - то незачем, замечательно работает и без экранирования через ^, вполне хватает кавычек, неоднократно проверено.
     

    Цитата:
     а) Аналогично (плюс циркумфлекс из регэкспа по-идее не дойдет до Седа).  
    аналогично - я проверяю работоспособность всего кода который отправляю на форум, экспериментально.
    Когда не проверяю - предупреждаю.
    так что со своими ненаучными идеями - ты зря лезешь, проблема у юзера явно не в экранировании.
     
     
    Alexey87
    Цитата:
    В файле c:\html\0125.html есть аж целых 12  
    ну вообще-то нужно предупреждать, что <h1 у тебя на одной строке, а </h1> - уже на следующей...
    сходу не вспомню как это на лету склеивается sed'ом - вон зато ASE_DAG знает еще и awk.
     
    И сколько строк тебе печатать с такого заголовка?
     
    upd: если строк заголовка всегда не более двух - то можно так:

    Код:
    sed.exe -n -r "/<h[1-6]/ {N;s/\n/ /gi;s/^.*(<h[1-6][^>]*>[^<]*<\/h[1-6]>).*$/\1/gip}" <0125.html >out.txt
    (склеивает в одну строку и печатает, склейку можно выкинуть - печатать станет как в файле,т.е. в 2 строки)
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 10:39 05-05-2011 | Исправлено: wolf0425, 14:00 05-05-2011
    Alexey87

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425, при запуске bat-файл с кодом:

    Цитата:
    @echo off
    setlocal
    pushd "C:\html"
    for %%i in (*.html) do (
    c:\sed\sed.exe -n -r "/<h[1-6]/ {N;s/\n/ /gi;s/^.*(<h[1-6][^>]*>[^<]*<\/h[1-6]>).*$/\1/gip}" <c:\html\0125.html >c:\out.txt
    c:\sed\sed.exe -n -r "/<h[1-6]/ {N;s/\n/ /gi;s/^.*(<h[1-6][^>]*>[^<]*<\/h[1-6]>).*$/\1/gip}" <c:\html\0126.html >c:\out.txt
    )
    popd

    в файле out.txt сохраняется данные только последнего файла, т.е. 0126.html
    как сделать так, чтобы собиралась информация со всех html-файлов в файл out.txt?

    Всего записей: 678 | Зарегистр. 27-01-2008 | Отправлено: 12:56 05-05-2011
    Bezzz

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    как сделать так, чтобы собиралась информация со всех html-файлов в файл out.txt?

    Вместо >c:\out.txt набрать >>c:\out.txt

    Всего записей: 1071 | Зарегистр. 14-04-2005 | Отправлено: 13:05 05-05-2011
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    как сделать так, чтобы собиралась информация со всех html-файлов в файл out.txt?
    писать >>c:\out.txt  
     
    и объясни мне - из каких соображений ты делаешь этот цикл for если никак не используешь переменную цикла и указываешь седу имена файлов явно?
    Оно же работать будет явно не так как ты хочешь и пример с грепом в таком цикле я же не зря выше писал  поправленный...
     
    похоже что всё что ты хочешь - делается в одну строку:
    Код:
    type "C:\html\*.html" | sed.exe -n -r "/<h[1-6]/ {N;s/\n/ /gi;s/^.*(<h[1-6][^>]*>[^<]*<\/h[1-6]>).*$/\1/gip}" >c:\out.txt  
    линейно и тупо, совсем без цикла и без смены каталогов.
    но и без возможности быстро прикрутить дописывание в c:\out.txt какой-то посторонней информации типа имен файлов или времени (для чего этот список заголовков тебе - не понятно же пока)

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 13:10 05-05-2011 | Исправлено: wolf0425, 13:21 05-05-2011
    Alexey87

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые форумчане, благодарю всех за помощь кто участвовал в решении следующего вопроса:

    Цитата:
    есть html-документы (около 1000), нужно извлечь все заголовки (тег h) например в txt-файл.  
     Возможно ли это реализовать с помощью bat-файла? Если да, то как?

    Извлечение заголовков из html-файлов  совершилось!
    Еще раз ОГРОМНЕЙШЕЕ СПАСИБО

    Всего записей: 678 | Зарегистр. 27-01-2008 | Отправлено: 16:12 05-05-2011
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Печатать часть файла между двумя регулярными выражениями (включительно):  
    sed -n "/Iowa/,/Montana/p" (регистро зависимый)  
     
    Но если  текст такой:
     
    Iowa
     ...
    Iowa
     ...
    Montana
     
    то мне требуется взять вот эту часть:
     
    Iowa
     ...
    Montana
     
    а сед берёт
     
    Iowa
     ...
    Iowa
     ...
    Montana
     
    как сделать по моему? Текст идёт с выхода вгета без сохранения на файл.
     

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 16:14 05-05-2011
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    С регулярками , поставь себе RegexBuddy и отлаживай.

    Цитата:
    Печатать часть файла между двумя регулярными выражениями

    Нет, нужно регулярное выражение, которое это и сделает, все , что не подходит под шаблон недоступно.
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 17:24 05-05-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Так это принципиальное ограничение обработки потока «на лету» построчно. Начиная выводить строки, Сед еще понятия не имеет о том, что там дальше по потоку.
    Здесь два принципиальных разных подхода к решению: 1) обрабатывать за раз запись заведомо большую, чем искомый блок текста (так мы поступили выше, при выводе HTML-заголовков); 2) выводить результат только по завершении обработки потока.
     
    Второй вариант почти в любом случае более предпочтителен, им и воспользуемся:
     
    $ cat king_stiven.txt
    Ququ.
    Iowa.
    Non-desired line
    Iowa.
    Desired line 1
    Desired line 2
    Desired line 3
    Montana.
    Blah-blah.

     
    $ awk '/Iowa/{delete s; p=1} p==1{s[FNR]=$0} /Montana/{exit 0} END{for (i in s) print s[i]}' king_stiven.txt
    Iowa.
    Desired line 1
    Desired line 2
    Desired line 3
    Montana.

     
    (вы не указали, что делать, если закрывающее слово встречается неоднократно, я, как видно выше, предположил, что закрыть вывод надо первым из таковых)
     
    P.S. На будущее: с вопросами чисто по неинтерактивной обработке текста лучше обращаться в профильную тему: UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl; ;)

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 17:42 05-05-2011 | Исправлено: ASE_DAG, 17:43 05-05-2011
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ASE_DAG
    Чем она профильней этой?


    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:48 05-05-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    > Чем она профильней этой?

    Цитата:
    UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;

     

    Цитата:
    Неинтерактивная обработка текста (sed, awk, perl) пока тоже здесь.

     
    ;)

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:22 05-05-2011
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    .

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 18:42 05-05-2011 | Исправлено: wolf0425, 18:56 05-05-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    > если однократно -  сказать седу чтоб удалил всё до Iowa и всё после Montana, остаток - то что тебе надо.
    Нет, это полный эквивалент /Iowa/,/Montana/p, а не то, что надо. ;)

    Ну вот, вы уже и затерли. :)

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:06 05-05-2011 | Исправлено: ASE_DAG, 19:08 05-05-2011
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос, как сохранить первое вхождение "Montana"

    Код:
     
    sed -e "1,/Iowa/d" -e "/Montana/,$d" file.txt
     


    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:12 05-05-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    > как сохранить первое вхождение "Montana"
    Но выкинуть первое вхождение для «Iowa»? В связи с чем, собственно, вопрос?

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:26 05-05-2011
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 10
    vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru