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

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

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

    Цитата:
    Проверил еще раз, у меня все работает. Ты grep скачал?  

     
    Его просто установить и тело программы оставить таким, как Вы предложили ? Или нужно конкретный путь указывать к grep ?

    Всего записей: 5466 | Зарегистр. 15-07-2003 | Отправлено: 12:18 09-01-2011
    wolf0425



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

    Цитата:
     Или нужно конкретный путь указывать к grep ?

    grep должен лежать или в одном каталоге с тем батником или в любом из каталогов, перечисленных в переменной PATH
    то же самое требование для sed.exe для альтернативного варианта.

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 12:56 09-01-2011 | Исправлено: wolf0425, 12:57 09-01-2011
    zhuchella

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

    Цитата:
    в любом из каталогов, перечисленных в переменной PATH

    А где перечилслены эти каталоги ?

    Всего записей: 5466 | Зарегистр. 15-07-2003 | Отправлено: 13:08 09-01-2011
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zhuchella
    В гугле спроси
    http://www.google.ru/

    Всего записей: 2165 | Зарегистр. 17-07-2006 | Отправлено: 13:31 09-01-2011
    king_stiven

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

    Код:
    echo %PATH%

    Всего записей: 2165 | Зарегистр. 17-07-2006 | Отправлено: 22:07 09-01-2011
    sL4yer



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, как можно сделать индикатор прогресса? Например, для команды move

    Всего записей: 49 | Зарегистр. 22-10-2008 | Отправлено: 02:14 10-01-2011
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sL4yer
    Насколько я знаю, для отдельной команды - никак.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 02:28 10-01-2011
    sL4yer



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
     
    а для цикла возможно? И возможно ли это сделать вообще?
     
    Добавлено:
    подскажите пожалуйста, почему не работает данное выражение:

    Код:
    for %%i in (*.mp4 *.wmv *.avi *.mpg *.mpeg) do (
        if exist ".\%%i" (
            echo %%i
        ) else (
            echo not found
        )
    )

    Всего записей: 49 | Зарегистр. 22-10-2008 | Отправлено: 02:32 10-01-2011
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sL4yer
    Прогресс-бар неоднократно обсуждался. Например два месяца назад

    Цитата:
    почему не работает данное выражение

    Потому что несуществующие элементы не обрабатываются циклом вообще.
    Попробуй так:

    Код:
     
    @echo off
     
    for %%i in (mp4 wmv avi mpg mpeg) do (
     
        if exist "*.%%i" (dir /b /a *.%%i) else (echo *.%%i not found)
     
    )  
     



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

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:33 10-01-2011 | Исправлено: 01MDM, 10:50 10-01-2011
    AvgustiN



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Здравствуйте!
     
    Имеется вот такой вполне рабочий батничек:

    Код:
    title Load program...Please wait...
    @echo off
    net use w: \\192.168.1.1\OfficeReg > nul
    echo "1. Disk connected"
    cd d:\
    d:
    md KazNTU
    cd d:\KazNTU
    md CICT
    cd d:\KazNTU\CICT
    md Registrators
    cd d:\KazNTU\CICT\Registrators
    md Program
    cd d:\KazNTU\CICT\Registrators\Program
    md Office.Registrator
    copy w:\Office.Registrator.exe d:\KazNTU\CICT\Registrators\Program\Office.Registrator\Office.Registrator.exe > nul
    echo "2. File updated"
    start d:\KazNTU\CICT\Registrators\Program\Office.Registrator\Office.Registrator.exe > nul
    echo "3. Run program"
    net use w: /delete > nul
    echo "4. Disk disconnected"
    exit
    rem pause

     
    Данный бат-файл коннектится к определенной сетевой папке на сервере, берет файл Office.Registrator.exe и копирует в созданную папку на компе пользователя и запускает его на выполнение.
     
    Хотелось бы узнать, как мне изменить батничек так, чтобы, допустим, когда нет сети, то файл Office.Registrator.exe запускался бы из папки на компе пользователя, а не лез в сетевую папку на сервере для того, чтобы скопировать его? Какую обработку прописать в бат-файле? Есть ли каки-нить исключения, которые можно обработать в бат-файле?
     
    Заранее спасибо и прошу прощения, если такой вопрос уже задавался.
     

    Всего записей: 84 | Зарегистр. 04-11-2006 | Отправлено: 11:08 10-01-2011 | Исправлено: AvgustiN, 11:25 10-01-2011
    JI063uk



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте. Есть батни следующего содержимого, возникла проблема, когда перезагружаешь с 1 до 9 все нормально, а вот с 10 возникают проблемы, пробовал ставить  и 0, 10, A. Ничего не помогает перезагрузить 10 ип адрес. Меняю на любой с 1 до 9 все работает. Подскажите, как сделать, чтобы перезагружались не только с 1 до 9, но и с 10 до 15

    Код:
     
    @echo off
    CHOICE /C:1234567890 /N KAT01=1, KAT02=2, KAT03=3, KAT04=4, KAT05=5, KOM07=7, KOM08=8, KOM09=9, BEL31=6, BEL30=0  //запрос у пользователя какой комп перезагрузить
    IF ERRORLEVEL 9 GOTO 9
    IF ERRORLEVEL 8 GOTO 8
    IF ERRORLEVEL 7 GOTO 7
    IF ERRORLEVEL 6 GOTO 6
    IF ERRORLEVEL 5 GOTO 5
    IF ERRORLEVEL 4 GOTO 4
    IF ERRORLEVEL 3 GOTO 3
    IF ERRORLEVEL 2 GOTO 2
    IF ERRORLEVEL 1 GOTO 1
    IF ERRORLEVEL 0 GOTO 0
    :1
    shutdown -m "\\ип адрес" -r -f -t 00
    GOTO End
    :2
    shutdown -m "\\ип адрес" -r -f -t 00
    GOTO End
    :3
    shutdown -m "\\ип адрес" -r -f -t 00
    GOTO End
    :4
    shutdown -m "\\ип адрес" -r -f -t 00
    GOTO End
    :5
    shutdown -m "\\ип адрес" -r -f -t 00
    GOTO End
    :6
    shutdown -m "\\ип адрес" -r -f -t 00
    GOTO End
    :7
    shutdown -m "\\ип адрес" -r -f -t 00
    GOTO End
    :8
    shutdown -m "\\ип адрес" -r -f -t 00
    GOTO End
    :9
    shutdown -m "\\ип адрес" -r -f -t 00
    GOTO End
    :0
    shutdown -m "\\ип адрес" -r -f -t 00
    :End
     

    Всего записей: 55 | Зарегистр. 24-01-2008 | Отправлено: 11:15 10-01-2011
    BorlandIMHO

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AvgustiN
    1)Ни разу непонятно, зачем столько md/cd.
    Можно сразу 1>nul 2>&1 if not exist "d:\KazNTU\CICT\Registrators\Program\Office.Registrator\nul" md "d:\KazNTU\CICT\Registrators\Program\Office.Registrator"
    Намного компактнее...
    2) 1>nul 2>&1 pushd \\192.168.1.1\OfficeReg && (действия при удачном подключении) || (действия при неудачном подключении)
    pushd подключает временный диск на первую с конца свободную букву и делает путь текущим. При удачном подключении выполняются "(действия при удачном подключении)", при неудачном (отсутствует сеть или указанный ресурс) - "(действия при неудачном подключении)"

    ----------
    http://www.imho.ws

    Всего записей: 1203 | Зарегистр. 12-10-2006 | Отправлено: 11:53 10-01-2011 | Исправлено: BorlandIMHO, 11:55 10-01-2011
    AvgustiN



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    BorlandIMHO
    1) Спасибо Вам большое! Дело в том, что я только начинаю осваивать батнички. Раньше не сталкивался с этим делом.
    2) Теперь как бы мне все это в один код запихнуть? Не поможете? Что такое в Вашем ответе за цифры "1" и "2"? Откда они взялись?

    Всего записей: 84 | Зарегистр. 04-11-2006 | Отправлено: 12:28 10-01-2011
    BorlandIMHO

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

    Цитата:
    Что такое в Вашем ответе за цифры "1" и "2"? Откда они взялись?

    Перенаправление вывода следующей команды. Примерно то же, что в Вашем батнике делает ">nul"

    Цитата:
    как бы мне все это в один код запихнуть?

    Как-то так:
    Код:
    title Load program...Please wait...
    @echo off
    1>nul 2>&1 pushd "\\192.168.1.1\OfficeReg" && (
    echo 1. Network disk connected
    1>nul 2>&1 pushd "d:\KazNTU\CICT\Registrators\Program\Office.Registrator" && popd ||1>nul 2>&1 md "d:\KazNTU\CICT\Registrators\Program\Office.Registrator"
    1>nul 2>&1 copy /y "Office.Registrator.exe" "d:\KazNTU\CICT\Registrators\Program\Office.Registrator\Office.Registrator.exe"    
    echo 2. File updated
    start "" "d:\KazNTU\CICT\Registrators\Program\Office.Registrator\Office.Registrator.exe"
    echo 3. Run program
    popd
    echo "4. Disk disconnected"
    ) || (
    REM действия при неудачном подключении
    start "" "d:\KazNTU\CICT\Registrators\Program\Office.Registrator\Office.Registrator.exe" || echo ERROR! File d:\KazNTU\CICT\Registrators\Program\Office.Registrator\Office.Registrator.exe not found!
    )  
    exit
    rem pause  
    "if exist" тоже на pushd/popd заменил.

    ----------
    http://www.imho.ws

    Всего записей: 1203 | Зарегистр. 12-10-2006 | Отправлено: 12:50 10-01-2011 | Исправлено: BorlandIMHO, 12:57 10-01-2011
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JI063uk
    Не знаю, какой из множества утилит choice ты пользуешься, но она воспринимает только односимвольные ответы.
    Воспользуйся конструкцией set /p :

    Код:
     
    @echo off
    setlocal
    set /p "answer=Please choose the comp to shutdown (1-20): "
    goto %answer%
    :1 ...
    goto End
    :2 ...
    goto End
    ...
    ...
    :End
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:12 10-01-2011 | Исправлено: Elroir, 16:57 10-01-2011
    BorlandIMHO

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JI063uk
    Рекомендую внимательно прочитать справку по choice. Она в принципе никогда не возвращает ERRORLEVEL 0. Исключительно 1 и выше. Варианты выбора (каждый - один символ, неважно буква или цифра) нумеруются от 1 до сколько-там-вариантов. Возвращаемый ERRORLEVEL равен номеру выбранного варианта, независимо от его символьного значения.
     
    Добавлено:
    Elroir опередил, однако.


    ----------
    http://www.imho.ws

    Всего записей: 1203 | Зарегистр. 12-10-2006 | Отправлено: 13:14 10-01-2011
    AvgustiN



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    BorlandIMHO
    Я благодарен Вам за помощь! Спасибо огромное!
     
    Я вот тут тоже поломал малость голову и вот что получилось:

    Код:
    @echo off
    echo "Пожалуйста, подождите..."
    title "Загружается программа..."
    pushd \\192.168.10.1\OfficeReg && goto l1 || goto l2
    :l1
    md "d:\KazNTU\CICT\Registrators\Program\Office.Registrator\"
    copy Office.Registrator.exe d:\KazNTU\CICT\Registrators\Program\Office.Registrator\Office.Registrator.exe > nul
    echo "Файл обновлен"
    start d:\KazNTU\CICT\Registrators\Program\Office.Registrator\Office.Registrator.exe > nul
    echo "Программа загружается"
    exit
    :l2
    d:
    cd d:\KazNTU\CICT\Registrators\Program\Office.Registrator\
    if exist Office.Registrator.exe goto l3 ELSE goto l4
    :l4
    echo Office.Registrator.exe не найден
    pause
    exit
    :l3
    start Office.Registrator.exe > nul
    exit

    Всего записей: 84 | Зарегистр. 04-11-2006 | Отправлено: 13:16 10-01-2011
    BorlandIMHO

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

    Цитата:
    :l2
    d:
    cd d:\KazNTU\CICT\Registrators\Program\Office.Registrator\
    if exist Office.Registrator.exe goto l3 ELSE goto l4

    Если нет папки под cd - будет ошибка. Лучше сразу проверять существование файла по полному пути: if exist "d:\KazNTU\CICT\Registrators\Program\Office.Registrator\Office.Registrator.exe"
    Ну и, если уж воспользовались pushd - добавьте парную команду popd для отключения сетевого диска и возврата в стартовую папку в ветку, где pushd выполнилась успешно.

    ----------
    http://www.imho.ws

    Всего записей: 1203 | Зарегистр. 12-10-2006 | Отправлено: 13:34 10-01-2011 | Исправлено: BorlandIMHO, 13:35 10-01-2011
    AvgustiN



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    BorlandIMHO
    Спасибо за советы! Переделал Ваш кусочек и вот что получилось у меня:

    Код:
    @echo off
    echo "Please wait... / Пожалуйста, подождите..."
    title Load program Office Registrator... / Загрузка программы Office Registrator...
    1>nul 2>&1 pushd "\\192.168.1.1\OfficeReg" && (
    echo "1. Network disk connected. / Сетевой диск подключен."
    1>nul 2>&1 pushd "d:\KazNTU\CICT\Registrators\Program" && popd || 1>nul 2>&1 md "d:\KazNTU\CICT\Registrators\Program"
    1>nul 2>&1 copy /y "Office.Registrator.exe" "d:\KazNTU\CICT\Registrators\Program\Office.Registrator.exe"
    echo "2. File updated. / Файл обновлен."
    start "" "d:\KazNTU\CICT\Registrators\Program\Office.Registrator.exe"
    echo "3. Run program. / Программа запущена."
    popd
    echo "4. Network disk disconnected. / Сетевой диск отключен."
    rem pause
    ) || (
    REM действия при неудачном подключении
    if exist "d:\KazNTU\CICT\Registrators\Program\Office.Registrator.exe" goto l1 else goto l2
    :l2
    echo FILE Office.Registrator.exe NOT FOUND! / ОШИБКА! Файл Office.Registrator.exe НЕ НАЙДЕН!
    pause
    exit
    :l1
    start "" "d:\KazNTU\CICT\Registrators\Program\Office.Registrator.exe"
    exit
    )
    exit
    rem pause

     
    В "действиях при неудачном подключении" в случае если файла не было, то выходила системная ошибка Виндовс, что не нужно показывать пользователю. Пришлось использовать метки. Может это и малость неправильно, но тестирование прошло удачно.
     
    Спасибо Вам за содействие!

    Всего записей: 84 | Зарегистр. 04-11-2006 | Отправлено: 06:15 11-01-2011 | Исправлено: AvgustiN, 06:16 11-01-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.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru