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

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

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

vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:54 27-04-2007 | Исправлено: Elroir, 03:59 10-09-2007
    melyash



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

    Цитата:
    Попробуй убрать строчку "chcp 1251>nul"

    Все-равно ничего не понятно

    Всего записей: 84 | Зарегистр. 05-05-2007 | Отправлено: 14:07 03-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    melyash
    В командной строке запусти "chcp", каков результат?
    Как ты запускаешь батник - из командной строки или двойным кликом в эксплорере?

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:10 03-06-2007 | Исправлено: Elroir, 14:11 03-06-2007
    melyash



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
     
    "Текущая кодовая страница: 866"
     
    Запускаю в эксплорере, т.к. нужно будет кинуть батник в автозагрузку
     
    Добавлено:
    Elroir
    Огромное спасибо, обойдемся англицким вариантом

    Всего записей: 84 | Зарегистр. 05-05-2007 | Отправлено: 14:15 03-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    melyash
    Очень странно - если код батника ты пишешь в Блокноте (notepad), то строчка "chcp 1251>nul" как раз и должна делать так, чтобы в открывающемся консольном окне, русские буквы отображались нормально. Если все так - ничем больше помочь не могу . Может быть у тебя какие-то региональные настройки мешают нормальному выводу кириллицы.

    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:22 03-06-2007 | Исправлено: Elroir, 14:22 03-06-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Robby
    Скоппируй консольную утилиту "rar.exe" в папку "WINDOWS"

    Код:
     
    @echo off
    for /r d:\temp %%a in (*.rar) do (
    rar e -inul "%%a" "%%~dpa"
    if errorlevel 1 (echo Unpack error>> "%%~dpa\%%~na.txt") else (del /f /q "%%a")
    )
     

    В коде используется каталог d:\temp, заменишь на нужный тебе каталог.
     
    Добавлено:
    mitrichbel
    Запускаешь батник с нужной цифрой в качестве аргумента, например так: "Sorting.bat 15", батник выведет в консоль список файлов у которых в названии последними символами являются цифры "15"

    Код:
     
    @echo off
    if "%~1"=="" goto help
    set myString=%~1.txt
    setlocal enabledelayedexpansion
    for /r d:\temp %%a in (*.txt) do (
    set string=%%a  
    set string=!string: =!
    set string=!string:~-6!
    if !string!==%myString% echo found %%a)
    goto :eof
     
    :help
    Echo Syntax: %~0 number
     
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:56 03-06-2007
    FAPSUK



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

    Цитата:
    FAPSUK  
    Попробуй так:  
     
    Код:  
    @echo off  
    chcp 1251>nul  
    set count=1  
    for /f "delims=" %%a in (list.txt) do (  
    echo %%a | find /i "район">nul && set /a count+=1  
    call :sort_ "%%a")  
    pause  
    goto :eof  
     
    :sort_  
    echo %~1>> %count%.txt  
     
     

     
    Не получается
     
    Как я понимаю в файле List.txt задается ключевые слова по каким надо резать файл на куски?
     
     
    при выполнении команды создается файл 1. с текстом внутри  
    Район: .txt  
    Район: .txt  
    Район: .txt  
    Район: .txt  
     
    и кирдык )
     
    Необходимо файл вида нарезать на отдельные куски  
    как лучше это сделать?
     
    --------------------------------------------------------------------------  
    Район: ШОВГЕHОВСКИЙ          Куп:    435   Статья:   1    ПРОИСШЕСТВИЕ  
     
    01.10.2005 года в 13.20 рапорт ОД Хуажева о том, что 30.09.2005 года около  
    16.00 час в а.чччччччччччччч в своем домовладении по ул.ччччччччччччч , 1,  
    скоропостижно скончался гр-н Киков Рамазан Каральевич, 1964 г/р., не  
    работала. Предположительный причина смерти  - отравление суррогатами  
    алкоголя. Труп в СМЭ не направлялся,  забрали родственники. Выезжали нач  
    РОВД Афашагов, прокурор чччччччччч , нач.КМ Шагужев, ОУР Азашиков, СО Хуажев,  
    УУМ Коблев, БЭП Хакуринов, ОД Хуажев.
    --------------------------------------------------------------------------  
    Район: УВД            Куп:   7507   Статья:   2    ПРОИСШЕСТВИЕ  
     
    01.10.2005 года 08.50 /ЖУИ-11526 от 30.09.2005г/ рапорт УУМ Андрианова о  
    том, что 30.09.2005 года 16.30 в г.ччччччччччиз АРНД /наркодиспансер/  
    бригадой скорой помощи в МГБО доставлен гр-н Пугачев Александр Николаевич  
    1970 г/р, прож. ччччччччччч р-н, п.Приречный, ул. чччччччччччччч, 18, кв.6,  с  
    д-зом отравление суррогатами алкоголя, который 30.09.2005 года 17.00  
    скончался в реанимационном отделении. Обст-ва уст-ся.  Выезжали: УУМ  
    Андрианов.
    --------------------------------------------------------------------------  
    Район: УВД            Куп:   7515   Статья:   2    ПРОИСШЕСТВИЕ  
     
    01.10.2005 года 15.00 /ЖУИ-11560 от 01.10.2005г/ рапорт УУМ Семкина о
    том,что 01.10.2005 года 11.00 в г.чччччч в своей кв.138 по ул. 12 марта,
    150, кор.2, скоропостижно скончалась гр-ка Сеинтова Наталья Алексеевна,1956
    г/р,прож. там же, н/р. Труп без видимых признаков насильственной смерти  
    направлен в АРБСМЭ. Выезжали: СП Казаченко, СМЭ Гайдаева, УУМ Семкин.

    Всего записей: 18 | Зарегистр. 02-03-2006 | Отправлено: 10:30 04-06-2007
    igor_andreev

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

    Цитата:
    Труп без видимых признаков насильственной смерти

    ужоснах  
    FAPSUK
    По дате вытаскивать каждую отдельную сводку проблематично, потому что дата встречается не единожды по тексту.
    Алгоритм приблизительно такой:
    Вроде как в начале каждой сводки слово "Район:" присутствует и более с двоеточием не повторяется. То есть надо выдернуть номера строк, начинающихся с "Район:"

    @ECHO OFF
    CHCP 1251
    MORE test.txt | FIND /N /I "Район:"

    или FINDSTR использовать вместо FIND, и парные строки отдавать SED.EXE, она умеет выводить на экран с такой-то по такую то строки из файла.  
     
    Например из файла test.txt вытащить строки с 12 по 22:
    SED -n "12,22p" test.txt>%count%.txt
    потом с 23 по 36:
    SED -n "23,36p" test.txt>%count%.txt
    Получатся файлы 1.txt,2.txt и тд, потом уже попробовать найти в них дату и переименовать. У меня времени нет сейчас батник полностью писать, убегаю уже, щас может кто еще в этот топик заглянет и в кучу алгоритм соберет тебе

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 12:23 04-06-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    FAPSUK
    У меня файл list.txt нормально "режется", создаются текстовые файлы с именами 1.txt, 2.txt и т.д. и в каждом файле отдельная информация по районам.
    В какой кодировке исходный текст?
     
    Может в этом проблема:  
    Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
     
    Добавлено:
    igor_andreev

    Цитата:
    Вроде как в начале каждой сводки слово "Район:" присутствует и более с двоеточием не повторяется. То есть надо выдернуть номера строк, начинающихся с "Район:"

    Так и сделал:

    Код:
     
    @echo off
    chcp 1251>nul
    set count=1
    for /f "delims=" %%a in (list.txt) do (
    echo %%a | find /i "район">nul && set /a count+=1
    call :sort_ "%%a")
    pause
    goto :eof
     
    :sort_
    echo %~1>> %count%.txt
     

    у меня всё нормально разбирается, то есть в 1.txt вносится одно происшествие, в 2.txt следующее и т.д., то есть на каждое происшествие отдельный текстовый файл.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 12:39 04-06-2007
    FAPSUK



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka, igor_andreev  
     

    Цитата:
    Может в этом проблема:  
    Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы  

     
    Да. это я сделал
     

    Цитата:
    В какой кодировке исходный текст?  

     
    Кодировка DOS
     
     

    Цитата:
    у меня всё нормально разбирается, то есть в 1.txt вносится одно происшествие, в 2.txt следующее и т.д., то есть на каждое происшествие отдельный текстовый файл

     
    Проблема оказалась еще в том, что текстовые файлы начинаются так:
     
     
                                  МВД РФ                                
              Министерство внутренних дел ХХХХХХХХХХХХХХХХХХХХХ
                                   ШТАБ                                
                               Дежурная часть                          
                            ОПЕРАТИВНАЯ СВОДКА                          
                      о преступлениях и происшествиях                  
            которые поступили в органы внутренних дел ХХХХХХХХХХХХХ  
                с 6 часов 16/05/07 до 6 часов 17/05/07      
                                                                           
    ==========================================================================
                         |Прес-|Происшес|Раск- |Раск- |Уст. лиц|Груп-|Задер- |
           РАЙОH:        |тупле|твий    |рыто  |рыва -|соверш. |пой  |жано по|
                         |ний  |        |прест.|емость|прест.  |лиц  |ст. 91 |
    --------------------------------------------------------------------------
    ХХХХХХХХХ           |   14|       4|    11| 78.57|      11|    0|      0|
    ХХХХХХХХХХХ       |    4|       2|     4|100.00|       5|    1|      0|
    ХХХХХХХХХХХХХ   |    4|       0|     3| 75.00|       2|    0|      0|
    ХХХХХХХХХХХХХ   |    6|       1|     6|100.00|       5|    0|      0|
    ХХХХХХХХХ           |    4|       0|     4|100.00|       3|    0|      0|
     
                                     
                                     
                                   Ф А Б У Л А  
                                     
                                    - К У П -  
                                     
     
    --------------------------------------------------------------------------  
    Район: ХХХХХХХХХХХХХХХХХ         Куп:    933   Статья: 158    НЕ РАСКРЫТО
     
    13.10.05 в 19.45 заявление гр-ки Берзеговой Мариет Пшимафовны 1968 г.р.,  
    прож. а. ХХХХХХХХХХ ул. ЧЧская 14/18, бухгалтер ООО "СТО-сервис" а.  
    ХХХХХХХХХ , о том, что 13.10.05 в период с 10.00 до 19.00 в а. ХХХХХХХХ н/у  
    лица, путем взлома врезных замков на входных дверях и металлической решетке,  
    проникли в ее квартиру, откуда тайно похитили деньги в сумме 133 тыс. руб.  
    /купюрами по 500 руб. и 1000 руб./, принадлежащие руководителю ООО  
    "СТО-сервис" гр-ну ХХХ    Схатбию  Довлетбиевичу 1964 г.р., прож. а.  
    ХХХХХХХХХХ ул. Северная 56. С МП изъято: 9 отпечатков пальцев рук, 3 замка,  
    деньги в сумме 51 тыс. руб. Выезжали в 19.55: нач. КМ Абидов, нач. ОУР  
    Бороков, СО Молчанов, ОУР Хамирзов, УУМ Тутарищев, ЭКЦ Милов.
    --------------------------------------------------------------------------  
    Район: ХХХХХХХХХХХХХХХХХХХХХХХХ   Куп:    764   Статья: 158    РАСКРЫТО
     
    13.10.05 в 09.30 явка с повинной от гр-на Нехай Руслана Айдамировича 1976  
    г.р., прож. а. ХХХХХХХХХ ул. Д.Нехая 18, н/р, о том что 06.10.05 в а.  
    Вочепший он по предварительному сговору с гр-нами: 1. ХХХ  Тимуром  
    Юсуфовичем 1981 г.р., прож. а. ХХХХХХХХХ ул. Д.Нехая 14, н/р; 2. ХХХХХ  
    Рустамом Вячеславовичем 1981 г.р., прож. а. ХХХХХХХХХ ул. Д.Нехая 12, н/р,  
    совершили кражу быка черной масти, находившегося на вольном выпасе в 1 км. в  
    южном направлении от а. ХХХХХХХХХ , которого впоследствии забили, а мясо сдали  
    в мясной павильон в п. ХХХХХХХХХХ . Опрошены, обязаны явкой. С МП изъято:  
    деревянные брусья с металлическими тросами, кухонный нож, 3 отрезка бельевой  
    веревки со следами красно-бурого цвета. Ранее заявление не поступало.  
    Выезжали в 09.40: ОУР Шехетль, УУМ Анчок, Хут.  
    --------------------------------------------------------------------------  
     
     
    Написанный BAT-файл ругается на символы " | " тексте   Нельзя ли их как-то сначала заменять на пробелы или другие симводы а потом обрабатывать или вообще игнорировать?  
     
    К тому же в Шапке один раз встречается слово " РАЙОH:      " - но это мелочь..  
    в базе все равно будет происходить посик по ФИО и АДРЕСУ...
     
    И еще, все файлы имеют имена вида:  
    14051405.TXT
    15051505.TXT
    16051605.TXT
    Можно ли работать с ними? Не сливая ежедневные сводки в один файл ФАРом.
     

    Всего записей: 18 | Зарегистр. 02-03-2006 | Отправлено: 13:38 04-06-2007
    igor_andreev

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

    Код:

    @echo off
    chcp 1251
     
    set /a "count=1"
    set "line=1"
     
    for /f "tokens=1 delims=[]" %%a in ('more test.txt ^| find /n "Район:"') do call :write_it "%%a"
    goto eof
     
    :write_it
    set "prev_line=%line%"
    set /a "line=%~1-1"
    sed -n "%prev_line%,%line%p" test.txt>%count%.txt
    set /a "count+=1"

    test.txt два раза замени на свою сводку. Sed у меня эта ftp://ftp.simtel.net/pub/simtelnet/msdos/txtutl/sed15x.zip , можешь поновее какую-нить качнуть, непринципиально. Если правильно разобьет, то из четвертой строки каждого файла дату-время останется вытащить и переименовать.
     
     
    Добавлено:
    Ага, косячек уже вижу, последняя сводка не будет писаться в отдельный файл. Окажусь у монитора попозже - подправлю, я набегами сегодня у компа

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 14:42 04-06-2007 | Исправлено: igor_andreev, 14:44 04-06-2007
    FAPSUK



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

    Цитата:
    FAPSUK  
    Попробуй:  
     
    Код:
    @echo off  
    chcp 1251  
     
    set /a "count=1"  
    set "line=1"  
     
    for /f "tokens=1 delims=[]" %%a in ('more test.txt ^| find /n "Район:"') do call :write_it "%%a"  
    goto eof  
     
    :write_it  
    set "prev_line=%line%"  
    set /a "line=%~1-1"  
    sed -n "%prev_line%,%line%p" test.txt>%count%.txt  
    set /a "count+=1"  
     
     
    test.txt два раза замени на свою сводку. Sed у меня эта ftp://ftp.simtel.net/pub/simtelnet/msdos/txtutl/sed15x.zip , можешь поновее какую-нить качнуть, непринципиально. Если правильно разобьет, то из четвертой строки каждого файла дату-время останется вытащить и переименовать.  

     
    МУЖИКИ СПАСИБО !  
    Все отлично работает!  
    А как мне приспособить програмку под файлы с маской *.txt ?
    Чтобы не клеить кучу сводок в один большой файл ?

    Всего записей: 18 | Зарегистр. 02-03-2006 | Отправлено: 15:11 04-06-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    FAPSUK
    Во всех файлах присутствует шапка? Если да, то попробуй так:

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    for %%f in (*.txt) do call :sort "%%f"
    goto :eof
     
    :sort
    for /f "delims=[]" %%a in ('find /i /n "- к у п -" %~1') do set skip=%%a
    for /f "skip=%skip% tokens=*" %%a in (%~1) do (
    echo %%a | find /i "район">nul && set /a count+=1
    echo %%a>> !count!.txt)
     

    Код сохрани в DOS кодировке и запускай из папки с текстовыми файлами.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:33 04-06-2007
    FAPSUK



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

    Цитата:
    Во всех файлах присутствует шапка? Если да, то попробуй так:  

     
    К сожалению Нет
    Файлы без шапки игнорируются.
     

    Цитата:
    Код сохрани в DOS кодировке и запускай из папки с текстовыми файлами

     
    Работает как часики!

    Всего записей: 18 | Зарегистр. 02-03-2006 | Отправлено: 16:03 04-06-2007
    dius80

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть вроде бы простая задача: нужно каждую ночь очищать содержимое определенной папки. Для этого имеется простой батник с таким содержанием:
     
    rd /s/q c:\Obmen
    md c:\Obmen
    xcacls c:\Obmen /t /g "domain users":c "SYSTEM":f "Administrators":f /y  
     
    Этот  батник запускается ночью шедулером, но иногда папка по какой-то причине не создается, поэтому приходится создавать ее вручную. Помогите пожалуста чем можите))

    Всего записей: 17 | Зарегистр. 30-05-2007 | Отправлено: 17:15 04-06-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    dius80
    Ты как раз и упустил самое главное - причины по которой не удаляется папка
     
    Попытайся делать лог

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:30 04-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dius80
    Ну или измени батник, чтобы внутри все удалялось, а сама папка оставалась бы:

    Код:
     
    cd /d c:\Obmen
    rd /s/q c:\Obmen 2>nul
     


    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 17:37 04-06-2007
    mitrichbel

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    спасибо, конечно, но
    Цитата:
    Запускаешь батник с нужной цифрой в качестве аргумента
    невозможно, мягко говоря - этих файлов почти 1000 штук. При этом тех, которые надо найти, - может быть два десятка пар, сомневаюсь, что больше... Каюсь, моя недоработка, неполностью сформулировал условие(
    То есть хотелось бы, чтоб батник сам перебирал файлы попарно и сравнивал последние части, что ли. Ну или как-то иначе, но без ручного ввода в любом случае

    Всего записей: 1371 | Зарегистр. 30-04-2003 | Отправлено: 21:25 04-06-2007
    sadmn



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Не мог бы поподробнее рассказать про синтаксис и реальные действия двух комманд:

    Цитата:
    for /f "tokens=1* delims=:. " %%a in ('ipconfig ^| find "IP"') do set "new_address=%%b"
    if "%new_address:~0,3%"=="169" goto reconnect

    из поста на на 11 странице.
    Интересует выделенное.
    Заранее спасибо!

    Всего записей: 1354 | Зарегистр. 04-06-2006 | Отправлено: 21:27 04-06-2007 | Исправлено: sadmn, 21:29 04-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sadmn
    for /f "tokens=1* delims=:. " %%a in ('ipconfig ^| find "IP"') do set "new_address=%%b"
    Команда "for" с ключем "/f" используется для разбора строк. В качестве ввода используется результат работы команд в скобках (текст в одинарных кавычках воспринимается как команда, которую надо запустить). Каждая строчка разбирается по отдельности.
    "delims=:. " - разделителями слов в строке являются 3 символа - ":", "." и пробел.
    "tokens=1*" - нас интересует первое слово (1) и оставшаяся часть вместе с разделителями (*)
    'ipconfig ^| find "IP"' - запустить ipconfig, вывод перенаправить команде find. Результатом будут все строчки, в которых встречается подстрока "IP".
    Посмотрим что происходит, когда есть соединение с интернетом (текст из поста Tjomich):
    find найдет две подходящие строки
            IP-адрес  . . . . . . . . . . . . : 169.254.195.178  
            IP-адрес  . . . . . . . . . . . . : 91.124.246.1  
    и передаст их на разбор for-у. Каждая строка разбивается на слова (tokens) и эти слова подставляются в переменные %%а - первое слово , %%b - остальная часть.
    Первое слово в каждой строке это "IP-адрес", а остальная часть (пропускаем все разделители) - это цифры вместе с точками.
    При разборе первой строки, в переменную new_address записывается значение 169.254.195.178. При разборе второй строки туда же записывается значение 91.124.246.1.
    Когда соединение нет, for будет обрабатывать только одну строку и в переменной new_address будет значение 169.254.195.178.
     
    if "%new_address:~0,3%"=="169"
    Чтобы не сравнивать IP адрес полностью, возьмем из переменной new_address только первые 3 символа (0 - с какого места начинать, 3 - количество символов, которые надо взять).
    В общем виде, когда нужно выделить подстроку из переменной, используется такой синтаксис: %var:~n% или %var:~n,m%. В первом варианте мы выделяем подстроку начиная с n-ого символа (нумерация идет с 0) и до конца, во втором варианте - берем m символов начиная с n-ого. n и m могут быть отрицательными - тогда отсчет идет с конца.
    Советую почитать справку по команде for и set.  
     
     


    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 22:35 04-06-2007
    Elroir



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

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    echo.
    for /r %%a in (*.txt) do call :check %%~na
    for %%a in (!sext!) do (
    echo Files grouped by "%%a" ending:
    dir /s /b "* %%a.txt"
    echo.
    )
    goto :EOF
     
    :check
    ::maybe we found last two part of filename
    if "%3"=="" (
      ::if it realy consists of two parts  
      if not "%2"=="" (
        set "test2=no"  
        set "test=%2"
        ::if second part is not zero
        if not !test!==0 ( set /a "test1=!test!-1"
          ::if the result is -1 - it's not a number
          if not !test1!==-1 (set "test2=yes")
        ) else (
        ::if the second part is zero - OK, it's a number
        set "test2=yes")
        ::if we found number
        if !test2!==yes (
         ::check whether it is already in the list
         echo %fext% | find " %2 ">nul
         ::if not - add it to the list
         if not !errorlevel!==0 (set "fext=!fext! %2 ") else (
           echo %sext% | find " %2 ">nul
           if not !errorlevel!==0 (set "sext=!sext! %2 ")
         )
        )
      )
    ) else (
    ::the filename has more then 2 parts - shift it by 1 position to the left
    shift
    ::try again
    goto check
    )
     


    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 01:20 05-06-2007
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 3
    vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru