Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Странное поведение bat при logoff (http://forum.oszone.net/showthread.php?t=345716)

pedrosoft 01-07-2020 23:15 2927008

Странное поведение bat при logoff
 
Привет!

Помоги разобраться со странный поведением системы. У меня есть 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 02-07-2020 09:05 2927029

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

Foreigner 02-07-2020 12:34 2927052

Цитата:

Цитата Elven
Для меня стало новостью что в виндах есть команда logoff »

Код:

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

Не уверен, но вроде в более ранних версиях виндоус logoff вроде был.

pedrosoft 02-07-2020 15:47 2927064

Цитата:

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

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

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

alpap 02-07-2020 15:59 2927065

Вложений: 1
Цитата:

Цитата pedrosoft
создает файл вопреки своему таймеру »

да ладно, давайте разберем:
просто пропускаем
:loop
создаем файл с информацией в echo
echo %computername% %date% %time% > lock.txt
ждем 60сек
timeout /t 60
переходим по метке
goto loop

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

Цитата Elven
в виндах есть команда logoff »

Файл 161874

alpap 02-07-2020 16:01 2927066

Цитата:

Цитата pedrosoft
Это как то можно победить? »

а что надо-то?

alpap 02-07-2020 16:25 2927068

Цитата:

Цитата pedrosoft
сейчас эти батники запускаются хаотично на десятках ПК с таким же заотичным расписанием работы »

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

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

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

SCHTASKS /Create /SC MINUTE /MO 1 /TN "Proba" /TR "C:\name.bat"

pedrosoft 05-07-2020 23:22 2927378

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

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

for /l %%a in (0,0,0) do (
        echo %computername% %date% %time% > lock.txt
        ping -n 30 127.0.0.1
)


Iska 06-07-2020 03:15 2927388

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
)



Время: 16:35.

Время: 16:35.
© OSzone.net 2001-