[Quote]

    cartmenezz
  • 1384
  • Longevity: 6 years 4 months
  • Posts: 455
  • REPUTATION:12

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

[Quote]

    cartmenezz
  • 1384
  • Longevity: 6 years 4 months
  • Posts: 455
  • REPUTATION:12

    [+] [-]
  • Location: Калининград
и снова у меня проблема, сам не могу разобраться 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, но учитывая что я в нём совершенно не шарю, пытаюсь ковыряться в готовых вариантах что нахожу на форумах, пока все не то...

[Quote]

    Ander_73
  • 15549
  • Longevity: 4 years 11 months
  • Posts: 2698
  • REPUTATION:127

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

[Quote]

    xnik
  • 19473
  • Longevity: 3 years 3 months
  • Posts: 264
  • REPUTATION:1

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

[Quote]

    cartmenezz
  • 1384
  • Longevity: 6 years 4 months
  • Posts: 455
  • REPUTATION:12

    [+] [-]
  • Location: Калининград
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, чтобы батник просто пошёл дальше выполнять команды

[Quote]

    Ander_73
  • 15549
  • Longevity: 4 years 11 months
  • Posts: 2698
  • REPUTATION:127

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

[Quote]

    cartmenezz
  • 1384
  • Longevity: 6 years 4 months
  • Posts: 455
  • REPUTATION:12

    [+] [-]
  • Location: Калининград
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(нет)]?")

[Quote]

    AZJIO
  • 17953
  • Longevity: 3 years 11 months
  • Posts: 939
  • REPUTATION:117

    [+] [-]
Хочу добавить такие строки
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". Такой вариант был бы уверенный.

[Quote]

    Ander_73
  • 15549
  • Longevity: 4 years 11 months
  • Posts: 2698
  • REPUTATION:127

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

[Quote]

    loban_ser
  • 17796
  • Longevity: 3 years 11 months
  • Posts: 553
  • REPUTATION:19

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

[Quote]

    cartmenezz
  • 1384
  • Longevity: 6 years 4 months
  • Posts: 455
  • REPUTATION:12

    [+] [-]
  • Location: Калининград
Приветствую.
Стоит задача: найти 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-ки достаточно оставить для работы)

[Quote]

    rezorustavi
  • 2337
  • Longevity: 6 years
  • Posts: 866
  • REPUTATION:33

    [+] [-]
  • Location: Грузия, город Рустави
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

[Quote]

    Ander_73
  • 15549
  • Longevity: 4 years 11 months
  • Posts: 2698
  • REPUTATION: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
)

[Quote]

    rezorustavi
  • 2337
  • Longevity: 6 years
  • Posts: 866
  • REPUTATION:33

    [+] [-]
  • Location: Грузия, город Рустави
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
У себя не запускать, я не тестировал, привел для примера. Мало ли...

[Quote]

    wadimus
  • 14910
  • Longevity: 5 years 2 months
  • Posts: 394
  • REPUTATION:42

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

Page 68 of 69


Display posts:    

Current time is: 27-Jan 12:13

All times are UTC + 3


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum