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

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

Автор: InSe0F
Дата сообщения: 15.04.2007 17:28
ой, тут столкнулся с такой проблемкой
в общем серву( ну тот что я запускал в скрипте) иногда посылают через инет запрос выключения, ну он конечно же выключатся, но вот через некоторое время включается снова
думали 2 варианта решения этой проблемы:
1) запуск через удалёнку и там же его даун, но в система не очень корректно работает в этом случае, бывает глючит в общем
2) есть напрямую доступ с фтп именно к папке с сервом, с полным доступом, но программы и батники если и запускаются то работают некорректно
может можно как нить скопировать в папку со скриптом текстовой файл с определённой переменной или какой нить меткой чтобы бат её прочитал и задаунил серв в случае если это надо сделать или запустил серв если он не запущен и оперделённая метка есть
Автор: igor_andreev
Дата сообщения: 15.04.2007 19:05

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

Цитата:
может можно как нить скопировать в папку со скриптом текстовой файл с определённой переменной или какой нить меткой чтобы бат её прочитал и задаунил серв в случае если это надо сделать или запустил серв если он не запущен и оперделённая метка есть

Это флаг-файл называется, их и читать не надо, обычный пустой текстовой файл с любым именем-расширением.
"Изготавливается" типа echo.>start.flg или echo.>down.flg и закидывается на ftp.
И в батнике if exist start.flg делаешь что надо, флаг-файл удаляешь.
Автор: Smitis
Дата сообщения: 15.04.2007 22:52
NIKZZZZ

Цитата:
Тогда маленький вопросик, как правильно и красиво передать передать VBS скрипту значение значение переменной, содержащей "плохие" символы - ."<> b и т.д. не использую временный файл?

Так прямо в vbs и используй эту переменную

Код:
Dim WshShell, WshEnv
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment("PROCESS")
WScript.Echo WshEnv("TestVar")
Автор: InSe0F
Дата сообщения: 16.04.2007 00:37
1)в общем не могу разобраться чтот, где-то ошибка не могу найти.
не работает последнее условие, if exist ON.st ( ... ), т.е. я вижу что это файл существует и процесс убит, но заного не запускается , фиг знает чо за дело.
если убираешь первое условие всё нормально срабатывает, но тогдаже и срабатывает если сервер остановлен.
нашёл пока выход тем что заменил первый ИФ на такой if exist OFF.st (goto _1) т.е. флаг ОФФ у меня когда серв точно должен быть в дауне и не подниматься. но всёже хочеться понять в чём здесь глюк.

2)а и ещё вопрос как коменты писать? а то rem отображает их, а мне они в логе нафиг не нужны...

[more]rem ----------------------
rem --- скрипт ---
rem ----------------------

rem Создаём vb скрипт
echo wscript.sleep wscript.arguments(0)>%Temp%\sleep.vbs

rem переменные на пути к рабочей папке(папка где находятся флаги) и серву
Set work_path=C:\games\cs_server\#script_start
Set cs_path=C:\games\cs_server\cs

rem Далее мы указываем директорию с сервом/программой
rem cd /d "C:\games\cs_server\cs"
cd /d %cs_path%

rem И создаём переменную на запуск сервера/программы
Set CS_START=start /HIGH "" "hlds.exe" -nomaster -game cstrike -insecure -console +maxplayers 24 +sv_lan 1 +map cs_mansion

rem запускаем серв
%CS_START%

rem создаём флаг, что серв запущен
cd /d %work_path%
echo.>ON.st


rem Далее идёт "псевдо" цикл (т.к. делаем его через goto)
rem -----------ОСНОВНОЙ ЦИКЛ-----------начало-----------

:_1

rem делаем паузу (600000 ~ 10минут - время паузы в милисекундах)
cscript "%Temp%\sleep.vbs" 6000 > nul

