CMD/BAT - Странное поведение bat при logoff

Ответить
Аватара пользователя
pedrosoft

CMD/BAT - Странное поведение bat при logoff

Сообщение pedrosoft »

Привет!



Помоги разобраться со странный поведением системы. У меня есть 2 bat-файла.



Первый создает lock.txt каждые 60 секунд



Код:

Код: Выделить всё

:loop
echo %computername% %date% %time% > lock.txt
timeout /t 60
goto loop

Второй - запускает программу и после ее завершения удаляет lock.txt и выходит из системы



Код:

Код: Выделить всё

start /wait QikDesktop.exe
del /f /q lock.txt
logoff

А странность заключается в том, что когда проходить команда logoff, первый bat-ник создает файл вопреки своему таймеру. Без команды выхода из системы, файл удаляется. Это как то можно победить?
Аватара пользователя
Elven

Re: CMD/BAT - Странное поведение bat при logoff

Сообщение Elven »

Для меня стало новостью что в виндах есть команда logoff, в виртуалку лезть лень, посему проверять не буду. Для аналогичного действия всегда использовал shutdown -l.

Однако к батникам. Первый батник использует goto, что вообще не очень красиво и чего следует избегать (не только в батниках, скорее вообще по жизни). Вместо того чтобы создавать бесконечный цикл с таймаутом в хлипком батнике, лучше бы загнать в шедулер одну строчку и отправить ее выполняться каждую минуту. Какой гешефт это будет иметь? Не будет привязки к времени отработки и прорисовки ответов от всех команд, т.о. через шедулер файл на самом деле будет создаваться раз в минуту, а не раз в 60,035 секунд (тысячные приведены для примера, не являются реальным замером). На набольшом промежутке времени это не так уж критично, но если взять хотя бы несколько часов... Ну и вопреки таймеру происходить ничего не будет.

Строчка эта, как я вижу, не только создает, еще и перезаписывает имеющуюся в этом файле информацию, но это как бы не особо критично.

Во втором батнике не вижу ничего криминального, файл удаляется потому что команда на логоф после удаления.
Аватара пользователя
Foreigner

Re: CMD/BAT - Странное поведение bat при logoff

Сообщение Foreigner »

Цитата Elven:



Для меня стало новостью что в виндах есть команда logoff
CMD/BAT - Странное поведение bat при logoff






Код:

Код: Выделить всё

> logoff
'logoff' is not recognized as an internal or external command,
operable program or batch file.

Не уверен, но вроде в более ранних версиях виндоус logoff вроде был.
Аватара пользователя
pedrosoft

Re: CMD/BAT - Странное поведение bat при logoff

Сообщение pedrosoft »

Цитата Elven:



Для меня стало новостью что в виндах есть команда logoff, в виртуалку лезть лень, посему проверять не буду. Для аналогичного действия всегда использовал shutdown -l.

Однако к батникам. Первый батник использует goto, что вообще не очень красиво и чего следует избегать (не только в батниках, скорее вообще по жизни). Вместо того чтобы создавать бесконечный цикл с таймаутом в хлипком батнике, лучше бы загнать в шедулер одну строчку и отправить ее выполняться каждую минуту. Какой гешефт это будет иметь? Не будет привязки к времени отработки и прорисовки ответов от всех команд, т.о. через шедулер файл на самом деле будет создаваться раз в минуту, а не раз в 60,035 секунд (тысячные приведены для примера, не являются реальным замером). На набольшом промежутке времени это не так уж критично, но если взять хотя бы несколько часов... Ну и вопреки таймеру происходить ничего не будет.

Строчка эта, как я вижу, не только создает, еще и перезаписывает имеющуюся в этом файле информацию, но это как бы не особо критично.

Во втором батнике не вижу ничего криминального, файл удаляется потому что команда на логоф после удаления.



В моем случае через шедулер сделать не получиться, потому что сейчас эти батники запускаются хаотично на десятках ПК с таким же заотичным расписанием работы.



Файл lock и должен удаляться. Попробую заменить logoff, но не думаю, что проблема в этом.
Аватара пользователя
alpap

Re: CMD/BAT - Странное поведение bat при logoff

Сообщение alpap »

Цитата pedrosoft:



создает файл вопреки своему таймеру
CMD/BAT - Странное поведение bat при logoff




да ладно, давайте разберем:

просто пропускаем

:loop

создаем файл с информацией в echo

echo %computername% %date% %time% > lock.txt

ждем 60сек

timeout /t 60

переходим по метке

goto loop



так почему вопреки, через каждые 60сек файл перезаписывается, но создается при запуске bat


Цитата Elven:



в виндах есть команда logoff
CMD/BAT - Странное поведение bat при logoff




1.jpg
Аватара пользователя
alpap

Re: CMD/BAT - Странное поведение bat при logoff

Сообщение alpap »

Цитата pedrosoft:



Это как то можно победить?
CMD/BAT - Странное поведение bat при logoff




а что надо-то?
Вложения

[Расширение jpg было запрещено, вложение больше недоступно.]

Аватара пользователя
alpap

Re: CMD/BAT - Странное поведение bat при logoff

Сообщение alpap »

Цитата pedrosoft:



сейчас эти батники запускаются хаотично на десятках ПК с таким же заотичным расписанием работы
CMD/BAT - Странное поведение bat при logoff




тогда думаю надо сначала навести порядок, потому что вы быстрее голову поломаете с такими запусками чем с коверканием батников, тем более что я тоже поддерживаю
Цитата Elven:



лучше бы загнать в шедулер одну строчку и отправить ее выполняться каждую минуту
CMD/BAT - Странное поведение bat при logoff




если не знаете как это сделать, то вот, например, задание "Proba" на запуск "C:\name.bat" каждую минуту:



Код:

Код: Выделить всё

SCHTASKS /Create /SC MINUTE /MO 1 /TN "Proba" /TR "C:\name.bat"
Аватара пользователя
pedrosoft

Re: CMD/BAT - Странное поведение bat при logoff

Сообщение pedrosoft »

alpap спасибо, шедулер я сейчас загнать ну никак не могу.

Подскажите пожалуйста как через цикл for создавать файл каждую минуту? Пробовал таким способом, но работает не корректно - первый раз создает и дальше информация в файле не обновляется.

Код:

Код: Выделить всё

for /l %%a in (0,0,0) do (
	echo %computername% %date% %time% > lock.txt
	ping -n 30 127.0.0.1
)
Аватара пользователя
Iska

Re: CMD/BAT - Странное поведение bat при logoff

Сообщение Iska »

pedrosoft, обновляется (Вы это можете увидеть по дате-времени создания файла. Просто она у Вас всё время одна и та же — та, что будет на время входа в операторные скобки цикла.

Либо:

Код:

Код: Выделить всё

@echo off
setlocal enableextensions enabledelayedexpansion
for /l %%a in (0,0,0) do (
	>"lock.txt" echo !computername! !date! !time!
	ping -n 30 127.0.0.1
)
endlocal
exit /b 0

Либо:

Код:

Код: Выделить всё

for /l %%a in (0,0,0) do (
	>"lock.txt" call echo %%computername%% %%date%% %%time%%
	ping -n 30 127.0.0.1
)
Ответить

Вернуться в «Скриптовые языки администрирования Windows»