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

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

бУРов 13-04-2014 14:13 2337297

Запись результата TIME в текстовый файл
 
Мне нужно засечь время завершения и запуска ОС. Я хотел использовать TIME в командном BAT-файле. Но это интерактивная команда. TIME /T не подходит, т.к. пишет только минуты и секунды. А TIME выводит еще и тики.

Как бы это сделать? "Ответить" "энтерЭ-ом в батнике и выделить только ту часть, которая содержит время.

Если такое получиться, можно ли там же в батнике найти разницу между двумя временными метками?

kiripanda 13-04-2014 15:40 2337341

Код:

echo %time%>>file.txt
Цитата:

найти разницу
http://forum.oszone.net/thread-189133.html

Опиум 14-04-2014 16:50 2337906

для замера времени использую самописанные утилитки http://forum.oszone.net/post-2275768-8.html

бУРов 14-04-2014 17:24 2337923

Код:

echo %time%>>tboot.log
Вполне устроило!!! Супер!

Получается так:

Код:

15:45:13,65
15:46:20,04
16:02:10,09
16:03:23,90

Консольные утилитки не помогут получить разницу между парами меток времени.

Как бы еще <CR><LF> добавить? Разбить пары.

kiripanda 14-04-2014 18:06 2337948

Цитата:

<CR><LF>
echo.>>tboot.log

Цитата:

разницу между парами
а точно не для этого http://forum.oszone.net/post-1525741.html#post1525741

про подсчёт
http://forum.oszone.net/thread-144189.html
http://forum.oszone.net/nextoldesttothread-234042.html

Опиум 15-04-2014 10:40 2338267

Цитата:

Цитата бУРов
Консольные утилитки не помогут получить разницу между парами меток времени. »

timemer.exe по ссылке моей сразу замеряет интервал.

бУРов 16-04-2014 13:23 2338864

Цитата:

Цитата kiripanda
а точно не для этого http://forum.oszone.net/post-1525741.html#post1525741 »

Да, утилита wmic.exe выбирает из журнала все времена запуска и остановки журнала событий и выводит в абсолютном формате, что интереснее для подсчета разницы.

А следующие примеры кода зачем? И чем их выполнять?

Цитата:

Цитата Опиум
timemer.exe по ссылке моей сразу замеряет интервал. »

В моем случае компьютер перезагружается. И утилита остановится.

kiripanda 16-04-2014 17:23 2338994

Цитата:

следующие примеры кода зачем?
на случай если я не угадал с журналом

бУРов 16-04-2014 17:45 2339005

Не, я про сообщение, где Iska кроме wmic.exe дает пару кусков кода.
Например:
Код:

Get-EventLog -LogName system -Source eventlog |`
    Where-Object {$_.eventID -eq 6005 -or $_.eventID -eq 6006} |`
    Select-Object -Property TimeGenerated, Message

Я не хотел бы ту тему старую поднимать. А я так и не смог понять, что это за код и чем его выполнить.

Опиум 18-04-2014 12:06 2339937

Цитата:

Цитата бУРов
В моем случае компьютер перезагружается. И утилита остановится. »

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

Barmaley000 13-03-2018 10:05 2803006

Уж простите, напишу сюда, чтоб не создавать новую тему, т.к. эта вроде более всего подходит по тематике.
Для проверки получения снимков даты-времени между началом и концом выполнения пакетника написал простенький скрипт для проверки вообще, как будет выводить снимки даты-времени по ходу выполнения:
Скрытый текст
@echo off
for /l %%i in (0,1,9) do (
echo %%i: %date% %time%
rem Пауза-задержка на 1 сек.
timeout /t 1
)

Результат вывода (проверено на Windows 7 SP1 x64, XP SP3 x86):
Скрытый текст

D:\docs>tmp
0: 13.03.2018 8:57:48.18

Время ожидания 0 сек., нажмите любую клавишу для продолжения ...
1: 13.03.2018 8:57:48.18

Время ожидания 0 сек., нажмите любую клавишу для продолжения ...
2: 13.03.2018 8:57:48.18

Время ожидания 0 сек., нажмите любую клавишу для продолжения ...
3: 13.03.2018 8:57:48.18

Время ожидания 0 сек., нажмите любую клавишу для продолжения ...
4: 13.03.2018 8:57:48.18

Время ожидания 0 сек., нажмите любую клавишу для продолжения ...
5: 13.03.2018 8:57:48.18

Время ожидания 0 сек., нажмите любую клавишу для продолжения ...
6: 13.03.2018 8:57:48.18

Время ожидания 0 сек., нажмите любую клавишу для продолжения ...
7: 13.03.2018 8:57:48.18

Время ожидания 0 сек., нажмите любую клавишу для продолжения ...
8: 13.03.2018 8:57:48.18

Время ожидания 0 сек., нажмите любую клавишу для продолжения ...
9: 13.03.2018 8:57:48.18

Время ожидания 0 сек., нажмите любую клавишу для продолжения ...

D:\docs>

Как видим, везде во временных метках стоит одно и то же время: "8:57:48.18"! А ведь должно, по идее, возрастать на одну секунду!
Такое впечатление, что оно "замирает" на все время выполнения скрипта. Неправильно это. А в чем дело - понять пока не могу. То ли это глюк интерпретатора, то ли не знаю даже, что и думать...

megaloman 13-03-2018 12:43 2803039

Вариант 1
Код:

@echo off
SetLocal EnableExtensions EnableDelayedExpansion

for /l %%i in (0,1,9) do (
        echo %%i: !date! !time!
        rem Пауза-задержка на 1 сек.
        timeout /t 1
)

Вариант 2
Код:

@echo off

Set /A i=0
:Begin
        echo %i%: %date% %time%
        rem Пауза-задержка на 1 сек.
        timeout /t 1
        Set /A i+=1
If %i% LEQ 9 GoTo :Begin

Вариант 3
Код:

@echo off
for /l %%i in (0,1,9) do (
        Call :DataTime %%i
        rem Пауза-задержка на 1 сек.
        timeout /t 1
)
GoTo :Eof

:DataTime
        Echo %1:  %date%  %time%
GoTo :Eof


Barmaley000 13-03-2018 17:52 2803113

Все заработало по первому варианту. Правда, пришлось отказаться от использования символа "!" в именах каталогов, т.к. тогда неправильно формирует пути. А как его можно использовать как символ, принудительно - я не нашел. Ну, с этим можно смириться...

alpap 13-03-2018 17:57 2803115

Цитата:

Цитата Barmaley000
как его можно использовать как символ, принудительно - я не нашел. Ну, с этим можно смириться... »

не надо мириться
megaloman в 3м варианте именно и сделал возможность не терять !

Barmaley000 13-03-2018 18:10 2803120

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

......................................
:copying
rem делаем копию архива на другой комп
if exist "%DestPath%%PrefDestName%%arch_date%-%arch_time%%pathend%" echo файлы "%DestPath%%PrefDestName%%arch_date%-%arch_time%%pathend%" уже существуют. >> %log%

rem Если копий архива не существует...
if not exist "%DestPath%%PrefDestName%%arch_date%-%arch_time%%pathend%" (
rem включение режима расширенной обработки комманд для правильного считывания снимков даты-времени !date! !time!
SetLocal EnableExtensions EnableDelayedExpansion
echo Начало копирования: !date! !time! >> %log%
echo xcopy "%ArchivePath%%PrefDestName%%arch_date%-%arch_time%%pathend%" "%DestPath%" /C /Y >> %log%
xcopy "%ArchivePath%%PrefDestName%%arch_date%-%arch_time%%pathend%" "%DestPath%" /C /Y >> %log%
echo Конец копирования: !date! !time! >> %log%
echo ---------------------------------------- >> %log%
)
[EOF]