rem если флаг существует запускаем сервер и удаляем флаг
if exist start.flg (
cd /d %cs_path%
%CS_START%
cd /d %work_path%
echo.>ON.st
del /f /q OFF.st
del /f /q start.flg
)

rem если флаг существует дауним сервер и удаляем флаг
if exist stop.flg (
taskkill /f /im hlds.exe
cd /d %work_path%
echo.>OFF.st
del /f /q ON.st
del /f /q stop.flg
)

rem проверяем должен ли сервер быть запущен?
cd /d %work_path%
if exist ON.st (

rem Ищем процесс hlds.exe
tasklist | find /i "hlds.exe">nul

rem если процесс не запущен то запускаем его
if not %errorlevel%==0 (
cd /d %cs_path%
%CS_START%
)
)

goto _1

rem -----------ОСНОВНОЙ ЦИКЛ-----------конец-----------
[/more]

Добавлено:

Цитата:

Может в настройках проги стоит для начала поковыряться-разобраться, с чего он сам включается то? В теме про Serv-U спросить, может там знают...

нее ты немного не понял, не ФТП поднимается а Сервак кс, в общем погляди скрипт.
Автор: Tipulatoid
Дата сообщения: 16.04.2007 02:14
InSe0F

Цитата:
2)а и ещё вопрос как коменты писать? а то rem отображает их, а мне они в логе нафиг не нужны...

Поставь

Код: @echo off
Автор: Maza Faka
Дата сообщения: 16.04.2007 08:57
InSe0F
Вот написал, как понял:

Код:
@Echo off
rem Start /HIGH C:\games\cs_server\cs\spider.exe Для чего нужны эти строки не понял поэтому закоментил
rem echo.> C:\games\cs_server\#script_start\ON.st

:_1
sleep 600
if exist start.flg (
Start /HIGH C:\games\cs_server\cs\spider.exe
echo.> C:\games\cs_server\#script_start\ON.st
del /f /q C:\games\cs_server\#script_start\OFF.st
del /f /q start.flg)

if exist stop.flg (
taskkill /f /im spider.exe
echo.> C:\games\cs_server\#script_start\OFF.st
del /f /q C:\games\cs_server\#script_start\ON.st
del /f /q stop.flg)

if exist C:\games\cs_server\#script_start\ON.st (
tasklist | find /i "spider.exe" || Start /HIGH C:\games\cs_server\cs\spider.exe)
goto _1
Автор: igor_andreev
Дата сообщения: 16.04.2007 12:20
InSe0F

Цитата:
нее ты немного не понял, не ФТП поднимается а Сервак кс

Ну да недопонял, тыж написал
Цитата:
в общем серву( ну тот что я запускал в скрипте)
я и подумал на Serv-U. Сервак кс - мне кстати тоже ни о чем не сказало, не всеж в Counter Strike играют
По сабжу - зачем тебе такое неимоверное количество флаг-файлов? Я кстати неправильно подсказал, в плане "флаг-файл удаляешь", в смысл батника не сразу вьехал, извиняюсь. Из батника в твоем случае его удалять не надо. У тебя нормальная задача в батнике проверять процесс и если не запущен - запускать? Вот и пусть этим занимается по умолчанию. А тебе, когда надо остановить процесс - закидываешь stop.flg и все. Когда понадобиться запустить - просто удаляешь сам этот stop.flg. Будет приблизительно так:

Код:
:_1
sleep 3
if exist stop.flg (
tasklist | find /i "notepad.exe" && taskkill /f /im notepad.exe
) else (
tasklist | find /i "notepad.exe" || start notepad
)
goto _1
Автор: InSe0F
Дата сообщения: 16.04.2007 17:49
Maza Faka
спасиб за последний ИФ, хотя твой скрипт не удобен тем что в нём надо будет менять очень много путей, если надо будет поменять папки, лучше юзать переменные

