cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
loban_ser, Благодарю
|
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
и снова у меня проблема, сам не могу разобраться На одном из этапов, в скрипте требуется вызывать внешнюю программу, но предполагается ее ручная остановка. Остановка возможна лишь комбинацией CTRL+C, после нажатия которой выводится сообщение:Завершить выполнение пакетного файла [Y(да)/N(нет)]? И тут уже есть риск, что будет нажата клавиша Y, и все дальнейшее выполнение прервется... В принципе, проблему можно воспроизвести, заменив эту программу на команду TIMEOUT, эффект тот же:@echo off echo. TIMEOUT /T 100 /NOBREAK echo. echo Comand 2 echo Comand 3 echo Comand n... echo. pause exit Нужно как-то избежать запроса на нажатие Y/N --- находил примерно такой способ:@echo off echo. echo n| start /wait cmd /c "TIMEOUT /T 100 /NOBREAK" echo. echo Comand 2 echo Comand 3 echo Comand n... echo. pause exit но мне бы не хотелось открытия внешних окон.. --- Подумал, что может быть можно как-то реализовать через VBS, но учитывая что я в нём совершенно не шарю, пытаюсь ковыряться в готовых вариантах что нахожу на форумах, пока все не то...
|
Ander_73
- Стаж: 7 лет 10 месяцев
- Сообщений: 3868
- Репутация:127[+] [-]
|
cartmenezz, я однажды использовал такой конструкт:<nul cmd /c start /w proggy.exe Не знаю, насколько применимо к твоей ситуации.
|
xnik
- Стаж: 6 лет 1 месяц
- Сообщений: 490
- Репутация:12[+] [-]
- Откуда: СССР
|
Скрипт VBS для скрытого запуска BAT CMDDim WShell Set WShell = CreateObject("WScript.Shell") WShell.Run "программа.exe", 0 Set WShell = Nothing
|
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
Ander_73, 90701<nul cmd /c start /w proggy.exe работает, но с открытием второго окна -- xnik, тоже не то, запускается без ожидания, следующие команды выполняются сразу. второго окна конечно не видно, но и возможности нажать CTRL+C нет, а возможность остановить процесс нужна -- если получится что-то придумать вот в этом примере:@echo off echo. TIMEOUT /T 100 /NOBREAK echo. echo Comand 2 echo Comand 3 echo Comand n... echo. pause :al: exit то оно подойдёт и к целевой программе. Ещё раз, что нужно: * Сейчас - запустил, на экране отображается таймер, если жму CTRL+C, выдаётся вопрос "Завершить выполнение пакетного файла?" * Нужно - программа так же запускается в этом же окне, так же есть возможность нажать CTRL+C чтобы ее остановить, но чтобы не было запроса на нажатия Y или N, чтобы батник просто пошёл дальше выполнять команды
|
Ander_73
- Стаж: 7 лет 10 месяцев
- Сообщений: 3868
- Репутация:127[+] [-]
|
90706работает, но с открытием второго окна Ключ /b для start вроде не отменяли.
|
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
Ander_73, с ним какая-то другая проблема была, из головы вылетело, щас до дома доберусь ещё раз попробую... и попробую уже на реальной программе, а не на TIMEOUT Добавлено через 2 часа 55 минут 43 секунды:
90707Ключ /b для start вроде не отменяли @echo off echo. <nul cmd /c start /b /w TIMEOUT /T 100 /NOBREAK echo. echo Comand 2 echo Comand 3 echo Comand n... echo. pause exit Результат: +++ с реальной командой, кстати, ошибка не появляется, но - CTRL+C не срабатывает (сработала кнопка Break, но после ее нажатия был все тот же злополучный вопрос: "Завершить выполнение пакетного файла [Y(да)/N(нет)]?")
|
AZJIO
- Стаж: 6 лет 9 месяцев
- Сообщений: 1325
- Репутация:127[+] [-]
|
Хочу добавить такие строкиexe=cmd.exe arg=/c (Title Очистка Temp & @Echo off & @Echo.Очистка Temp & @Echo. & Color 1e & cd /d "%temp%" && rd /s /q "." & set /p Ok=^>^>) изначально батник такойcd /d "%temp%" && rd /s /q "." здесь && (ИЛИ) означает, что вторая команда выполнится если первая была выполнена успешно. Будет ли это работать используяcmd.exe /c (Title Очистка Temp & @Echo off & @Echo.Очистка Temp & @Echo. & Color 1e & cd /d "%temp%" && rd /s /q "." & set /p Ok=^>^>) попробовав ^&^& не дало результата, боязнь что && может интерпретироваться неправильно. Но была ситуация на WinXP, когда вышеуказанный батник не смог перейти в каталог %temp% и успел что-то удалить в корне диска, после этого не рискую использовать (хотя давно дело было, может я что не так сделал). Кстати, можно ли сделать так, чтобы батник показал текущий путь и выдал сообщение: "хотите удалить всё в этой папке, если "да" нажмите Enter". Такой вариант был бы уверенный.
|
Ander_73
- Стаж: 7 лет 10 месяцев
- Сообщений: 3868
- Репутация:127[+] [-]
|
AZJIO, Текущий путь:
|
loban_ser
- Стаж: 6 лет 10 месяцев
- Сообщений: 577
- Репутация:24[+] [-]
|
AZJIO, вроде как мне помнится, для этого батника используется pushd, а затем popd
|
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
Приветствую. Стоит задача: найти IP-адреса устройств в локальной сети, с открытым 5555 портом. Нужна автоматика - то есть нужно сказать программе: "сканируй локалку", чтобы не надо было прописывать маску подсети и т.п., либо как-то предварительно определить диапазон сканирования Из того что отыскал больше всего подошла команда:у меня она дает такой вывод в консоль:Интерфейс: 192.168.56.1 --- 0x2 адрес в Интернете Физический адрес Тип 224.0.0.22 01-00-5e-00-00-16 статический 224.0.0.251 01-00-5e-00-00-fb статический 224.0.0.252 01-00-5e-00-00-fc статический 239.255.255.250 01-00-5e-7f-ff-fa статический Интерфейс: 192.168.1.140 --- 0xb адрес в Интернете Физический адрес Тип 192.168.1.1 50-ff-20-69-01-6f динамический 192.168.1.86 90-48-9a-45-9c-8d динамический 192.168.1.100 a4-55-90-75-88-49 динамический 192.168.1.110 c0-d2-f3-42-d9-0a динамический 192.168.1.120 00-9e-c8-b3-82-c6 динамический 192.168.1.130 d8-13-99-bc-2d-40 динамический 192.168.1.135 4c-21-d0-49-bc-be динамический 224.0.0.22 01-00-5e-00-00-16 статический 224.0.0.251 01-00-5e-00-00-fb статический 224.0.0.252 01-00-5e-00-00-fc статический 239.255.255.250 01-00-5e-7f-ff-fa статический И уже тут несовсем понятно, все что мне нужно просканировать имеет "Тип = динамический", можно лифильтровать вывод по слову "динамический"? В данном контесте что имеется ввиду под динамическим типом? Это никак не связано с использованием DHCP в роутере? Ато получится, что если у кого-то не используется DHCP, то уже на этом этапе все перестанет работать.. Допустим тут имеется ввиду что-то другое (например что для данного ПК это не постоянное устройство, или еще что-то), и фильтровать нужные строки по типу Динамический можно. Тогда встает региональная проблема - вдруг винда не русская. Пошел по такому пути:chcp 65001 >nul arp -a| find "dynamic" chcp 866 >nul Получил:192.168.1.1 50-ff-20-69-01-6f dynamic 192.168.1.86 90-48-9a-45-9c-8d dynamic 192.168.1.100 a4-55-90-75-88-49 dynamic 192.168.1.110 c0-d2-f3-42-d9-0a dynamic 192.168.1.120 00-9e-c8-b3-82-c6 dynamic 192.168.1.130 d8-13-99-bc-2d-40 dynamic 192.168.1.135 4c-21-d0-49-bc-be dynamic 192.168.1.1 тут конечно лишний, сначала хотел его как-нибудь исключить, отфильтровать, но вроде как и не сильно он помешает.. хотя, пришел к такому варианту:@echo off chcp 65001 >nul for /f %%G in ('arp -a^| findstr "dynamic"') do ipconfig| find "%%G" >nul|| @echo %%G chcp 866 >nul pause Получаю:192.168.1.86 192.168.1.100 192.168.1.110 192.168.1.120 192.168.1.130 192.168.1.135 Теперь нужно проверить список на открытость порта (мне нужен 5555). Наиболее простым показался вариант с использованием PortQry: * как я понял утилита от Майков, так что при всей легковесности AV на нее не ругаются, по крайней мере те что VirusTotal. * работает довольно шустро Примерный синтаксис:PortQry -n 192.168.1.110 -e 5555 Получаю:Querying target system called: 192.168.1.110 Attempting to resolve IP address to a name... IP address resolved to 192.168.1.110 querying... TCP port 5555 (unknown service): LISTENING Или (если порт не активный):Querying target system called: 192.168.1.100 Attempting to resolve IP address to a name... IP address resolved to 192.168.1.100 querying... TCP port 5555 (unknown service): NOT LISTENING Или (если, как я понял, вообще не удалось подключиться.. возможно устр-во уже не в сети):Querying target system called: 192.168.1.86 Attempting to resolve IP address to a name... IP address resolved to 192.168.1.86 querying... TCP port 5555 (unknown service): FILTERED При этом опрос адреса во 2ом случае совсем немного дольше, а в 3ем - ощутимо дольше ... Вроде как необязательно пользоваться findstr, для поиска ": LISTENING", у программы есть параметр -q для скрытия всего вывода. Пришел к примерно такому варианту:@echo off chcp 65001 >nul for /f %%G in ('arp -a^| findstr "dynamic"') do ipconfig| find "%%G" >nul|| ( PortQry -q -n %%G -e 5555 >nul 2>&1 && echo %%G ) chcp 866 >nul pause Получаю:192.168.1.110 192.168.1.130 И именно в данный момент, при моих домашних условиях, это соответствует действительности,.. но надежно ли все это...-Вопросы/проблемы, которые, как мне кажется остались: * Разумно ли фильтровать вывод "arp -a" поиском по ""Тип = динамический" ("dynamic") ? * Вывод команды "arp -a" как-будто не всегда актуальный, как я понял она отображает кэш. Сначала я подумал она выводит все что "засветилось" в сети, но перепроверял - повторяя команду после выключения одного из устройств, с небольшой задержкой, но IP пропал из списка. Так что можно было бы подумать, что можно положиться на "arp -a". Но чуть позже я осознал, что не вижу в списке адреса своего и жены телефонов, при этом они оба были в сети. Хотя те типы устройств, которые нужно искать отображались нормально.. Позже, кстати, телефоны увидел в списке * Наткнулся на Arp-Scan, эта утиллита уже именно сканирует, но проблема в том что ее синтаксис такой:arp-scan -t 192.168.1.1/24 Вот только это у меня дома 92.168.1.1/24 подходит, а мне то нужен универсальный вариант. Самое обидное, что вроде как в линуксе можно так:Вот прям то что доктор прописал, но в виндовой версии этого нет * Большинство инструкций по сканированию сети ведут к проге Nmap, но там та же проблема, нужно указывать диапазон ip-адресов (плюс уже весит поболее, хотя я вроде разобрался какие dll-ки достаточно оставить для работы)
|
rezorustavi
- Стаж: 8 лет 11 месяцев
- Сообщений: 918
- Репутация:55[+] [-]
- Откуда: Грузия, город Рустави
|
Приветствую всех. Помогите пожалуйста написать готовый вариант батника CompactOS с запросами, ( совсем потерял память ) Пример: 1. - Проверить состояние CompactOS 2. - Применить CompactOS 3. - Откат CompactOS 4. - Выход С подтверждениями типа [Да- y / Нет - n]? compact.exe /compactos:query - Проверить состояние CompactOS compact.exe /compactos:always - Применить CompactOS compact.exe /compactos:never - Откат CompactOS
|
Отправлено: 21-Янв-2022 16:07
(спустя 1 час 8 минут)
Ander_73
- Стаж: 7 лет 10 месяцев
- Сообщений: 3868
- Репутация:127[+] [-]
|
rezorustavi,@echo off >nul chcp 860 echo/ set off=& compact.exe /compactos:query| >nul find "The system is not"&& set off=1 if defined off ( echo The system is NOT in the Compact state ) else ( echo The system is IN the Compact state ) echo/ choice /m "Switch the state?" if %errorlevel%==1 if defined off ( compact.exe /compactos:always ) else ( compact.exe /compactos:never )
|
rezorustavi
- Стаж: 8 лет 11 месяцев
- Сообщений: 918
- Репутация:55[+] [-]
- Откуда: Грузия, город Рустави
|
|
wadimus
- Стаж: 8 лет 1 месяц
- Сообщений: 749
- Репутация:91[+] [-]
|
rezorustavi, друг, батники - цэ некомильфо у тебя же есть лаунчер. сделай ини-файл для него. батник будет один (со входом в него в виде переменной %1 - это как выбор меню в твоих примерах) пример: go.bat - это батник первый пункт меню лаунчера: Not defterini Ac и выполняемая команда: go.bat 1 выполняемый файл go.bat и аргумент для этого файла - 1 внутри батника:в переменной p - наш выбор (1 2 3 ..) и дальше пляши от значения переменной p
|
Страница 68 из 94
Текущее время: 25-Дек 17:48
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы
|
|