» Задачи на bat-файлах 2
01MDM
почитал внимательно, ты тоже неверно понял, то же самое я могу сделать приведенным выше скриптом размером 52 байта
используя конструкцию:
скрипт запускает сценарий
для кругозора пойдет, конечно, но не выход
почитал внимательно, ты тоже неверно понял, то же самое я могу сделать приведенным выше скриптом размером 52 байта
используя конструкцию:
скрипт запускает сценарий
для кругозора пойдет, конечно, но не выход
С праздником всех!
Не нашёл тут решения такой задачи:
1. Делаем dir /B
2. Узнаём имя первого файла в списке и используем его как параметр (переносим в другую папку и скармливаем программе).
Не нашёл тут решения такой задачи:
1. Делаем dir /B
2. Узнаём имя первого файла в списке и используем его как параметр (переносим в другую папку и скармливаем программе).
Nagual
Я не уверен что понимаю суть задачи (как и многие другие полагаю) - тебе нужно скрывать сам батник, или определённые процессы которые он выполняет?
Средствами одного лишь батника это не достичь, по любому придётся подключать внешнюю артилерию
А пока, вот, RunBat_1.1.zip
Добавил возможность одновременного запуска до 20-ти батников:
для установки дополнительного запуска, необходимо скопировать две секции и добавить число к имени секции ([General Prefs3] и [CmdLine Params3] и т.д.) - см. пример в самом файле конфигурации.
Каждые такие дополнительные секции, используются для запуска одного батника.
Я не уверен что понимаю суть задачи (как и многие другие полагаю) - тебе нужно скрывать сам батник, или определённые процессы которые он выполняет?
Средствами одного лишь батника это не достичь, по любому придётся подключать внешнюю артилерию
А пока, вот, RunBat_1.1.zip
Добавил возможность одновременного запуска до 20-ти батников:
для установки дополнительного запуска, необходимо скопировать две секции и добавить число к имени секции ([General Prefs3] и [CmdLine Params3] и т.д.) - см. пример в самом файле конфигурации.
Каждые такие дополнительные секции, используются для запуска одного батника.
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%"
Код:
@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%"
ViSiToR
спасибо за труд и за отклик, но повторю проще сделать то же самое скриптом, не имея в руках ничего, кроме какого-нибудь блокнота
в приведенном мной выше скрипте достаточно сменить имя запускаего сценария и пускать сценарий скриптом, чем использовать сторонние утилы
мне нужно не совсем то, что ты понял, не запуск утилитой сценария с параметрами, а запуск самого сценария скрыто, то есть, грубо говоря, клацанием по нему, если так будет угодно, это немного разные вещи, я понимаю, что задача отнюдь не из легких, по-прежнему жду идей и оригинальных решений...
Простейший и наглядный пример работы сценария: написать сценарий и кинуть его в автозагрузку...
Всех с 2k7!
спасибо за труд и за отклик, но повторю проще сделать то же самое скриптом, не имея в руках ничего, кроме какого-нибудь блокнота
в приведенном мной выше скрипте достаточно сменить имя запускаего сценария и пускать сценарий скриптом, чем использовать сторонние утилы
мне нужно не совсем то, что ты понял, не запуск утилитой сценария с параметрами, а запуск самого сценария скрыто, то есть, грубо говоря, клацанием по нему, если так будет угодно, это немного разные вещи, я понимаю, что задача отнюдь не из легких, по-прежнему жду идей и оригинальных решений...
Простейший и наглядный пример работы сценария: написать сценарий и кинуть его в автозагрузку...
Всех с 2k7!
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\" %*"
Цитата:
запуск самого сценария скрыто, то есть, грубо говоря, клацанием по нему
Так можно сделать, но потеребуется утилита или скрипт скрывающая окошко запускаемого батника и принимающая название батника в качестве аргумента.
Приведу пример с утилитой 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\" %*"
Elroir
Спасибо, об этом решении я тоже думал и в курсе.
У него есть свои недостатки: необходимо использовать реестр и немного геморойно работать с простыми сценариями, не требующими скрытого запуска...
В принципе, как продолжение этой идеи, можно создать отдельный формат файлов, обозвать его как нить поласковее из 3х букв и прописать в системе, тогда все скрытые сценарии просто переименовать в этот формат и пользоваться их простым запуском без какого-либо гемора и не трогая обычные сценарии, но этот финт ("через *опу") опять же, использует реестр, хотя может кому и подойдет
В идеале, сам сценарий написать так, чтобы он запускал себя скрыто, а так же без применения реестра и посторонних утилит, я по-прежнему продолжаю надеяться, что это сделать возможно.
Спасибо за внимание.
Спасибо, об этом решении я тоже думал и в курсе.
У него есть свои недостатки: необходимо использовать реестр и немного геморойно работать с простыми сценариями, не требующими скрытого запуска...
В принципе, как продолжение этой идеи, можно создать отдельный формат файлов, обозвать его как нить поласковее из 3х букв и прописать в системе, тогда все скрытые сценарии просто переименовать в этот формат и пользоваться их простым запуском без какого-либо гемора и не трогая обычные сценарии, но этот финт ("через *опу") опять же, использует реестр, хотя может кому и подойдет
В идеале, сам сценарий написать так, чтобы он запускал себя скрыто, а так же без применения реестра и посторонних утилит, я по-прежнему продолжаю надеяться, что это сделать возможно.
Спасибо за внимание.
Nagual
Цитата:
Нет, на мой взгляд это сделать невозможно - CMD не был разработан в этих целях, а как раз наоборот, вывести на экран командный процесс. Сам по себе он “не умеет” скрываться, поэтому достичь то что надеешся, одним лишь батником не получится
Можно поинтересоваться, почему нужно именно самим батником скрывать?
Цитата:
я по-прежнему продолжаю надеяться, что это сделать возможно.
Нет, на мой взгляд это сделать невозможно - CMD не был разработан в этих целях, а как раз наоборот, вывести на экран командный процесс. Сам по себе он “не умеет” скрываться, поэтому достичь то что надеешся, одним лишь батником не получится
Можно поинтересоваться, почему нужно именно самим батником скрывать?
Nagual
Цитата:
У меня в папке C:\WINDOWS\Web\Wallpaper абсолютно без толку лежит файл "Windows XP.jpg". Тоже хочу, чтобы этот jpg проверял мой почтовый ящик и скачивал что-нибудь с ftp. И кофе чтоб варил. Причем скрытно, не показывая никаких окошек. Пока не придумал, как это сделать
А если серьезно, не требуй от батника невозможного. Или учи WSH, на vbscript очень легко писать и никаких окошек скрипты не показывают, если сам не захочешь. Или компилируй батник в экзешник прогами типа ExeScript или Quick Batch File Compiler, они могут делать exe, стартующее в silent mode.
Добавлено:
ViSiToR
упс, теперь я не заметил что уже дали ответ (и тоже довольно похожий)
Цитата:
В идеале, сам сценарий написать так, чтобы он запускал себя скрыто, а так же без применения реестра и посторонних утилит, я по-прежнему продолжаю надеяться, что это сделать возможно.
У меня в папке C:\WINDOWS\Web\Wallpaper абсолютно без толку лежит файл "Windows XP.jpg". Тоже хочу, чтобы этот jpg проверял мой почтовый ящик и скачивал что-нибудь с ftp. И кофе чтоб варил. Причем скрытно, не показывая никаких окошек. Пока не придумал, как это сделать
А если серьезно, не требуй от батника невозможного. Или учи WSH, на vbscript очень легко писать и никаких окошек скрипты не показывают, если сам не захочешь. Или компилируй батник в экзешник прогами типа ExeScript или Quick Batch File Compiler, они могут делать exe, стартующее в silent mode.
Добавлено:
ViSiToR
упс, теперь я не заметил что уже дали ответ (и тоже довольно похожий)
ViSiToR
для автономности
с wsh я знаком, но это отдельная тема, там свего гемора полно, и его синт отнюдь не проще синта обычного сценария, попробуй написать с помощью wsh тот же %programfiles% и ты увидишь, сколько это потребует кода
igor_andreev
Quick Batch File Compiler пробовал, он непомерно раздувает размер конечного файла и к тому же платен, это не выход, хотя идея установки пароля на сценарии радует
но всего этого можно достичь обычным раром
для автономности
с wsh я знаком, но это отдельная тема, там свего гемора полно, и его синт отнюдь не проще синта обычного сценария, попробуй написать с помощью wsh тот же %programfiles% и ты увидишь, сколько это потребует кода
igor_andreev
Quick Batch File Compiler пробовал, он непомерно раздувает размер конечного файла и к тому же платен, это не выход, хотя идея установки пароля на сценарии радует
но всего этого можно достичь обычным раром
Цитата:
У меня в папке C:\WINDOWS\Web\Wallpaper абсолютно без толку лежит файл "Windows XP.jpg". Тоже хочу, чтобы этот jpg проверял мой почтовый ящик и скачивал что-нибудь с ftp. И кофе чтоб варил. Причем скрытно, не показывая никаких окошек. Пока не придумал, как это сделать
Спасибо, от души посмеялся ...
Nagual
Цитата:
попробуй написать с помощью wsh тот же %programfiles% и ты увидишь, сколько это потребует кода
Что значит сколько кода, также и пишется, с подобранной подстановкой кавычек:
Код: Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("""%programfiles%\Program\proga.exe""")
такая вот задача возникла:
есть некоторый сайт с динамическим 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
есть некоторый сайт с динамическим 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
Как написать батник такого содержания: Пропинговать компьютеры в локальной сети, если например комп 1 пингуется, то в ini файл, после определённого тэга вписывается строка с указанием ip адреса компа 1, если комп 2 не пингуется, то имеющаяся в ini файле строка с соответствующим ip адресом удаляется и происходит переход к пингу 3-го компа и т.д.
Доброго времени суток.
Как можно с помощью батника посчитать кол-во символов в текстовом файле?
И еще вопросик, модно ли перенаправлять сообщения команды route в файл?
route >file.txt работает
route print >file.txt работает
а вот route add 192.168.24.1 255.255.255.255 >file.txt
не отрабатывает, создается пустой файлик, а сама ошибка о том, что неверный шлюз выводится на экран
Как можно с помощью батника посчитать кол-во символов в текстовом файле?
И еще вопросик, модно ли перенаправлять сообщения команды route в файл?
route >file.txt работает
route print >file.txt работает
а вот route add 192.168.24.1 255.255.255.255 >file.txt
не отрабатывает, создается пустой файлик, а сама ошибка о том, что неверный шлюз выводится на экран
Wise_Kaa
Цитата:
route add 192.168.24.1 255.255.255.255 >file.txt 2>&1
Добавлено:
Цитата:
Взять размер файла
set l=%~z1
Цитата:
а вот 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
route add 192.168.24.1 MASK 255.255.255.255
Вот есть батник, подскажите как сделать
net use T: /delete
вот тут спрашивает y/n как автоматически отвечать y
net use T: /delete
вот тут спрашивает y/n как автоматически отвечать y
Sceval
Вообще-то, не должен спрашивать
Но в принципе, echo y| net use t: /delete
Вообще-то, не должен спрашивать
Но в принципе, echo y| net use t: /delete
Sceval
Цитата:
можно и так: 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 - это что? и для чего тильда?
Спасибо.
Цитата:
Вот есть батник, подскажите как сделать
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 - это что? и для чего тильда?
Спасибо.
Wise_Kaa
Цитата:
Это не условие. Это перенаправление стандартного потока ошибок (stderr=2) в стандартный выход (stdout=1).
Добавлено:
Nagual
Цитата:
Э... чего-то я не понимаю. Где здесь проверка на доступность? И где проверка соединения с интернетом локальной машины?
Цитата:
Скажи, а что значат 2>&1? это ведь какие-то условия?
Это не условие. Это перенаправление стандартного потока ошибок (stderr=2) в стандартный выход (stdout=1).
Добавлено:
Nagual
Цитата:
есть некоторый сайт с динамическим IP, необходимо постоянно проверять его доступность, а также проверять наличие соединения с интернетом локальной машины,
Э... чего-то я не понимаю. Где здесь проверка на доступность? И где проверка соединения с интернетом локальной машины?
Elroir
Цитата:
Ну проверка сайта делается трассировкой, может есть и другие варианты, жду предложений
а проверка соединения с инетом локальной машины неплохо бы прикрутить (не нашел пока как)
и, если не сложно, проверь, что там с проверками команд на ошибки, я в этом еще не шибко силен, а то работает, но не совсем так, как задумано…
спасибо
Цитата:
Э... чего-то я не понимаю. Где здесь проверка на доступность? И где проверка соединения с интернетом локальной машины?
Ну проверка сайта делается трассировкой, может есть и другие варианты, жду предложений
а проверка соединения с инетом локальной машины неплохо бы прикрутить (не нашел пока как)
и, если не сложно, проверь, что там с проверками команд на ошибки, я в этом еще не шибко силен, а то работает, но не совсем так, как задумано…
спасибо
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
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
Elroir
Спасибо за отклик
1. так и подумал, будем знать
2. кодировками и паузами пытался достичь наглядности работы кода для отладки
3. спс, тестирую
Цитата:
Цитата:
4. прямое vpn
ipconfig при вкл соед:
Код: [Имя адаптера] - PPP адаптер:
DNS-суффикс этого подключения . . :
IP-адрес . . . . . . . . . . . . . . : ххх.ххх.ххх.ххх
Маска подсети . . . . . . . . . . : 255.255.255.255
Основной шлюз . . . . . . . . . : ххх.ххх.ххх.ххх
Спасибо за отклик
1. так и подумал, будем знать
2. кодировками и паузами пытался достичь наглядности работы кода для отладки
3. спс, тестирую
Цитата:
Я специально пропустил goto _delay и goto update - они не нужны.торопился, да можно и без них
Цитата:
Вопрос - зачем ты делаешь "Пауза поиска сайта... " и "Пауза обновления IP... " ?чтобы успеть увидеть, что эти команды выполняются
4. прямое vpn
ipconfig при вкл соед:
Код: [Имя адаптера] - PPP адаптер:
DNS-суффикс этого подключения . . :
IP-адрес . . . . . . . . . . . . . . : ххх.ххх.ххх.ххх
Маска подсети . . . . . . . . . . : 255.255.255.255
Основной шлюз . . . . . . . . . : ххх.ххх.ххх.ххх
Nagual
Цитата:
Ну тогда проверка будет примерно такой:
Код:
ipconfig | find "IP">nul
if not %errorlevel%==0 (echo Not connected) else (echo Connected)
Цитата:
ipconfig при выкл соед:
пустота
Ну тогда проверка будет примерно такой:
Код:
ipconfig | find "IP">nul
if not %errorlevel%==0 (echo Not connected) else (echo Connected)
Elroir
огромный спс
огромный спс
Elroir Спасибо за предыдущее пояснение. Не объяснишь еще почему не отрабоатывает: Переменной l ничего не присваивается.
Цитата:
Цитата:
set l=%~z1
Wise_Kaa
Цитата:
Цитата:
1. См For /?
2.
Код: for %a in (*.jpg) Do Echo %a %~za
Цитата:
Не объяснишь еще почему не отрабоатывает: Переменной l ничего не присваивается.
Цитата:
"set l=%~z1" но ведь размер файла не есть кол-во символов. По два байта отводится на переход на новую строку. Кстати, команда почему-то не работае . z1 - это что? и для чего тильда?
1. См For /?
2.
Код: for %a in (*.jpg) Do Echo %a %~za
Wise_Kaa
Цитата:
Имелось в виду, что название файла передается батнику как аргумент командной строки. Тогда это название записывается в переменную %1. Ты, видимо запускал батник без аргумента , поэтому в %1 ничего не подставлялось. "Тильда что-то" (~n,~x,~z,..) - это модификатор, который добавляется к переменным типа %а или %%а. Список модификаторов можно получить запустив For /? (как написал KapralBel).
Цитата:
Переменной l ничего не присваивается
Имелось в виду, что название файла передается батнику как аргумент командной строки. Тогда это название записывается в переменную %1. Ты, видимо запускал батник без аргумента , поэтому в %1 ничего не подставлялось. "Тильда что-то" (~n,~x,~z,..) - это модификатор, который добавляется к переменным типа %а или %%а. Список модификаторов можно получить запустив For /? (как написал KapralBel).
Wise_Kaa
Открой справку - файл ntcmds.chm в папке windows\help
Раздел: Справочник по параметрам командной строки\ Основные понятия \Использование пакетных файлов - там три подраздела как раз об использовании параметров, фильтров и перенаправлении потоков ввода/вывода.
Открой справку - файл ntcmds.chm в папке windows\help
Раздел: Справочник по параметрам командной строки\ Основные понятия \Использование пакетных файлов - там три подраздела как раз об использовании параметров, фильтров и перенаправлении потоков ввода/вывода.
Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
Предыдущая тема: Сбой активации XP sp2
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.