igor_andreev
да сделал со слипом.
хотя в мой вариантик был наверно нагляднее, чел залезает в папку и видет 2 флага, включен серв или выключен, надо ему включить копирует туда старт, иначе стоп и всё.
хотя большой разницы я не вижу, разве только у тебя короче получилось, по скорости обработки скорее всего одинаково, хотя ИФ довольно "много" жрёт, так что хз.

в общем всем пасиба) всё вроде доделал

Добавлено:
ан нет, есть ещё вопрос, вообщем можно ли как нить определить сколько процентов процесс?
просто у меня иногда как то странно q3 серв подвисает, не могу пока понять причину, может из-за КС сервака... мож ещё из-за чего...
так вот когда он виснет он не умирает, но начинает жрать жутко проц, ну гдето процентов на 20-30, если я рядом то сразу вижу по мониторингу и перезапускаю, но иногда я редко за ней бываю, в общем тут уже всё понятно только как определить что она столько жрёт фиг знает, в этом собственно и вопрос.
Автор: Maza Faka
Дата сообщения: 16.04.2007 18:57
InSe0F
Не нашёл, где в тасклисте посмотреть сколько ресурсов проца жрёт процесс, но можно убивать зависшие приложения по статусу "Не отвечает"
Примерно так:

Код:
@Echo off
For /F "Tokens=1-8" %%a in ('Tasklist /v ^| Find /i "cs.exe"') do (
If /i "%%g"=="Работает" (Goto End) Else (Taskkil /f /im cs.exe)
)
:End
Автор: AZJIO
Дата сообщения: 17.04.2007 03:43
Elroir
Спасибо... Остаётся только улыбаться...
Автор: Maza Faka
Дата сообщения: 17.04.2007 07:02
InSe0F

Цитата:
так вот когда он виснет он не умирает, но начинает жрать жутко проц, ну гдето процентов на 20-30, если я рядом то сразу вижу по мониторингу и перезапускаю, но иногда я редко за ней бываю, в общем тут уже всё понятно только как определить что она столько жрёт фиг знает, в этом собственно и вопрос.


Выше я выкладывал батник, но этот получше будет! убивает зависший процесс "cs.exe"

Код:
@Echo off
Chcp 1251
For /F "Tokens=1*" %%a in ('Tasklist /v ^| Find /i "cs.exe" ^| Find /i "Работает"') do If %errorlevel%==0 (Goto :EOF) Else (Taskkil /f /im cs.exe)
Автор: Gabzya
Дата сообщения: 17.04.2007 11:16
неподскажите как заменить укр буквы в именах файлов\папок "ї" и "і" на др символы, или вовсе их удалить?
есть много папок с файлами, кот нужно заархивировать зипом, он их не понимает
заранее спс
Автор: Tipulatoid
Дата сообщения: 17.04.2007 11:37
Gabzya
Задача интересная. Подскажи, буквы "ї" и "і" по звучанию на какие русские буквы больше всего похожи?
И неплохо бы привести пример полных названий папок и файлов, кот. нужно изменить.
Автор: vu1tur
Дата сообщения: 17.04.2007 11:53
Gabzya
Если это нужно сделать один раз, то проще сделать замену с помощью того же Total Commandera (Ctrl+M).

Maza Faka
Берётся факториал, значения от 1 до %1 хранятся в локальных переменных (параметрах процедуры Factorial).
Автор: Gabzya
Дата сообщения: 17.04.2007 12:32
Tipulatoid
і-и
ї-йы
vu1tur
например название папки- "Діловодство україни за 2005 рік"
файла - "Договір з фізиками.doc"
как при помощи ТС ???
Автор: Tipulatoid
Дата сообщения: 17.04.2007 13:45
Gabzya
Этот батник меняет буквы "ї" и "і" в именах всех файлов в текущей папке на "и" и "йы". Как менять названия папок, я чего-то не дошел. Внимание! Т.к. на моей раскладке нет украинской буквы "i", то в код я забил аналог из латинского алфавита. В коде это выделено жирным. Вам нужно будет данный символ исправить именно на украинский самостоятельно.

