Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 2

Автор: 01MDM
Дата сообщения: 01.01.2007 11:02
Nagual

Почитай тут http://www.computerra.ru/gid/rtfm/utility/271722/
Автор: Nagual
Дата сообщения: 01.01.2007 11:45
01MDM
почитал внимательно, ты тоже неверно понял, то же самое я могу сделать приведенным выше скриптом размером 52 байта
используя конструкцию:
скрипт запускает сценарий
для кругозора пойдет, конечно, но не выход
Автор: Elesin
Дата сообщения: 01.01.2007 11:51
С праздником всех!
Не нашёл тут решения такой задачи:
1. Делаем dir /B
2. Узнаём имя первого файла в списке и используем его как параметр (переносим в другую папку и скармливаем программе).
Автор: ViSiToR
Дата сообщения: 01.01.2007 17:49
Nagual
Я не уверен что понимаю суть задачи (как и многие другие полагаю) - тебе нужно скрывать сам батник, или определённые процессы которые он выполняет?

Средствами одного лишь батника это не достичь, по любому придётся подключать внешнюю артилерию

А пока, вот, RunBat_1.1.zip

Добавил возможность одновременного запуска до 20-ти батников:

для установки дополнительного запуска, необходимо скопировать две секции и добавить число к имени секции ([General Prefs3] и [CmdLine Params3] и т.д.) - см. пример в самом файле конфигурации.

Каждые такие дополнительные секции, используются для запуска одного батника.
Автор: Elroir
Дата сообщения: 01.01.2007 18:42
Elesin

Код:
@echo off
setlocal
for /f "usebackq tokens=*" %%I in (`"dir /b"`) do (
if not defined fname set fname=%%I
)
copy "%fname%" c:\temp
program.exe %fname%
rem или program.exe "%fname%"
Автор: Nagual
Дата сообщения: 01.01.2007 19:44
ViSiToR
спасибо за труд и за отклик, но повторю проще сделать то же самое скриптом, не имея в руках ничего, кроме какого-нибудь блокнота
в приведенном мной выше скрипте достаточно сменить имя запускаего сценария и пускать сценарий скриптом, чем использовать сторонние утилы
мне нужно не совсем то, что ты понял, не запуск утилитой сценария с параметрами, а запуск самого сценария скрыто, то есть, грубо говоря, клацанием по нему, если так будет угодно, это немного разные вещи, я понимаю, что задача отнюдь не из легких, по-прежнему жду идей и оригинальных решений...
Простейший и наглядный пример работы сценария: написать сценарий и кинуть его в автозагрузку...
Всех с 2k7!
Автор: Elroir
Дата сообщения: 01.01.2007 20:51
Nagual

Цитата:
запуск самого сценария скрыто, то есть, грубо говоря, клацанием по нему

Так можно сделать, но потеребуется утилита или скрипт скрывающая окошко запускаемого батника и принимающая название батника в качестве аргумента.
Приведу пример с утилитой hstart.exe (я ее кинул в Windows фолдер, но можно в любой фолдер в path). Создаем .reg файл со следующим содержанием:

Код:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\cmdfile\shell\open]

[HKEY_CLASSES_ROOT\cmdfile\shell\open\command]
@="hstart.exe /nowindow \"%1\""


[HKEY_CLASSES_ROOT\cmdfile\shell\open with window]
"EditFlags"=hex:00,00,00,00

[HKEY_CLASSES_ROOT\cmdfile\shell\open with window\command]
@="\"%1\" %*"
Автор: Nagual
Дата сообщения: 01.01.2007 21:08
Elroir
Спасибо, об этом решении я тоже думал и в курсе.
У него есть свои недостатки: необходимо использовать реестр и немного геморойно работать с простыми сценариями, не требующими скрытого запуска...
В принципе, как продолжение этой идеи, можно создать отдельный формат файлов, обозвать его как нить поласковее из 3х букв и прописать в системе, тогда все скрытые сценарии просто переименовать в этот формат и пользоваться их простым запуском без какого-либо гемора и не трогая обычные сценарии, но этот финт ("через *опу") опять же, использует реестр, хотя может кому и подойдет
В идеале, сам сценарий написать так, чтобы он запускал себя скрыто, а так же без применения реестра и посторонних утилит, я по-прежнему продолжаю надеяться, что это сделать возможно.
Спасибо за внимание.
Автор: ViSiToR
Дата сообщения: 01.01.2007 22:24
Nagual