вот внутри конструкции "if" и происходит считывание двух меток между командой копирования xcopy.
И чтобы его заставить работать без "setlocal", надо, чтоб между выводами команды
echo Начало копирования: !date! !time! >> %log%
интерпретатор достиг конца файла. А мне вроде этого не надо, ну или дальше мудрить...

alpap 13-03-2018 18:58 2803138

допустим:
Код:

:copying
if exist "%DestPath%%PrefDestName%%arch_date%-%arch_time%%pathend%" call :ncopy "%DestPath%%PrefDestName%%arch_date%-%arch_time%%pathend%" "%DestPath%"
if not exist "%DestPath%%PrefDestName%%arch_date%-%arch_time%%pathend%" call :ycopy "%DestPath%%PrefDestName%%arch_date%-%arch_time%%pathend%" "%DestPath%"
pause& exit

:ncopy
 >>%log% (
  echo файлы "%~1" уже существуют.
 )
exit /b

:ycopy
 >>%log% (
  echo Начало копирования: %date% %time%
  echo xcopy "%~1" "%~2" /C /Y
  xcopy "%~1" "%~2" /C /Y
 )
 >>%log% (
  echo Конец копирования: %date% %time%
  echo ----------------------------------------
 )
exit /b


megaloman 13-03-2018 20:16 2803160

Barmaley000,
Попробуйте Ваш кусок изобразить в виде
Код:

:copying
rem делаем копию архива на другой комп

Set "PFile=%DestPath%%PrefDestName%%arch_date%-%arch_time%%pathend%"
Set "XComm=xcopy "%ArchivePath%%PrefDestName%%arch_date%-%arch_time%%pathend%" "%DestPath%" /C /Y"

if Exist "%PFile%" Echo файлы "%PFile%" уже существуют. >> "%log%" &GoTo :Continue
        Echo Начало копирования: %date% %time% >> "%log%"
        echo %XComm% >> "%log%"
        %XComm% >> "%log%" 2>&1
        Echo Конец копирования: %date% %time% >> "%log%"
        Echo ---------------------------------------- >> "%log%"
:Continue

Либо, по мотивам произведения alpap
Код:

:copying
rem делаем копию архива на другой комп

Set "PFile=%DestPath%%PrefDestName%%arch_date%-%arch_time%%pathend%"
Set "XComm=xcopy "%ArchivePath%%PrefDestName%%arch_date%-%arch_time%%pathend%" "%DestPath%" /C /Y"

>>"%log%" 2>&1 Call :CopyOut

rem .......................
rem .......................
GoTo :Eof

:CopyOut
        if Exist "%PFile%" Echo файлы "%PFile%" уже существуют. &Exit /B 1
        Echo Начало копирования: %date% %time%
        echo %XComm%
        %XComm%
        Echo Конец копирования: %date% %time%
        Echo ----------------------------------------
Exit /B 0


Barmaley000 14-03-2018 13:10 2803270

megaloman, пожалуйста, разъясните, что за "козявки" типа "2>&1" в строке
%XComm% >> "%log%" 2>&1
чего обозначают, и где об этом почитать можно?

megaloman 14-03-2018 13:31 2803280

пожалуйста, разъясните, что за "козявки" чего обозначают, и где об этом почитать можно?
Использование операторов перенаправления команд Сообщения команды при нормальной работе выводятся в окно командной строки в поток 1. Вы перенаправляете этот вывод в файл. Если есть сообщения об ошибках при выполнении, они выводятся в поток 2. 2>&1 перенаправляет сообщения об ошибках в первый поток, то есть в Вашем случае, в файл. То есть в лог-файле Вы при этом получите не только сообщения о нормальной работе команды, но и об ошибках, если такие произойдут

Barmaley000 14-03-2018 17:09 2803317

alpap, проверил, понравилось - работает! Кое-что понял для себя.
megaloman, спасибо за ссылку, просветился. А я раньше думал, чего это вывод ошибок выполнения команд идет не в файл, а в консоль? Теперь понимаю. :)


Время: 21:26.

Время: 21:26.
© OSzone.net 2001-