Код: @echo off
setlocal enabledelayedexpansion

for /f "tokens=*" %%a in ('dir /b /a:-d') do (
set name=%%a
set name=!name:i=и!
set name=!name:ї=йы!
ren "%%a" "!name!"
)
Автор: Elroir
Дата сообщения: 17.04.2007 13:49
Maza Faka

Цитата:
Кто нибудь может разжевать, что именно происходит, когда я запускаю этот батник с аргументом "5", то в ввывод записывается число "120", почему?

Если разжевывать сильнее, чем это сделал vu1tur ():
Чему у нас равен факториал 5-и? - 1*2*3*4*5=120. Передаем батнику число 5, он запускает процедуру :Factorial с аргументом 4, соответственно, то же самое происходит с числами 3 и 2. А вот когда мы дошли до числа 1 - батник не будет вызывать :Factorial, а сразу вернет ответ - 1. То есть после выхода из последнего вызова, переменная Result=1 и мы, наконец, добрались в первый раз до строчки Set /a Result=%1 * %Result%. %1=2, Result=1, значит новое значение Result=2*1=2. Возвращаемся к предыдущему вызову процедуры - %1=3, Result у нас теперь равен 2, значит Result=3*2=6. Таким образом мы доберемся до самого первого запуска процедуры :Factorial, когда %1=5, а Result уже равен 24 (4*6). 5*24=120, все процедуры :Factorial завершились - получаем результат 120. Обычная рекурсия.


Добавлено:
Tipulatoid

Цитата:
Как менять названия папок, я чего-то не дошел

Для переименовывания папок, используется команда move:
move old_name new_name
Автор: slayer120
Дата сообщения: 17.04.2007 14:17
Уважаемый All хочу решить такую задачу с использованием bat /cmd:
Заполнение табеля - в виде текстового файла -
число - время включения компа - время выключения компа.
Я так понял надо анализировать журнал System (не знаю, можно ли в cmd)
на предмет появления 1 го события с код 6005 - "Запущена служба журнала
событий" и последнего события с кодом 6006 "Служба журнала событий
остановлена" (первого и последнего - потому что могут быть перезагрузки).
В идеале хотелось бы это сделать по сетке с несколькими юзерами.
Возможно такое (Для xp)?
Автор: Gabzya
Дата сообщения: 17.04.2007 14:34
Tipulatoid
спс большое, а можно для особых,
Цитата:

for /f "tokens=*" %%a in ('dir /b /a:-d') do (
set name=%%a

это означает: на диске /f вo всех папках ?
Автор: igor_andreev
Дата сообщения: 17.04.2007 14:44
slayer120

Цитата:
Возможно такое (Для xp)?

В XP в system32 есть eventquery.vbs. Выдергивай из него, что надо. Типа:
cscript %systemroot%\system32\eventquery.vbs | find "date" | find "6005"

А параметров комстроки у него много, можно и без find обойтись , хэлп посмотри по /?
cscript %systemroot%\system32\eventquery.vbs /?
Автор: Tipulatoid
Дата сообщения: 17.04.2007 15:30
Gabzya

Цитата:
это означает: на диске /f вo всех папках ?

Нет, данный код, как я уже говорил работает только для файлов в той папке откуда запущен батник. Папки он не трогает. Сейчас с подсказки Elroir пытаюсь соорудить переименование папок - пока выходит переименовать только папки 1-го уровня вложенности.

Работает так: команда dir /b /a:-d выводит множество всех файлов в папке в столбец (одно название файла - одна строка). Далее с помощью for /f (/f - это просто ключ команды for) разбираем каждую строку этого множества: tokens=* говорит, что надо взять всю строку целиком (без этого бралось бы только до первого пробела); взятой строке присваиваем имя переменной %%a

далее set name=%%a - назначаем взятой строке еще одно имя переменной - name

далее set name=!name:i=и! - заменяем в значении переменной !name! все символы "i" на "и"

далее set name=!name:ї=йы! - заменяем в значении переменной !name! все символы "ї" на "йы"

В результате первоначальная переменная %%a (т.е. название файла в укр. символах) у нас уже отличается от переменной !name! (название в русс. символах) и у нас есть все что нужно для переименования, что и делаем:
ren "%%a" "!name!"

Четыре этих команды, отработав для первой строки вывода команды dir /b /a:-d, также обработают 2-ую строку, 3-ью и так до конца множества.

Надеюсь, нормально объяснил
Автор: Mamontoza
Дата сообщения: 17.04.2007 15:40
Помогите пожалуйста
Мне нужно чтоб создавался полный лог по каждой машине, те у программы
program.exe есть пару параметров УСПЕШНО ЗАВЕРШОН, ненайден процес и еще когда неможет зайти на машину говрит что вход невозможе
а в логе отображаеться только что процесс удачно завершон,, а мне надо чтоб написало все
taskkill /s %1 /u domain\user name /p pass /f /im program.exe >%1_kill.log
%1 - номер машин

Автор: Elroir
Дата сообщения: 17.04.2007 15:57
Mamontoza
Добавь в конце строчки "2>&1":

Код:
taskkill /s %1 /u domain\user name /p pass /f /im program.exe >%1_kill.log 2>&1
Автор: Mamontoza
Дата сообщения: 17.04.2007 16:21
Elroir СПАСИБО а тоя голову ломал
Автор: Maza Faka
Дата сообщения: 17.04.2007 17:00
Elroir

Цитата:
Set /a Result=%1 * %Result%. %1=2, Result=1, значит новое значение Result=2*1=2

Откуда взялся аргумент %1 и почему его значение 2
Автор: Mamontoza
Дата сообщения: 17.04.2007 17:17
А еще неподскажите
уменя этот( taskkill /s %1 /u domain\user name /p pass /f /im program.exe ) батник (называеться kill.bat) отрабатывает по такому принцыпу
сначала запускаеться батник с такими задачами
start kill.bat comp-1
sleep 15
start kill.bat comp-2
sleep 15
start kill.bat comp-3
sleep 15
start kill.bat comp-4
...
и так далее где sleep 15 время простоя 15 секунд до следующей команды
мне нужно чтоб создался общий лог, те такого формата
comp-1
Процесс program.exe ненайден
comp-2
Процесс program.exe завершон
ВОЗМОЖНО это сделать
Автор: Maza Faka
Дата сообщения: 17.04.2007 17:17
Gabzya
Tipulatoid

Цитата:
пытаюсь соорудить переименование папок - пока выходит переименовать только папки 1-го уровня вложенности.


Код:
dir /b /a:d /s
Автор: Elroir
Дата сообщения: 17.04.2007 17:59
Maza Faka
"Call :Factorial %Param%" как будто вызывает новый батниик, начинающийся со строчки ":Factorial" и до конца настоящего батника. При этом %Param% является аргументом командной строки (первым). То есть для виртуального батника :Factorial, %1 - это то, что было передано аргументом при запуске "Call :Factorial %Param%". Последний раз, когда происходит запуск "Call :Factorial %Param%", - %1=2 (то есть перед этим был запуск "Call :Factorial 2"), высчитывается новое значение Param=%1-1(2-1)=1 и последний раз запускается "Call :Factorial 1".
Автор: Mamontoza
Дата сообщения: 17.04.2007 18:09
Maza Faka
тогда вопрос еще мне нужно чтоб нумерация шла вот так
comp-01
comp-02
comp-03...09
comp-10
И еще что в логе писался номер компа
comp-01
как отработал
comp-02
как отработал
Автор: InSe0F
Дата сообщения: 17.04.2007 23:21
Maza Faka, спасиб, заценимс

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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