Цитата:
я по-прежнему продолжаю надеяться, что это сделать возможно.

Нет, на мой взгляд это сделать невозможно - CMD не был разработан в этих целях, а как раз наоборот, вывести на экран командный процесс. Сам по себе он “не умеет” скрываться, поэтому достичь то что надеешся, одним лишь батником не получится

Можно поинтересоваться, почему нужно именно самим батником скрывать?
Автор: igor_andreev
Дата сообщения: 01.01.2007 22:30
Nagual

Цитата:
В идеале, сам сценарий написать так, чтобы он запускал себя скрыто, а так же без применения реестра и посторонних утилит, я по-прежнему продолжаю надеяться, что это сделать возможно.

У меня в папке C:\WINDOWS\Web\Wallpaper абсолютно без толку лежит файл "Windows XP.jpg". Тоже хочу, чтобы этот jpg проверял мой почтовый ящик и скачивал что-нибудь с ftp. И кофе чтоб варил. Причем скрытно, не показывая никаких окошек. Пока не придумал, как это сделать

А если серьезно, не требуй от батника невозможного. Или учи WSH, на vbscript очень легко писать и никаких окошек скрипты не показывают, если сам не захочешь. Или компилируй батник в экзешник прогами типа ExeScript или Quick Batch File Compiler, они могут делать exe, стартующее в silent mode.

Добавлено:
ViSiToR
упс, теперь я не заметил что уже дали ответ (и тоже довольно похожий)
Автор: Nagual
Дата сообщения: 01.01.2007 22:47
ViSiToR
для автономности
с wsh я знаком, но это отдельная тема, там свего гемора полно, и его синт отнюдь не проще синта обычного сценария, попробуй написать с помощью wsh тот же %programfiles% и ты увидишь, сколько это потребует кода
igor_andreev
Quick Batch File Compiler пробовал, он непомерно раздувает размер конечного файла и к тому же платен, это не выход, хотя идея установки пароля на сценарии радует
но всего этого можно достичь обычным раром
Автор: ViSiToR
Дата сообщения: 02.01.2007 00:14

Цитата:
У меня в папке C:\WINDOWS\Web\Wallpaper абсолютно без толку лежит файл "Windows XP.jpg". Тоже хочу, чтобы этот jpg проверял мой почтовый ящик и скачивал что-нибудь с ftp. И кофе чтоб варил. Причем скрытно, не показывая никаких окошек. Пока не придумал, как это сделать



Спасибо, от души посмеялся ...

Nagual


Цитата:
попробуй написать с помощью wsh тот же %programfiles% и ты увидишь, сколько это потребует кода

Что значит сколько кода, также и пишется, с подобранной подстановкой кавычек:


Код: Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("""%programfiles%\Program\proga.exe""")
Автор: Nagual
Дата сообщения: 03.01.2007 06:23
такая вот задача возникла:

есть некоторый сайт с динамическим IP, необходимо постоянно проверять его доступность, а также проверять наличие соединения с интернетом локальной машины, в случае его отсутствия, ожидать заданное время, а в случае успешного дозвона, продолжать проверять на работоспособность удаленный сайт

привожу тут наброски на общий суд, судить не строго, корябал на скорую руку, прошу поправить, если что не так, в работе с ошибками не силен


Код: @echo off

:: Задание переменной имени сайта
set site=google.com
set checksite=tracert %site%
chcp 1251>nul

:check
title Поиск сайта...
echo.
echo Пауза поиска сайта...
chcp 866>nul
ping -n 3 -w 1000 loopback >nul
echo.
chcp 1251>nul
echo Ищу сайт...
chcp 866>nul
%checksite%
chcp 1251>nul
if %errorlevel% == 1 (goto :_delay) else (goto :_delaycheck)

::Задание общей задержки в 120 с (2 мин)
:_delay
title Общая задержка...
echo.
echo Пауза общей задержки...
ping -n 120 -w 1000 loopback >nul
cls
goto :check

:_delaycheck
title Сайт недоступен...
echo.
echo Пауза недоступного сайта...
ping -n 7 -w 1000 loopback >nul
cls
goto :update

:update
title Обновление IP...
echo.
echo Пауза обновления IP...
ping -n 10 -w 1000 loopback >nul
echo.
echo Обновляется IP...
start /w "Запуск утилиты для обновления IP сайта с необходимыми параметрами"
goto :check
Автор: Maza Faka
Дата сообщения: 03.01.2007 06:42
Как написать батник такого содержания: Пропинговать компьютеры в локальной сети, если например комп 1 пингуется, то в ini файл, после определённого тэга вписывается строка с указанием ip адреса компа 1, если комп 2 не пингуется, то имеющаяся в ini файле строка с соответствующим ip адресом удаляется и происходит переход к пингу 3-го компа и т.д.
Автор: Wise_Kaa
Дата сообщения: 03.01.2007 10:45
Доброго времени суток.
Как можно с помощью батника посчитать кол-во символов в текстовом файле?
И еще вопросик, модно ли перенаправлять сообщения команды route в файл?
route >file.txt работает
route print >file.txt работает
а вот route add 192.168.24.1 255.255.255.255 >file.txt
не отрабатывает, создается пустой файлик, а сама ошибка о том, что неверный шлюз выводится на экран
Автор: Smitis
Дата сообщения: 03.01.2007 12:14
Wise_Kaa

Цитата:
а вот route add 192.168.24.1 255.255.255.255 >file.txt
не отрабатывает, создается пустой файлик, а сама ошибка о том, что неверный шлюз выводится на экран

route add 192.168.24.1 255.255.255.255 >file.txt 2>&1

Добавлено:

Цитата:
Как можно с помощью батника посчитать кол-во символов в текстовом файле?

Взять размер файла
set l=%~z1
Автор: Desenix
Дата сообщения: 03.01.2007 12:57
route add 192.168.24.1 MASK 255.255.255.255
Автор: Sceval
Дата сообщения: 03.01.2007 17:38
Вот есть батник, подскажите как сделать

net use T: /delete

вот тут спрашивает y/n как автоматически отвечать y
Автор: Smitis
Дата сообщения: 03.01.2007 19:23
Sceval
Вообще-то, не должен спрашивать
Но в принципе, echo y| net use t: /delete
Автор: Wise_Kaa
Дата сообщения: 03.01.2007 23:55
Sceval

Цитата:
Вот есть батник, подскажите как сделать
net use T: /delete
вот тут спрашивает y/n как автоматически отвечать y

можно и так: net use T: /delete /y

Smitis спасибо
"route add 192.168.24.1 255.255.255.255 >file.txt 2>&1"
Скажи, а что значат 2>&1? это ведь какие-то условия?

"set l=%~z1" но ведь размер файла не есть кол-во символов. По два байта отводится на переход на новую строку. Кстати, команда почему-то не работае . z1 - это что? и для чего тильда?
Спасибо.
Автор: Elroir
Дата сообщения: 04.01.2007 00:03
Wise_Kaa

Цитата:
Скажи, а что значат 2>&1? это ведь какие-то условия?

Это не условие. Это перенаправление стандартного потока ошибок (stderr=2) в стандартный выход (stdout=1).

Добавлено:
Nagual

Цитата:
есть некоторый сайт с динамическим IP, необходимо постоянно проверять его доступность, а также проверять наличие соединения с интернетом локальной машины,

Э... чего-то я не понимаю. Где здесь проверка на доступность? И где проверка соединения с интернетом локальной машины?
Автор: Nagual
Дата сообщения: 04.01.2007 02:56
Elroir

