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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    01MDM



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

    Цитата:
    Но выкинуть первое вхождение для «Iowa»? В связи с чем, собственно, вопрос?

    А зачем по условию оставлять первое вхождение Iowa если оно не последнее? Вопрос как оставить первое после Iowa вхождение Montana. Например:

    Код:
     
    Iowa
    1234
    5678
    Iowa

    Iowa
    0000
    1111
    2222
    3333
    Montana

    1234
    5678
    Montana
    Montana
    1234

     

     
    Т.к. ( sed -e "1,/Iowa/d" -e "/Montana/,$d" file.txt ) прихватывает красную Монтану.

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

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:20 05-05-2011 | Исправлено: 01MDM, 20:29 05-05-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    > Вопрос как оставить первое после Iowa вхождение Montana.
    Вам это принципиально интересно, или вы считаете, что это отделяет вас от решения задачи т-ща king_stiven?
    Если второе, то я же выше все написал, в т.ч. и про это.

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:38 05-05-2011 | Исправлено: ASE_DAG, 20:40 05-05-2011
    king_stiven

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

    Цитата:
    sed -e "1,/Iowa/d" -e "/Montana/,$d" file.txt  

    Для текста
     
    Iowa ... Montana  
     ...  
    Montana  
     
    он берёт вот этот интервал
     ...  
    Montana
    вместо правильного
    Iowa ... Montana  
     
    но уже что то намечается, текст может быть любым, но мне нужно, чтоб между  
    Iowa и Montana не было других Iowa  и Montana
    Правильно:
    Iowa апрапра Montana
    Неправильно:
    Iowa апрапра Iowa Montana
    Текст нужный может быть как в одну строку, так и в несколько строк.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 20:47 05-05-2011 | Исправлено: king_stiven, 20:48 05-05-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Мой ответ вы не заметили?
     
    > но уже что то намечается
    Ничего здесь не намечается, это почти полный эквивалент тому, что у вас было изначально.

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



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

    Цитата:
    или вы считаете, что это отделяет вас от решения задачи т-ща king_stiven?  

    Я думаю он и сам справится, просто мне показалось нелогичным:
     
    1: "1,/Iowa/d" -- оставляет последнюю строку в этом адресном пространстве
     
    2: "/Montana/,$d" -- удаляет последнюю строку
     


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

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

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

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



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    > Текст нужный может быть как в одну строку, так и в несколько строк.
    А вот это, все-таки, стоило указать сразу. Однако в данном случае , то, что я привел выше, корректно отработает в обоих случаях.
     
    Добавлено:
    > У меня винда
    Спасибо, я догадался. Вы это вообще к чему?
     
    01MDM
    > Я думаю он и сам справится
    А мне почему-то думается, что если он обратился сюда, то сам не справился.
     
    > просто мне показалось нелогичным:  
    > 1: "1,/Iowa/d" -- оставляет последнюю строку в этом адресном пространстве  
    > 2: "/Montana/,$d" -- удаляет последнюю строку
    Нет, здесь все очень логично. Все строки с 1 по /Iowa/ включительно в первом случае и с /Montana/ по последнюю включительно будут удалены.

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

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

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 21:25 05-05-2011
    01MDM



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

    Цитата:
     
    Нет, здесь все очень логично. Все строки с 1 по /Iowa/ включительно в первом случае и с /Montana/ по последнюю включительно будут удалены.
     

    Еще раз:  
    1: "1,/Iowa/d" -- оставляет Iowa
    2: "/Montana/,$d" -- удаляет все
     
    Вот это мне и не понятно. Хотя в файле:

    Код:
     
    1
    2
    3
    4
    5
     

    команда:

    Код:
     
    sed -e "1,/2/d" -e "/4/,$d" file.txt
     
     
    отрабатывает как и предполагается, т.е. выводится 3

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

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



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    > А вот зачем sed...
    А вот так. a,b — это предполагается именно диапазон строк.
     
    Вы разобрались с решением, которое я вам расписал?
     
    Добавлено:
    01MDM
    > "1,/Iowa/d" -- оставляет Iowa
    Где он ее оставляет?
     
    $ cat king_stiven.txt  
    Ququ.
    Iowa.
    Non-desired line
    Iowa.
    Desired line 1
    Iowa. Desired line 2 Montana.
    Desired line 3
    Montana.

     
    $ sed '1,/Iowa/d' king_stiven.txt  
    Non-desired line
    Iowa.
    Desired line 1
    Iowa. Desired line 2 Montana.
    Desired line 3
    Montana.
    Blah-blah.

     
    Как видите, строки удаляются включительно.
     
    Если еще будут не связанные с конкретной задачей вопросы, давайте их обсуждать в другой теме, а то мы сейчас т-ща king_stiven окончательно запутаем. :)

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

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    А мне надо вывести
    1  
    2  
    3  
    ASE_DAG
    Нет, это надо что то устанавливать? Мне хотя б с седом разобратьсчя

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 21:42 05-05-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    > это надо что то устанавливать?
    Да, awk. Сед же установили.
     
    > Мне хотя б с седом разобратьсчя
    А что с ним разбираться? У вас же конкретная задача стояла.

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

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Попробую использовать конструкцию  
    for /f  "delims=" %%q in ('sed -n "/Iowa/,/Montana/p" 10.htm"') do (
    и построчно разобрать , что к чему.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 22:15 05-05-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Чего вы вообще хотите?

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

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

    Цитата:
    king_stiven
    Чего вы вообще хотите?

    Видимо, вытрахать моск бестолковыми вопросами.

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

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ASE_DAG
    Спасибо за помощь, но в авке уже не охота копаться, не факт, что сработает. Ситуация с седом прояснилась, теперь понимаю, куда копать.

    Цитата:
    А вот так. a,b — это предполагается именно диапазон строк.  

     
     
    Добавлено:

    Цитата:
    вытрахать моск

    Какой моск?  

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 22:55 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.

     
    > вытрахать моск бестолковыми вопросами
    Вот у меня точно такое же впечатление сложилось (без обид, ;).

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

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

    Цитата:
    Какой моск?

    Тот самый, который у вас, судя по всему, плохо работает.
    А именно - головной.
    ASE_DAG, судя по постам это уже давно не впечатление.
    Я бы назвал это флудом.

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

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    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
     
    Результата нет. Ничего не выводит. Если простой файл обработать, выводит, а если htm то нет.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 01:38 06-05-2011 | Исправлено: king_stiven, 02:06 06-05-2011
    ASE_DAG



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    > а если htm
    А конкретно?

    Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 02:24 06-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