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

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

Автор: ZeroCrash
Дата сообщения: 24.06.2009 10:23
Мне нужно во многих батниках заменить один и тот же участок кода (который во всех батниках одинаковый и находится в одном и том же месте) на другой. Можно ли автоматизировать такой процесс?
Автор: HaK1R
Дата сообщения: 24.06.2009 12:07
slay1212

Цитата:
Спасибо работает! но вариант HaK1R показывает t отрицательное ( как я понимаю, из-за того что самый поздний логон отнимается последним в t .


Код: @echo off
setlocal enabledelayedexpansion
set /a t=0
for /f "tokens=1,2" %%a in (tmp.txt) do (
if "%%b."=="528." (set /a t-=%%a & set /a min=%%a)
if "%%b."=="551." (set /a t+=%%a)
if "%%b."=="6008." (set /a t+=%%a)
)
set /a min=%time:~0,2%*60+%time:~3,2%-%min%
set /a t+=%time:~0,2%*60+%time:~3,2%
chcp 1251 1>nul
echo Общее время работы %t% минут
echo Время в последнем сеансе %min% минут
chcp 866 1>nul
Автор: slay1212
Дата сообщения: 24.06.2009 13:55

Цитата:
я правильно понимаю, что если подряд идут несколько logon то берем первый, а если logoff то последний

Я бы хотел последний логон, логофы внеочередные вряд ли появятся. Ну а идеологически правильно было бы анализировать еще и 6005 6006 из system (это время старта и стопа компа ( не юзера). Но тогда вообще каша получается Ниже код получения tmp.txt
[more]
это часть кода: В бат не силен поэтому код корявый можно оптимизировать
rem psloglist - из pctools Руссиновича
psloglist.exe -d 0 -s -id 6008 system > syst.txt
psloglist.exe -d 0 -s -id 551,528 security | find /I "!user_name!" >> syst.txt

for /f "tokens=6-9 delims=,\" %%a in (syst.txt) DO (
for /f "tokens=2,3* delims= " %%f in ("%%a") DO call :minn %%f,tsob
rem здесь нужно не время сообщения а время предыдущего shutdown берем k
IF "%%b"=="6008" (
FOR /f "tokens=6 delims= " %%k in ("%%d") do call :minn %%k,tsob
)
IF !tsob! LSS 1000 (
rem сдвигаю на пробел для правильной сортировки
echo !tsob! %%b >> rezt.txt
) Else (
echo !tsob! %%b >> rezt.txt
)
sort rezt.txt > tmp.txt
)

:minn
IF "%1"=="" GOTO EOF
for /f "tokens=1-3 delims=:" %%i in ("%1") do (
set /a %2 = 60*%%i + %%j
)
[/more]
Ну а дальше ваш код, уважаемые коллеги, далее сравнить с разрешенным временем работы,если превышено - логофф либо шатдоун через 5 минут с надписью " парень пора выключать комп хорош играть " . Это для 2003, в ХР я посмотрел для домена по умолчанию аудит логона логоффа отключен, те 551 и 528 в секурити не пишутся , для домашнего надо проверить, будет ли работать
Автор: HaK1R
Дата сообщения: 24.06.2009 15:15
slay1212

Цитата:
Ну а дальше ваш код, уважаемые коллеги, далее сравнить с разрешенным временем работы,если превышено - логофф либо шатдоун через 5 минут с надписью " парень пора выключать комп хорош играть "

Зачем все так сложно?! Трудно остановить себя?

Добавлено:
slay1212

Цитата:
Ну а идеологически правильно было бы анализировать еще и 6005 6006 из system (это время старта и стопа компа ( не юзера).

а мы повторятся не будем? ведь если камп включается и logon то в журнале будет
6005
528
тогда при подсчете два раза вычтем, может и в минус уйдем
вообщем нужно в из блакнота взять данные, посчитать общее время за день и последнего сеанса. От 528 или 6005, До 551 или 6006 или 6008.
Причем Если подряд идут 528 и 6005, то берем тот, который позднее, а логоффы подряд не идут. И если время текущего сеанса больше чего-то, то выключение через 5 минут с предупреждением. ТАК?
Автор: slay1212
Дата сообщения: 24.06.2009 15:50
HaK1R

Цитата:
Причем Если подряд идут 528 и 6005, то берем тот, который позднее, а логоффы подряд не идут. И если время текущего сеанса больше чего-то, то выключение через 5 минут с предупреждением. ТАК?

Да так главное время определить правильно
Автор: elektrizer
Дата сообщения: 24.06.2009 20:12
Можно как-нибудь реализовать запуск файла спустя определенное время после запуска батника?
Автор: alexander6161
Дата сообщения: 24.06.2009 20:32
elektrizer
Можешь поставить паузу в батнике, после неё он запустит программу и закроется.

Код: ping -n число 127.0.0.1>nul
start "" "программа.exe"
exit
Автор: HaK1R
Дата сообщения: 25.06.2009 11:42
slay1212
выключает если время текущего сеанса больше заданного(в минутах)

Код: @echo off
setlocal enabledelayedexpansion
set /a limit=300
set /a t=0
for /f "tokens=1,2" %%a in (tmp.txt) do (
if "%%b."=="528." (set /a min=%%a)
if "%%b."=="6005." (set /a min=%%a)
)
set /a min=%time:~0,2%*60+%time:~3,2%-%min%
if %min% GTR %limit% (shutdown -s -t 300 -c "парень пора выключать комп хорош играть (с)")
Автор: slay1212
Дата сообщения: 25.06.2009 14:43
HaK1R
Спасибо, но я тебе неправильно сказал условия - нужно именно суммарное время за день с учетом того что может быть несколько 528 кодов. Интересует именно принцип поиска времени для каждого отрезка когда юзер работал. Имхо нужно отслеживать появления пары событий логон юзера - логоф (или шатдаун), из нескольких подряд логонов брать последний по времени.
Автор: yurkesha
Дата сообщения: 25.06.2009 14:56
Nuke142
по поводу копирования - [more=код]
Код: FOR /F "TOKENS=*" %%i IN ('dir scripts /b') DO (
if exist "%%i\" (
xcopy "%%i" "куда\%%i" /I /E /H
) else (
xcopy "%%i" "куда"
)
)
Автор: anachrom
Дата сообщения: 25.06.2009 15:00
Attid
А тебе этот вариант не подойдет?
Там и в архивчик складывается. Вчера сервер сдох из бэкапа все прекасно встало.
Автор: yurkesha
Дата сообщения: 25.06.2009 15:31
slay1212
Цитата:
неправильно сказал условия
а правильные условия вообще возможны?
Простой пример: с утра пораньше(для определенности в 8-00) юзер залогинился и был залогинен на 5 минут меньше чем разрешенное время, после чего методом вырубания электричества комп выключили и по новой включили и залогинили...
Как ты будешь считать первый интервал? Надо ведь на основании чего-нибудь понять все время до второго логона юзер был залогинен или нет... Может быть комп вообще все это время был выключен...
Ну или если считаем в такой ситуации только последний логон то тогда вообще можно работать до бесконечности...
Автор: vitaliy91
Дата сообщения: 25.06.2009 21:36
Можно ли какимто образом получить статистику исспользования иннета на удаленной машине ? типа как netstat только на удаленном
Автор: slay1212
Дата сообщения: 26.06.2009 08:36
yurkesha
Не ну совсем правильный вариант более гемороен - писать общее время работы за день постоянно в файл <имя юзера><число месяц>, и время работы в текущем сеансе
(%min%) во временный файл t_tmp.txt . Ну или писать в %temp% тогда можно без имени юзера обойтись в имени файла - будет в его темп писаться. Ну вообще я планировал батником при логоне изера с пом schtasks создавать задание на запуск вышеприведенного батника через скажем 10 мин. В нем же можно проверить наличие двух файлов сложить из них время работы в <числомесяц> и t_tmp.txt потом грохнуть. В принципе реализуемый подход
Т.е. самому считать время работы юзера. Здесь имхо погрешность будет не больше времени перезапуска батника
Батник примерно следущий
[more]
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
psloglist.exe -d0 -s -id 528 security -n 1 >%tmp%\syst.txt
for /f "tokens=6-9 delims=,\" %%a in (%tmp%\syst.txt) DO (
for /f "tokens=2-3* delims= " %%f in ("%%a") DO call :minn %%f,tsob
)
set daynow=%date:~0,2%%date:~3,2%
IF EXIST %temp%\!daynow! (
for /f %%l in (%temp%\!daynow!) DO (
set /a min=%%l
)
)
set /a min=min+%time:~0,2%*60+%time:~3,2%-!tsob!
echo !min! > %temp%\t_tmp.txt

:minn
IF "%1"=="" GOTO EOF
for /f "tokens=1-3 delims=:" %%i in ("%1") do (
set /a %2 = 60*%%i + %%j
)
[/more]
Ну и логоновский батник надо сделать.
Автор: alexander6161
Дата сообщения: 26.06.2009 11:34
slay1212
Считать самому надёжнее, есть юзеры умные, которые не только кнопочкой могут компу рестарт сделать, но и часы умеют переводить. Раз ты так глубоко полез - не проще готовые прги поискать, которые время сеанса ограничивают? Так мне кажется намного надёжнее будет, чем батником. Батник и прибить можно, а прга не даёт себя прибить.

Вот как вариант:
http://www.dimonius.ru/?autostop
А поищешь - может намного навороченнее найдёшь.
Автор: slay1212
Дата сообщения: 26.06.2009 13:24
alexander6161
Если
Цитата:
есть юзеры умные
ничего не поможет ни батник ни твоя прога.
Я пробовал проги мне не понравились - можно регулировать время вплоть до приложений, доступ в инет и пр., а время юзера нельзя. Мне остальное все не нужно - веб контроль и тп., нужно только время ограничить исходя из совсем непродвинутого юзера, поэтому и изобретаю велосипед. Далее не продолжаю ибо здесь это офтоп.
Еще вопрос создаю задание для запуска под админом
schtasks /create /sc minute /mo 10 /tn jobb1 /tr c:\tmp\5.cmd /F /ru administrator /rp
1234
в 5.cmd есть строчка.

psloglist.exe -s -id 528 security -d 0 | find /i "Logon Type: 2" > c:\tmp\syst.txt

Задание создается батник запускается но процесс psloglist висит в процессах и не выполняется. Вместо 5.cmd ставишь калькулятор или блокнот - аналогично - они не стартуют а в процессах висят. Работаю под дугим юзером с правами админа. w2k3 сервер. Где собака порылась? psloglist тоже лежит в c:\tmp права на папку полные для всех.

Автор: 5ar5
Дата сообщения: 29.06.2009 13:23

Цитата:

Levitant

Цитата:
по этому примеру приходится заменять сохранять фаил с другим именем

Зачем? можно тот же выходной файл подставить:


Код:
@echo off
:: Create the assembler program, by Herbert Kleebauer
echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=> %temp%.\sbs2.com
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU!WvX0GwUY Wv;ovBX2Gv0ExGIuht6>> %temp%.\sbs2.com
echo ?@}IKuNWpe~Fpe?FNHlF?wGMECIQqo{Ox{T?kPv@jeoSeIlRFD@{AyEKj@>> %temp%.\sbs2.com
echo iqe~1NeAyR?mHAG~BGRgB{~H?o~TsdgCYqe?HR~upkpBG?~slJBCyA?@xA>> %temp%.\sbs2.com
echo LZp{xq`Cs?H[C_vHDyB?Hos@QslFA@wQ~~x}viH}`LYNBGyA?@xAB?sUq`>> %temp%.\sbs2.com
echo LRy@PwtCYQEuFK@A~BxPtDss@fFqjVmzD@qBEOEenU?`eHHeBCMs?FExep>> %temp%.\sbs2.com
echo LHsPBGyA?@xAunjzA}EKNs@CA?wQpQpKLBHv?s`WJ`LRCYyIWMJaejCksl>> %temp%.\sbs2.com
echo H[GyFGhHBwHZjjHeoFasuFUJeHeB?OsQH[xeHCPvqFj@oq@eNc?~}Nu??O>> %temp%.\sbs2.com
echo ~oEwoAjBKs?Zp`LBzHQzyEFrAWAG{EFrAqAGYwHTECIQ{coKIsaCsf{Oe~>> %temp%.\sbs2.com
echo CK}Ayre~CNFA{rAyEKFACrA{EKGAjbA}eKGSjNMtQFtc{OAyDGFj?{FDGQ>> %temp%.\sbs2.com
echo KAjNVk_OCAx@e?f{o?CosI}1EGizhljJ~H1ZeG}JBA~rACBMDGjjDG@g0>> %temp%.\sbs2.com
:: Use the program
%temp%.\sbs2.com 0 "2456" "3333" < "%appdata%\Opera\Opera\profile\opera6.ini" > "%appdata%\Opera\Opera\profile\opera6.ini"
:: Delete the program
del %temp%.\sbs2.com


Народ помогите, по примеру выше не получается делать замену текста в файле. Перезаписываемый файл остается пустым. Работает только если изменить путь.
Не могу понять, что делаю неправильно?
Автор: HaK1R
Дата сообщения: 30.06.2009 09:18
01MDM
5ar5
По-моему он сказал что
Цитата:
Перезаписываемый файл остается пустым
а не то, что он его не может найти, наверное дело не в del
Автор: 5ar5
Дата сообщения: 30.06.2009 10:06
Да дело не в del, я просто второй раз продублировал сообщение, вот и стер его - "del"

Решение так пока и не нашел
Автор: anachrom
Дата сообщения: 30.06.2009 13:50
А есть возможность обрыва всех связий к файлу?
Т.е. есть файл который нужно скопировать, а он занят приложением и по этому не дается. Так вот как-раз и нужно его освободить от гнета программы.
Автор: 01MDM
Дата сообщения: 30.06.2009 15:09
HaK1R

Цитата:
наверное дело не в del

Я удалил сообщение, вот и "del"

Автор: 5ar5
Дата сообщения: 30.06.2009 15:55
anachrom

Можно поподробнее на пальцах.

Я так понимаю, что если путь одинаковый (т.е. я хочу в исходном файле поменять только одну строку), то sb2s.com просто пере создает его (естественно пустым) и оставляет его пустым потому что брать содержимое исходного файла просто уже не от куда...или я что-то не правильно понимаю?

Просто во всех постах выше, где было упоминание sb2s.com путь рекомендуют делать другим, но вот в одном ViSiToR написал, что можно путь и не менять...

Автор: Attid
Дата сообщения: 30.06.2009 17:26
anachrom
я уже тоже самое сделал с нуля кроме удаления =) удаление доделаю и тогда туда же вынесу
Автор: HaK1R
Дата сообщения: 30.06.2009 20:52
5ar5
01MDM
извиняюсь, не понял
Автор: Dekabryi
Дата сообщения: 01.07.2009 13:40
Доброе время суток .
подскажите ПЛЗ
FOR /F "tokens=1 delims=," %%i in (list.txt) do dsquery user -desc %%i* | find "CN" & if errorlevel 1 echo 1 >> xlog.log


нужен итог - либо запись которая найдена либо какое то значение
Dsquery если не может найти по запросу то не возвращает не каких данных.
и получается что получается бардак !

Подскажите ПЛЗ
Автор: Elroir
Дата сообщения: 01.07.2009 14:21
Dekabryi
Что-то типа такого:

Код:
FOR /F "tokens=1 delims=," %%i in (list.txt) do dsquery user -desc %%i* | find "CN" && dsquery user -desc %%i* >>xlog.log || echo User %%1 not found>>xlog.log
Автор: Dekabryi
Дата сообщения: 01.07.2009 14:32
выкрутился по другому

FOR /F "tokens=1 delims=," %%i in (list.txt) do dsquery user -desc %%i* | find "CN" >> newlog.log & if errorlevel 1 echo 1 >> newlog.log

В итоге: Если значение полученно то идет запись его в newlog.log если нет то записывает в newlog.log 1
Автор: Starley25
Дата сообщения: 01.07.2009 14:48
Вопрос: никто не пробовал командником или скриптом задавать на удаленной тачке сервису пользователя от имени которого он должен запускаться?
Автор: Maza_Faka
Дата сообщения: 01.07.2009 17:34
Starley25

Код:
sc config /?
Автор: sergxz
Дата сообщения: 02.07.2009 08:57
подключаю удаленную машину
net use K: \\comp\share /user:user1 password
xcopy K:\files.rar C:\Temp /d /c /e /z /y ( копирую что то...)
дальше хочу отключить диск K
net use K: /delete
Но выходит запрос :
В подключениях к K: имееются открытые файлы и/или незавершенные операции поиска в каталогах.
Продолжить отключение и закрыть? Y/N
Пока не нажму ДА батник весит, а мне нужно чтобы дальше под буквой K подцепился другой компьютер, скопировать с него, отключить диск K, и по новой.....
Пробовал между командами xcopy и net use/delete вставлять ping -n 10 127.0.0.1, думая что нужно какое то время после копирования, но нет...не помогает...
Пожалуйста, кто знает- помогите...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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