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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    Понятно. Честно говоря я не помнил про /g:file .
    euheny
    Извини, сарказм был неуместен.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 05:14 29-04-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Если в /g:file.txt в этом самом file.txt будут строчки длиннее 130 символов или около того, то findstr завыпендривается - "Search string too long". Я про это не знал и findstr.exe меня здорово подвела однажды, посему я на нее обозлился и не пользуюсь
     

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 05:41 29-04-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    Будем знать .
    P.S. А с задачей JohnRD она, действительно, справилась на ура ( я проверил )

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 05:47 29-04-2007
    FXPELIVE

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Возможно-ли средствами командной строки или программами работающими с командной срокой узнать ID компакт-диска?
     
    wolf0425

    Цитата:
    ping google.com || echo Нет доступа в интернет && goto :eof  
    wget с нужными параметрами  
     
    или у тебя с ключиками к wget затык?

     
    А что значит || echo Нет доступа в интернет && goto :eof?
    А можно написать код попроще?

    Всего записей: 348 | Зарегистр. 27-04-2006 | Отправлено: 10:27 29-04-2007 | Исправлено: FXPELIVE, 11:42 29-04-2007
    Maza Faka



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

    Цитата:
    А что значит || echo Нет доступа в интернет && goto :eof?

     
    Символ "||" означает, что следующая за этим символом команда выполняется, если предыдущая команда завершилась с ошибкой.
     
    Символ "&&" означает, что следующая за этим символом команда выполняется, если предыдущая команда завершилась без ошибки.
     

    Цитата:
    А можно написать код попроще?

    Так ведь проще использовать эти символы, чем раздувать код применяя операторы условия и переходов
     
    P.S. В шапке много ссылок на информацию по командным файлам...
     
     
    Добавлено:
    JohnRD
    NIKZZZZ
    Elroir
     
    Вот ещё одно решение задачи по сортировке списков:

    Код:
     
    @Echo off
     
    Set Skip=1
     
    :_1
    Set /a Skip+=1
    Set Str=
    Set ok=
     
    For /F "Skip=%Skip% Tokens=*" %%a in ('Find /v "" spisok1.txt') do (
    If not defined Str Set "Str=%%a")
     
    If not defined Str Goto End
     
    For /f "tokens=*" %%b in (spisok2.txt) do (
    If "%%b"=="%Str%" Set ok=yes)
     
    If not defined ok Echo %Str%>> Result.txt
    Goto _1
     
    :End
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:53 29-04-2007 | Исправлено: Maza Faka, 13:59 29-04-2007
    0Vovan0



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    А можно ли батником проассоциировать такое-то расширение с такой то программой?

    Всего записей: 2370 | Зарегистр. 15-07-2005 | Отправлено: 16:38 29-04-2007
    igor_andreev

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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    2 Moderators
     
    Набрёл в сети на ресурс с интересными примерами, ПЛЗ выложите в шапку.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 17:56 29-04-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    В шапке->Полезные ссылки.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:07 29-04-2007
    0Vovan0



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    igor_andreev
    А можно немножко подробней? ато после

    Код:
     
    assoc .mp3=Audiofile
    ftype AudioFile=mplayer.exe "%1"
     

    путь к mplayer.exe прописан в path , из консоли он в любом месте вызывается
    в командере "программа незапускается" а проводник педлагает выбрать чем её запускать.
    И как я понимаю назначить просто расширению нужную программу нельзя, обязательно нужно сначала ему такой-то тип присвоить? Если с типами - можно допустим AudioFile сделать типом для десятка расширений аудио и после можно сразу всем менять прогу с к-й запускаться будет?

    Всего записей: 2370 | Зарегистр. 15-07-2005 | Отправлено: 20:21 29-04-2007
    igor_andreev

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

    Цитата:
    а проводник педлагает выбрать чем её запускать.

    Напиши в ftype полный путь к mplayer.exe

    Цитата:
    обязательно нужно сначала ему такой-то тип присвоить?

    Да. Причем сам можешь придумать, что угодно.

    Цитата:
     Если с типами - можно допустим AudioFile сделать типом для десятка расширений аудио и после можно сразу всем менять прогу с к-й запускаться будет?

    Можно. Запусти например assoc | find /i "txtfile" , увидишь, какие расширения у тебя в OC подпадают под тип txtfile.

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 20:56 29-04-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кстати, господа, вы мне (гуманитарию, т.е. по-простому можете объяснить, почему код, построенный на внутренних командах cmd.exe работает медленнее кода. построенного на внешних утилитах?

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 11:14 30-04-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Tipulatoid
     
    Хм... а как ты замерял скорость и какие именно команды тестил на скорость?

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    У меня были батники с непонятным тугодумием. Я замерял скорость работы ptime.exe (24 Кб) http://www.pc-tools.net/win32/ptime/
    ptime команда аргументы
    ptime "d:\path\test.cmd"
     
    и потом переписывал код по другому

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 12:46 30-04-2007 | Исправлено: igor_andreev, 12:58 30-04-2007
    Tipulatoid



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

    Цитата:
    а как ты замерял скорость и какие именно команды тестил на скорость?

    Ну почему, например, такой код

    Код:
    for /f "tokens=*" %%a in (list1.txt) do (
       find "%%a" list2.txt > nul & if errorlevel 1 echo %%a >> result.txt
    )

    Работает 10 минут, а такой

    Код:
    findstr /g:list2.txt /v list1.txt > result.txt

    секунды 4 на больших файлах?

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 14:13 30-04-2007 | Исправлено: Tipulatoid, 14:14 30-04-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    Ну это же очевидно - в первом случае команда find запуститься столько раз, сколько строчек в файле list1.txt, да еще if errorlevel столько же раз неслабо быстродействие снижает. find кстати не внутренняя команда, это WINDOWS\system32\find.exe, точно такая же, как и WINDOWS\system32\findstr.exe. Если например в list1.txt две тысячи строк, то в диспетчере задач по Ctrl-Alt-Del find.exe и мелькнет две тысячи раз в списке процессов. Правда каждое мелькание заметить тяжело, но результат - 10 минут работы батника. У меня есть похожий батник, десять тысяч файлов с компа отправляет на флешку, каждый файл пакуя в zip. Ну десять тыщ раз pkzip25.exe и мелькает, нехило нагружая комп. Все руки не доходят переделать
    А во втором случае ты запускаешь findstr.exe один раз всего ...

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 14:36 30-04-2007 | Исправлено: igor_andreev, 14:37 30-04-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    Ясно, спасибо. Думал от чего-то, что find - внутренняя команда

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 16:36 30-04-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я несколько лет назад даже какое-то интервью видел с Б.Гейтсом, оно на английском было, насколько я понял смысл вопроса, там у него что-то типа того и спрашивали, почему отдельные приложения, лежащие в system32 описываются в хэлпе, как внутренние команды cmd.exe. Он кажется как-то вежливо отмазался, типа идите все в ж..., моя винда, что хочу, то и делаю.

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 16:51 30-04-2007 | Исправлено: igor_andreev, 16:54 30-04-2007
    0Vovan0



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    igor_andreev
    спасиб. хотя непонятно почему нельзя проассоциировать посто с mplayer.exe
     
    Такой вот вопрос, почитал инфу в шапке но всетаки запутался, может кто-нибудь привести простой пример цикла в батнике, аналогично  

    Код:
    for (i=0; i<n; i++){
    if i==10 break;
    }
     

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



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

    Код:
     
    set n=20
    for /l %%a in (1,1,%n%) do (
    if %%a==10 goto after_loop
    )
    :after_loop
     

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:15 01-05-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