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

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

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

KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

hErAx

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

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

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

  • Отправлено: 01:53 25-10-2015 | Исправлено: Paromshick, 21:51 18-12-2017
    taravasya



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Здравствуйте! Помогите пожалуйста спастись от суицида)))
    Есть точка доступа(ТД) с вэб-мордой. Есть задача раз в сутки генерировать новый пароль. Собственно с генерацией пароля и с его "вбивкой" в настройки ТД особых проблем не возникло...

    Код:
     
    @Echo Off
    set USER=admin  
    set PWD=admin_password
    :: File to save password
    Set PassFile=wifi-password.txt
    :: Pass Lenght
    Set PassLenght=8
     
    SetLocal EnableDelayedExpansion EnableExtensions
    Set TotalChars=62
    Set CharSet=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWQYZ
    :Loop
    Set /A Rnd=%TotalChars%*%Random%/32768
    Set Pswd=!CharSet:~%Rnd%,1!%Pswd%
    Set /A PassLenght-=1
    If %PassLenght% GTR 0 GoTo Loop
     
    echo Новый пароль сгенерирован
     
    echo.%Pswd%>"%PassFile%"
    findstr %Pswd% %PassFile%
    IF %ERRORLEVEL% == 0 (GOTO PASS_STORE_PASS) else (GOTO PASS_STORE_ERROR)
     
    : PASS_STORE_ERROR
    echo Почему то не удалось сохранить новый пароль в заданный файл. Проверьте его доступность и возможность для записи...
    PAUSE
    EXIT
     
    : PASS_STORE_PASS
    echo Пароль сохранён в: %PassFile%
    echo Пробую изменить пароль в настройках роутера...
    curl.exe -u "%USER%:%PWD%" "http://192.168.0.203/Forms/FormWep11bSetup?Auth=6&WPA_PassPhrase=%Pswd%&WPA_Cipler_Type=1&WPA_GroupKeyUpdateInterval=1800&WepType=1&Submit=Apply"
    IF %ERRORLEVEL% == 0 (GOTO PASS_CHANGE_PASS) else (GOTO PASS_CHANGE_ERROR)
     
    : PASS_CHANGE_ERROR
    echo Почему то не удалось поменять пароль в роутере. Проверьте включён ли он.
    PAUSE
    EXIT
     
    : PASS_CHANGE_PASS
    echo Всё прошло успешно. Выполняю перезагрузку устройства.
    PAUSE
    EXIT
     

     
    Проблема возникла на стадии попытки перезагрузить ТД(это требуется для того, что-бы новый пароль вступил в силу). И проблема получилась странная...
    Если в метку :PASS_CHANGE_PASS добавить строчку:

    Код:
    curl.exe "%USER%:%PWD%" --silent "http://192.168.0.203/Forms/RESET_Switch"

    то в ответ на последнюю возвращается это:

    Код:
     
    <html>
    <head>
    <title>Protected Object</title></head><body>
    <h1>Protected Object</h1>This object on the RomPager server is protected.<p>Return to <A HREF="">last page</A><p>
    </body></html>
     

     
    И ладно бы я подумал, что ссылка не правильная... так нет же! Если эту строчку записать в отдельный bat, то он без вздоха перезагружает ТД.
    Если же её выполнять в одном батнике, вслед за отправкой формы с новым паролем, то не работает.
    В чём может быть затык?
    Стоит отметить что(хотя думаю это здесь ни при чём) если сохранять пароль через вэб-морду, то после нажатия на Apply, всплывает модальный alert "Перезагрузите устройство".
    Похожая "песня" звучит, если запустить два bat файла(в одном смена пароля, в другом перезагрузка), по очереди, с помощью php. Вот так, пароль меняется, но перезагрузки не происходит:

    Код:
     
    <?php  
    exec('cmd /c d:\Webserver\photomir\pass\password_gen.time_free.bat');
    echo file_get_contents('wifi-password.txt');
    exec('cmd /c d:\Webserver\photomir\pass\reboot.bat');
    ?>
     

     
    А если сделать два php файла, запускающих каждый свой bat файл, и вызвать их по очереди, тогда пароль меняется и перезагрузка происходит.
     
    Похоже, дело где-то в сессиях/куках. Хотя никаких куков ни в том ни в другом действии не сохраняется... Но так или иначе, при "раздельном" запуске этих двух команд, проблем нет. При поочерёдном запуске в одной сессии, второе действие(перезагрузка), не происходит...

    Всего записей: 251 | Зарегистр. 16-11-2007 | Отправлено: 01:57 08-12-2016 | Исправлено: taravasya, 03:03 08-12-2016
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Умерли ссылки (Полезные ссылки) в шапке, пожалуйста, кто в теме - поправьте.
     
    · Справочник по параметрам командной строки
    · Cmd. Описание от разработчиков (рус.)
    · Урок bat-аники (для начинающих)
    · Командная строка и сценарии Windows - уроки
    · Библиотека функций для командных файлов
    · Использование ansi.sys
    · Справка по командам в виде Html
    · Команды RunDll32
    · Пример - получение и обработка списка пользователей


    ----------
    Джин, не лезь в бутылку.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 09:29 12-12-2016
    Sphinx114



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    taravasya
    Мож паузу надо перед ребутом. Или через call вызвать команду перезагрузки.

    Всего записей: 1201 | Зарегистр. 26-03-2011 | Отправлено: 10:32 12-12-2016 | Исправлено: Sphinx114, 10:34 12-12-2016
    Smitis



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    taravasya
    Если точка поддерживает подключение через telnet, можно попробовать через него.


    ----------
    Разум когда-нибудь победит

    Всего записей: 3177 | Зарегистр. 09-02-2003 | Отправлено: 11:21 12-12-2016
    taravasya



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

    Цитата:
    Мож паузу надо перед ребутом

    Пробовал... Не помогает((
     

    Цитата:
    Или через call вызвать команду перезагрузки

    Не подскажите вкратце синтаксис? Или он для каждого устройства будет разным?
     

    Цитата:
    Если точка поддерживает подключение через telnet, можно попробовать через него

    Пока не уверен, что к telnet-у реально подключиться с сайта. Одно из условий, что сгенерированный пароль можно просмотреть и обновить на спец. странице.

    Всего записей: 251 | Зарегистр. 16-11-2007 | Отправлено: 16:29 12-12-2016
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    taravasya
    Там, скорее всего, проблема в том, что вебморда не принимает множественных (больше одного) авторизованных подключений. Используемый curl авторизуется, но сессию не завершает, в результате она остаётся болтаться "открытой" (с точки зрения вебморды), и до истечения таймаута повторные вызовы curl не проходят...
    Как проверить: откройте сессию с точкой в браузере и попробуйте ребутнуть точку curl'ом. 99% что не выйдет...
    Единственный вариант с несколькими curl'ами, который я вижу - это пауза между ними длительностью более таймаута вебморды...
     

    Цитата:
    Пока не уверен, что к telnet-у реально подключиться с сайта.

    Не менее реально, чем к батнику.
    Телнет-сессию можно организовать и средствами PHP/ASP, и при помощи java/jscript, и при помощи того же самого батника (если уж вы его с сайта вызываете)...
     
    11-я часть данной темы, к сожалению, не сохранилась (там рассматривались способы создания telnet-сессии в батнике для выполнения нескольких последовательных команд), но кое-что есть тут, в частности - батник, скомбинированный с jscript, и батник, использующий спец. утилиту TSE.
    Если у точки есть консольная команда для изменения пароля, то, ИМХО, проще сделать всё через телнет...


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

    Всего записей: 2376 | Зарегистр. 12-10-2006 | Отправлено: 21:48 12-12-2016
    Sphinx114



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

    Цитата:
    Не подскажите вкратце синтаксис?


    Код:
    call curl.exe "!USER!:!PWD!" --silent "http://192.168.0.1/Forms/RESET_Switch"

    Всего записей: 1201 | Зарегистр. 26-03-2011 | Отправлено: 21:53 12-12-2016
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    taravasya
    Перечитал ваш первоначальный вопрос - и пришёл в ужас.
    Вообще-то PHP сам по себе (без "притягивания за уши" батников и curl) вполне достаточен для организации как http-сессии (с последовательным обращением к нескольким URL), так и telnet-сессии (с выполнением группы команд). Не говоря уж о генерации "пароля"...
    Уж если берётесь за программирование веб-сервера - так хотя бы изучите возможности применяемого средства...

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

    Всего записей: 2376 | Зарегистр. 12-10-2006 | Отправлено: 01:50 13-12-2016
    taravasya



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

    Сначала нужно было одно,.. потом понадобилось другое..))) Просто лень было всё заново переделывать на php, поэтому воткнул такой костыль. Кроме того, так остаётся "централизация" изменений. Батник тоже нужен... таким образом я меняю только его, а эффект и там и там..
    Хотя конечно да... я программер тот ещё))
    В любом случае спасибо за подсказки. В ужас не надо. Берегите нервы

    Всего записей: 251 | Зарегистр. 16-11-2007 | Отправлено: 02:37 13-12-2016
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    taravasya
    Батником, в том числе, можно тупо запускать php-скрипт (это к вопросу о "централизации изменений"). И это правильнее, нежели запуск батника из php; во всяком случае, пока речь идёт о работе с сокетами (в коим относятся и telnet, и http). Совершенно ни к чему множить сущности...
    А так можно и весь сайт на cmd-скриптах и qbasic сделать вместо php (при ОЧЕНЬ большом желании).

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

    Всего записей: 2376 | Зарегистр. 12-10-2006 | Отправлено: 03:59 13-12-2016
    taravasya



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

    Цитата:
    Батником, в том числе, можно тупо запускать php-скрипт

    Ну это уж простите... по-моему ради красного словца сказано. Мне же PHP нужен, для того, что бы с вэб-странички можно было обновить пароль в ручную. Как это простите батником можно сделать? ))
    А сайт весь, за исключением одной этой странички, на CMS, как и у любого рядового колхозника.. так что не надо ля-ля...

    Всего записей: 251 | Зарегистр. 16-11-2007 | Отправлено: 04:50 13-12-2016
    BorlandIMHO

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    taravasya
    Вообще это уже оффтоп, но правильным является разделение кода интерфейса пользователя (для красоты на сайте) и кода, выполняющего собственно действие. Всё прекрасно реализуется в рамках ООП (PHP, насколь я в курсе, классы поддерживает).
    Если писать php-код "в стиле батника" и одним большим файлом - то да, получится весьма колхозненько.
    И к тому же - решение на php является более универсальным, ибо запустить можно на практически любой ОС (ту же CMS, ИМХО, намного правильнее держать на *NIX-сервере, нежели на своей рабочей станции), в то время как батники жёстко привязаны именно к винде...
    Лучше сразу делать правильно, чем потом в спешке всё перепиливать...

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

    Всего записей: 2376 | Зарегистр. 12-10-2006 | Отправлено: 21:12 13-12-2016 | Исправлено: BorlandIMHO, 03:13 14-12-2016
    Smitis



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

    Цитата:
    Одно из условий, что сгенерированный пароль можно просмотреть и обновить на спец. странице.

    Не понял. В чём прикол, использовать curl, но отказываться от telnet?
    Вот пример скрипта для tst10.exe (telnet-клиент с поддержкой скриптов) для моей точки доступа TP-LINK TD-W8951ND

    Код:
    192.168.1.1
    wait "Password:"
    send "1234\m"
    wait "tc>"
    send "rtwlan wpapsk пароль\m"
    wait "tc>"
    send "rtwlan save\m"

    без всякой перезагрузки.
    Что-то подобное должно быть и для Вашей.
     


    ----------
    Разум когда-нибудь победит

    Всего записей: 3177 | Зарегистр. 09-02-2003 | Отправлено: 22:27 13-12-2016 | Исправлено: Smitis, 22:29 13-12-2016
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Хочу сделать LNK файл, который будет перезагружать или выключать компьютер. С командой, которая это сделает, проблем нет. Проблема в том, как спросить пользователя, действительно он хочет сделать операцию? Надо как-то запихнуть всё это в одну строку, чтобы работало, например, через командный интерпретатор.
    Пока нашёл только это:

    Код:
    set /P c=Are you sure you want to continue[Y/N]?
    if /I "%c%"=="Y" shutdown.exe /s /f
     

    Как сделать в виде одной строки?
     
    Пробую так:
    Код:
    set /P cc="Are you sure you want to continue[Y/N]?" & if /I "%cc%"=="Y" (Msg * "insert your message here")
    не получается.
     
    P.S. CHOICE не предлагать, т.к. он не везде присутствует.

    ----------
    Джин, не лезь в бутылку.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 11:11 14-12-2016 | Исправлено: nick7inc, 11:19 14-12-2016
    Smitis



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

    Код:
    mshta.exe "javascript:var shl=new ActiveXObject('WScript.Shell');if(shl.Popup('Continue shutdown?',-1,'Shutdown',4+32)==6) shl.Run('shutdown.exe /s /f /t 0',0,false);close()"



    ----------
    Разум когда-нибудь победит

    Всего записей: 3177 | Зарегистр. 09-02-2003 | Отправлено: 13:04 14-12-2016
    NIKZZZZ



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

    Цитата:
    Как сделать в виде одной строки?  


    Код:
    cmd /v:on /c  "set /P cc=Are you sure you want to continue[Y/N]? & if /i _!cc!==_y Msg * ""insert your message here"" "

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 13:08 14-12-2016
    YuS_2



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

    Цитата:
    не получается.

    Группа команд в одной строке равнозначна группе команд из нескольких строк, но заключенных в оператор скобки, т.е.:
     

    Код:
    set /P c=Are you sure you want to continue[Y/N]? & if /I "%c%"=="Y" shutdown.exe /s /f

    эквивалент:

    Код:
    (
    set /P c=Are you sure you want to continue[Y/N]?  
    if /I "%c%"=="Y" shutdown.exe /s /f
    )

    где %-раскрытие переменных работает не так, как обычно, а значит необходимо включить отложенное раскрытие переменных и использовать !-раскрытие:

    Код:
    setlocal enabledelayedexpansion
    (
    set /P c=Are you sure you want to continue[Y/N]?  
    if /I "!c!"=="Y" shutdown.exe /s /f
    )

    или:

    Код:
    setlocal enabledelayedexpansion
    set /P c="Are you sure you want to continue [Y/N]? " &if /I "!c!"=="Y" shutdown.exe /s /f

    Ну, т.е. по сути, это то же самое, что написал NIKZZZZ, только в его коде запускается отдельный экземпляр среды cmd

    ----------
    scio me nihil scire

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:58 14-12-2016
    NIKZZZZ



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

    Цитата:
    запускается отдельный экземпляр среды cmd

    Задача была  

    Цитата:
    Хочу сделать LNK файл

    Это не отдельный экземпляр, а единственный, который запускается через LNK файл.
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 16:20 14-12-2016
    YuS_2



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

    Цитата:
    который запускается через LNK файл.

    А, точно. Про ярлык-то, я как-то упустил из виду... но это и не принципиально, в данном случае.  
    Хотя, если исходить из названия топика...

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 17:31 14-12-2016
    nick7inc



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

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 18:21 14-12-2016
       

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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 12
    KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru