[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 6 месяцев
  • Сообщений: 526
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
loban_ser, Благодарю ay

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 6 месяцев
  • Сообщений: 526
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
и снова у меня проблема, сам не могу разобраться ak
На одном из этапов, в скрипте требуется вызывать внешнюю программу, но предполагается ее ручная остановка.
Остановка возможна лишь комбинацией 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
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
cartmenezz, я однажды использовал такой конструкт:
<nul cmd /c start /w proggy.exe
Не знаю, насколько применимо к твоей ситуации.

[Цитировать]

    xnik
  • 19473
  • Стаж: 5 лет 5 месяцев
  • Сообщений: 411
  • Репутация:6

    [+] [-]
  • Откуда: СССР
Скрипт VBS для скрытого запуска BAT CMD
Dim WShell
Set WShell = CreateObject("WScript.Shell")
WShell.Run "программа.exe", 0
Set WShell = Nothing

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 6 месяцев
  • Сообщений: 526
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
Ander_73, aa
90701<nul cmd /c start /w proggy.exe
работает, но с открытием второго окна
--
xnik, aa
тоже не то, запускается без ожидания, следующие команды выполняются сразу. второго окна конечно не видно, но и возможности нажать 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
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
90706работает, но с открытием второго окна
Ключ /b для start вроде не отменяли.

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 6 месяцев
  • Сообщений: 526
  • Репутация: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
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1264
  • Репутация: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
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
AZJIO, aa
Текущий путь:
echo %CD%

[Цитировать]

    loban_ser
  • 17796
  • Стаж: 6 лет 1 месяц
  • Сообщений: 578
  • Репутация:24

    [+] [-]
AZJIO, aa вроде как мне помнится, для этого батника используется pushd, а затем popd ah

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 6 месяцев
  • Сообщений: 526
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
Приветствую.
Стоит задача: найти IP-адреса устройств в локальной сети, с открытым 5555 портом. Нужна автоматика - то есть нужно сказать программе: "сканируй локалку", чтобы не надо было прописывать маску подсети и т.п., либо как-то предварительно определить диапазон сканирования
Из того что отыскал больше всего подошла команда:
arp -a
у меня она дает такой вывод в консоль:
Интерфейс: 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 подходит, а мне то нужен универсальный вариант. Самое обидное, что вроде как в линуксе можно так:
arp-scan --localnet
Вот прям то что доктор прописал, но в виндовой версии этого нет
* Большинство инструкций по сканированию сети ведут к проге Nmap, но там та же проблема, нужно указывать диапазон ip-адресов (плюс уже весит поболее, хотя я вроде разобрался какие dll-ки достаточно оставить для работы)

[Цитировать]

    rezorustavi
  • 2337
  • Стаж: 8 лет 2 месяца
  • Сообщений: 928
  • Репутация:55

    [+] [-]
  • Откуда: Грузия, город Рустави
aa Приветствую всех. Помогите пожалуйста написать готовый вариант батника 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

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация: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
  • 2337
  • Стаж: 8 лет 2 месяца
  • Сообщений: 928
  • Репутация:55

    [+] [-]
  • Откуда: Грузия, город Рустави
Ander_73,
aa Приветствую. Огромное Вам спасибо ay
Только хотелось бы полноценный вариант, не сразу запрос сделать на Применить CompactOS, а типа:
1. - Проверить состояние CompactOS 1
2. - Применить CompactOS 2
3. - Откат CompactOS 3
4. - Выход 4
И желательно на русском языке.
----------------------------------------------------------------------------------------------------------------------------------------------------------
Пример совсем другого батника на турецком языке:
@ECHO OFF
call :IsAdmin
CLS
ECHO 1. Not defterini Ac
ECHO 2. Hesap makinasini Ac
ECHO 3. Yeni bir kullanici hesabi olustur
ECHO 4. kullanici Hesabi sil
ECHO 5. Ekrani Kapat
ECHO.
set /p op= tercihiniz:
if %op%==1 goto Not defterini Ac
if %op%==2 goto Hesap makinasini Ac
if %op%==3 goto Yeni bir kullanici hesabi olustur
if %op%==4 goto kullanici Hesabi sil
if %op%==5 goto Ekrani Kapat
goto :choice
:Not defterini Ac
cls
start Notepad.exe
GOTO End
:Hesap makinasini Ac
start calc.exe
GOTO End
:Yeni bir kullanici hesabi olustur
cls
set /p UserInputPath1= Lutfen bir kullanici ismi giriniz: &
set /p UserInputPath2= Lutfen bir Sifre belirleyiniz: &
net user %UserInputPath1% %UserInputPath2% /add
set /p net localgroup administrators %UserInputPath1% /add
echo.
echo.
GOTO End
:kullanici Hesabi sil
cls net users
echo Silinecek kullanici adini yazin
set /p UserInputPath1= KUllaniciadi: &
net user %UserInputPath1% /delete
echo.
echo.
GOTO End
:Ekrani Kapat
Exit
:IsAdmin
Reg.exe query "HKU\S-1-5-19\Environment"
If Not %ERRORLEVEL% EQU 0 (
Cls & Echo Komut istemini Yonetici yetkisi ile Calistirin ...
Pause & Exit
)
Cls
goto:eof
У себя не запускать, я не тестировал, привел для примера. Мало ли...

[Цитировать]

    wadimus
  • 14910
  • Стаж: 7 лет 4 месяца
  • Сообщений: 762
  • Репутация:91

    [+] [-]
rezorustavi, друг, батники - цэ некомильфо af
у тебя же есть лаунчер. сделай ини-файл для него.
батник будет один (со входом в него в виде переменной %1 - это как выбор меню в твоих примерах)
пример:
go.bat - это батник
первый пункт меню лаунчера: Not defterini Ac
и выполняемая команда: go.bat 1
выполняемый файл go.bat
и аргумент для этого файла - 1
внутри батника:
set p = %1
в переменной p - наш выбор (1 2 3 ..)
и дальше пляши от значения переменной p

Страница 68 из 89


Показать сообщения:    

Текущее время: 29-Мар 13:14

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы