Мне нужно во многих батниках заменить один и тот же участок кода (который во всех батниках одинаковый и находится в одном и том же месте) на другой. Можно ли автоматизировать такой процесс?
» Задачи на bat-файлах 7
slay1212
Цитата:
Код: @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
Цитата:
Спасибо работает! но вариант 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
Цитата:
я правильно понимаю, что если подряд идут несколько 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 в секурити не пишутся , для домашнего надо проверить, будет ли работать
slay1212
Цитата:
Зачем все так сложно?! Трудно остановить себя?
Добавлено:
slay1212
Цитата:
а мы повторятся не будем? ведь если камп включается и logon то в журнале будет
6005
528
тогда при подсчете два раза вычтем, может и в минус уйдем
вообщем нужно в из блакнота взять данные, посчитать общее время за день и последнего сеанса. От 528 или 6005, До 551 или 6006 или 6008.
Причем Если подряд идут 528 и 6005, то берем тот, который позднее, а логоффы подряд не идут. И если время текущего сеанса больше чего-то, то выключение через 5 минут с предупреждением. ТАК?
Цитата:
Ну а дальше ваш код, уважаемые коллеги, далее сравнить с разрешенным временем работы,если превышено - логофф либо шатдоун через 5 минут с надписью " парень пора выключать комп хорош играть "
Зачем все так сложно?! Трудно остановить себя?
Добавлено:
slay1212
Цитата:
Ну а идеологически правильно было бы анализировать еще и 6005 6006 из system (это время старта и стопа компа ( не юзера).
а мы повторятся не будем? ведь если камп включается и logon то в журнале будет
6005
528
тогда при подсчете два раза вычтем, может и в минус уйдем
вообщем нужно в из блакнота взять данные, посчитать общее время за день и последнего сеанса. От 528 или 6005, До 551 или 6006 или 6008.
Причем Если подряд идут 528 и 6005, то берем тот, который позднее, а логоффы подряд не идут. И если время текущего сеанса больше чего-то, то выключение через 5 минут с предупреждением. ТАК?
HaK1R
Цитата:
Да так главное время определить правильно
Цитата:
Причем Если подряд идут 528 и 6005, то берем тот, который позднее, а логоффы подряд не идут. И если время текущего сеанса больше чего-то, то выключение через 5 минут с предупреждением. ТАК?
Да так главное время определить правильно
Можно как-нибудь реализовать запуск файла спустя определенное время после запуска батника?
elektrizer
Можешь поставить паузу в батнике, после неё он запустит программу и закроется.
Код: ping -n число 127.0.0.1>nul
start "" "программа.exe"
exit
Можешь поставить паузу в батнике, после неё он запустит программу и закроется.
Код: ping -n число 127.0.0.1>nul
start "" "программа.exe"
exit
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 "парень пора выключать комп хорош играть (с)")
выключает если время текущего сеанса больше заданного(в минутах)
Код: @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 "парень пора выключать комп хорош играть (с)")
HaK1R
Спасибо, но я тебе неправильно сказал условия - нужно именно суммарное время за день с учетом того что может быть несколько 528 кодов. Интересует именно принцип поиска времени для каждого отрезка когда юзер работал. Имхо нужно отслеживать появления пары событий логон юзера - логоф (или шатдаун), из нескольких подряд логонов брать последний по времени.
Спасибо, но я тебе неправильно сказал условия - нужно именно суммарное время за день с учетом того что может быть несколько 528 кодов. Интересует именно принцип поиска времени для каждого отрезка когда юзер работал. Имхо нужно отслеживать появления пары событий логон юзера - логоф (или шатдаун), из нескольких подряд логонов брать последний по времени.
Nuke142
по поводу копирования - [more=код]
Код: FOR /F "TOKENS=*" %%i IN ('dir scripts /b') DO (
if exist "%%i\" (
xcopy "%%i" "куда\%%i" /I /E /H
) else (
xcopy "%%i" "куда"
)
)
по поводу копирования - [more=код]
Код: FOR /F "TOKENS=*" %%i IN ('dir scripts /b') DO (
if exist "%%i\" (
xcopy "%%i" "куда\%%i" /I /E /H
) else (
xcopy "%%i" "куда"
)
)
Attid
А тебе этот вариант не подойдет?
Там и в архивчик складывается. Вчера сервер сдох из бэкапа все прекасно встало.
А тебе этот вариант не подойдет?
Там и в архивчик складывается. Вчера сервер сдох из бэкапа все прекасно встало.
slay1212
Цитата:
Простой пример: с утра пораньше(для определенности в 8-00) юзер залогинился и был залогинен на 5 минут меньше чем разрешенное время, после чего методом вырубания электричества комп выключили и по новой включили и залогинили...
Как ты будешь считать первый интервал? Надо ведь на основании чего-нибудь понять все время до второго логона юзер был залогинен или нет... Может быть комп вообще все это время был выключен...
Ну или если считаем в такой ситуации только последний логон то тогда вообще можно работать до бесконечности...
Цитата:
неправильно сказал условияа правильные условия вообще возможны?
Простой пример: с утра пораньше(для определенности в 8-00) юзер залогинился и был залогинен на 5 минут меньше чем разрешенное время, после чего методом вырубания электричества комп выключили и по новой включили и залогинили...
Как ты будешь считать первый интервал? Надо ведь на основании чего-нибудь понять все время до второго логона юзер был залогинен или нет... Может быть комп вообще все это время был выключен...
Ну или если считаем в такой ситуации только последний логон то тогда вообще можно работать до бесконечности...
Можно ли какимто образом получить статистику исспользования иннета на удаленной машине ? типа как netstat только на удаленном
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]
Ну и логоновский батник надо сделать.
Не ну совсем правильный вариант более гемороен - писать общее время работы за день постоянно в файл <имя юзера><число месяц>, и время работы в текущем сеансе
(%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]
Ну и логоновский батник надо сделать.
slay1212
Считать самому надёжнее, есть юзеры умные, которые не только кнопочкой могут компу рестарт сделать, но и часы умеют переводить. Раз ты так глубоко полез - не проще готовые прги поискать, которые время сеанса ограничивают? Так мне кажется намного надёжнее будет, чем батником. Батник и прибить можно, а прга не даёт себя прибить.
Вот как вариант:
http://www.dimonius.ru/?autostop
А поищешь - может намного навороченнее найдёшь.
Считать самому надёжнее, есть юзеры умные, которые не только кнопочкой могут компу рестарт сделать, но и часы умеют переводить. Раз ты так глубоко полез - не проще готовые прги поискать, которые время сеанса ограничивают? Так мне кажется намного надёжнее будет, чем батником. Батник и прибить можно, а прга не даёт себя прибить.
Вот как вариант:
http://www.dimonius.ru/?autostop
А поищешь - может намного навороченнее найдёшь.
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 права на папку полные для всех.
Если
Цитата:
есть юзеры умныеничего не поможет ни батник ни твоя прога.
Я пробовал проги мне не понравились - можно регулировать время вплоть до приложений, доступ в инет и пр., а время юзера нельзя. Мне остальное все не нужно - веб контроль и тп., нужно только время ограничить исходя из совсем непродвинутого юзера, поэтому и изобретаю велосипед. Далее не продолжаю ибо здесь это офтоп.
Еще вопрос создаю задание для запуска под админом
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 права на папку полные для всех.
Цитата:
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
Народ помогите, по примеру выше не получается делать замену текста в файле. Перезаписываемый файл остается пустым. Работает только если изменить путь.
Не могу понять, что делаю неправильно?
01MDM
5ar5
По-моему он сказал что
Цитата:
5ar5
По-моему он сказал что
Цитата:
Перезаписываемый файл остается пустыма не то, что он его не может найти, наверное дело не в del
Да дело не в del, я просто второй раз продублировал сообщение, вот и стер его - "del"
Решение так пока и не нашел
Решение так пока и не нашел
А есть возможность обрыва всех связий к файлу?
Т.е. есть файл который нужно скопировать, а он занят приложением и по этому не дается. Так вот как-раз и нужно его освободить от гнета программы.
Т.е. есть файл который нужно скопировать, а он занят приложением и по этому не дается. Так вот как-раз и нужно его освободить от гнета программы.
HaK1R
Цитата:
Я удалил сообщение, вот и "del"
Цитата:
наверное дело не в del
Я удалил сообщение, вот и "del"
anachrom
Можно поподробнее на пальцах.
Я так понимаю, что если путь одинаковый (т.е. я хочу в исходном файле поменять только одну строку), то sb2s.com просто пере создает его (естественно пустым) и оставляет его пустым потому что брать содержимое исходного файла просто уже не от куда...или я что-то не правильно понимаю?
Просто во всех постах выше, где было упоминание sb2s.com путь рекомендуют делать другим, но вот в одном ViSiToR написал, что можно путь и не менять...
Можно поподробнее на пальцах.
Я так понимаю, что если путь одинаковый (т.е. я хочу в исходном файле поменять только одну строку), то sb2s.com просто пере создает его (естественно пустым) и оставляет его пустым потому что брать содержимое исходного файла просто уже не от куда...или я что-то не правильно понимаю?
Просто во всех постах выше, где было упоминание sb2s.com путь рекомендуют делать другим, но вот в одном ViSiToR написал, что можно путь и не менять...
anachrom
я уже тоже самое сделал с нуля кроме удаления =) удаление доделаю и тогда туда же вынесу
я уже тоже самое сделал с нуля кроме удаления =) удаление доделаю и тогда туда же вынесу
5ar5
01MDM
извиняюсь, не понял
01MDM
извиняюсь, не понял
Доброе время суток .
подскажите ПЛЗ
FOR /F "tokens=1 delims=," %%i in (list.txt) do dsquery user -desc %%i* | find "CN" & if errorlevel 1 echo 1 >> xlog.log
нужен итог - либо запись которая найдена либо какое то значение
Dsquery если не может найти по запросу то не возвращает не каких данных.
и получается что получается бардак !
Подскажите ПЛЗ
подскажите ПЛЗ
FOR /F "tokens=1 delims=," %%i in (list.txt) do dsquery user -desc %%i* | find "CN" & if errorlevel 1 echo 1 >> xlog.log
нужен итог - либо запись которая найдена либо какое то значение
Dsquery если не может найти по запросу то не возвращает не каких данных.
и получается что получается бардак !
Подскажите ПЛЗ
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
Что-то типа такого:
Код:
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
выкрутился по другому
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
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
Код:
sc config /?
Код:
sc config /?
подключаю удаленную машину
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, думая что нужно какое то время после копирования, но нет...не помогает...
Пожалуйста, кто знает- помогите...
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, истории становления российского интернета. Сделано для людей.