Цитата:
Э... чего-то я не понимаю. Где здесь проверка на доступность? И где проверка соединения с интернетом локальной машины?

Ну проверка сайта делается трассировкой, может есть и другие варианты, жду предложений
а проверка соединения с инетом локальной машины неплохо бы прикрутить (не нашел пока как)
и, если не сложно, проверь, что там с проверками команд на ошибки, я в этом еще не шибко силен, а то работает, но не совсем так, как задумано…
спасибо
Автор: Elroir
Дата сообщения: 04.01.2007 03:28
Nagual
1. Errorlevel относится к последней запущенной команде - в приведенном тобой коде, это будет результат выполнения команды "chcp 1251".
2. Зачем переключаться туда-сюда с кодировками? Ставишь в начало батника chcp 1251 и (если надо) в конце chcp 866.
3. Проверка на доступность сайта:

Код:
:check
..
tracert www.site.com
if not %errorlevel%==0 goto _delaycheck
:_delay
..
goto check
:_delaycheck
..
:update
..
goto check
Автор: Nagual
Дата сообщения: 04.01.2007 03:51
Elroir
Спасибо за отклик
1. так и подумал, будем знать
2. кодировками и паузами пытался достичь наглядности работы кода для отладки
3. спс, тестирую
Цитата:
Я специально пропустил goto _delay и goto update - они не нужны.
торопился, да можно и без них
Цитата:
Вопрос - зачем ты делаешь "Пауза поиска сайта... " и "Пауза обновления IP... " ?
чтобы успеть увидеть, что эти команды выполняются
4. прямое vpn
ipconfig при вкл соед:
Код: [Имя адаптера] - PPP адаптер:

DNS-суффикс этого подключения . . :
IP-адрес . . . . . . . . . . . . . . : ххх.ххх.ххх.ххх
Маска подсети . . . . . . . . . . : 255.255.255.255
Основной шлюз . . . . . . . . . : ххх.ххх.ххх.ххх
Автор: Elroir
Дата сообщения: 04.01.2007 03:57
Nagual

Цитата:
ipconfig при выкл соед:
пустота

Ну тогда проверка будет примерно такой:

Код:
ipconfig | find "IP">nul
if not %errorlevel%==0 (echo Not connected) else (echo Connected)
Автор: Nagual
Дата сообщения: 04.01.2007 04:44
Elroir
огромный спс
Автор: Wise_Kaa
Дата сообщения: 04.01.2007 09:54
Elroir Спасибо за предыдущее пояснение. Не объяснишь еще почему не отрабоатывает: Переменной l ничего не присваивается.

Цитата:
set l=%~z1

Автор: KapralBel
Дата сообщения: 04.01.2007 10:30
Wise_Kaa


Цитата:
Не объяснишь еще почему не отрабоатывает: Переменной l ничего не присваивается.


Цитата:
"set l=%~z1" но ведь размер файла не есть кол-во символов. По два байта отводится на переход на новую строку. Кстати, команда почему-то не работае . z1 - это что? и для чего тильда?

1. См For /?
2.
Код: for %a in (*.jpg) Do Echo %a %~za
Автор: Elroir
Дата сообщения: 04.01.2007 14:09
Wise_Kaa

Цитата:
Переменной l ничего не присваивается

Имелось в виду, что название файла передается батнику как аргумент командной строки. Тогда это название записывается в переменную %1. Ты, видимо запускал батник без аргумента , поэтому в %1 ничего не подставлялось. "Тильда что-то" (~n,~x,~z,..) - это модификатор, который добавляется к переменным типа %а или %%а. Список модификаторов можно получить запустив For /? (как написал KapralBel).
Автор: Smitis
Дата сообщения: 04.01.2007 15:35
Wise_Kaa
Открой справку - файл ntcmds.chm в папке windows\help
Раздел: Справочник по параметрам командной строки\ Основные понятия \Использование пакетных файлов - там три подраздела как раз об использовании параметров, фильтров и перенаправлении потоков ввода/вывода.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Сбой активации XP sp2


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.