Показать полную графическую версию : Запись результата TIME в текстовый файл
Мне нужно засечь время завершения и запуска ОС. Я хотел использовать TIME в командном BAT-файле. Но это интерактивная команда. TIME /T не подходит, т.к. пишет только минуты и секунды. А TIME выводит еще и тики.
Как бы это сделать? "Ответить" "энтерЭ-ом в батнике и выделить только ту часть, которая содержит время.
Если такое получиться, можно ли там же в батнике найти разницу между двумя временными метками?
kiripanda
13-04-2014, 15:40
echo %time%>>file.txt
найти разницу
http://forum.oszone.net/thread-189133.html
для замера времени использую самописанные утилитки http://forum.oszone.net/post-2275768-8.html
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
<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
Консольные утилитки не помогут получить разницу между парами меток времени. »
timemer.exe по ссылке моей сразу замеряет интервал.
а точно не для этого http://forum.oszone.net/post-1525741.html#post1525741 »Да, утилита wmic.exe выбирает из журнала все времена запуска и остановки журнала событий и выводит в абсолютном формате, что интереснее для подсчета разницы.
А следующие примеры кода зачем? И чем их выполнять?
timemer.exe по ссылке моей сразу замеряет интервал. »В моем случае компьютер перезагружается. И утилита остановится.
kiripanda
16-04-2014, 17:23
следующие примеры кода зачем?
на случай если я не угадал с журналом
Не, я про сообщение, где Iska кроме wmic.exe дает пару кусков кода.
Например:Get-EventLog -LogName system -Source eventlog |`
Where-Object {$_.eventID -eq 6005 -or $_.eventID -eq 6006} |`
Select-Object -Property TimeGenerated, Message
Я не хотел бы ту тему старую поднимать. А я так и не смог понять, что это за код и чем его выполнить.
В моем случае компьютер перезагружается. И утилита остановится. »
не понял. утилита не висит, а протоколирует в файле временные метки и позволяет вычислять разницу между ними.
Barmaley000
13-03-2018, 10:05
Уж простите, напишу сюда, чтоб не создавать новую тему, т.к. эта вроде более всего подходит по тематике.
Для проверки получения снимков даты-времени между началом и концом выполнения пакетника написал простенький скрипт для проверки вообще, как будет выводить снимки даты-времени по ходу выполнения:
@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
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
for /l %%i in (0,1,9) do (
echo %%i: !date! !time!
rem Пауза-задержка на 1 сек.
timeout /t 1
)@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 @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
Все заработало по первому варианту. Правда, пришлось отказаться от использования символа "!" в именах каталогов, т.к. тогда неправильно формирует пути. А как его можно использовать как символ, принудительно - я не нашел. Ну, с этим можно смириться...
как его можно использовать как символ, принудительно - я не нашел. Ну, с этим можно смириться... »
не надо мириться
megaloman в 3м варианте именно и сделал возможность не терять !
Barmaley000
13-03-2018, 18:10
да, спасибо, я это понял. Дело в том, что в реальном скрипте нету циклов, привожу фрагмент как есть:
......................................
: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%
интерпретатор достиг конца файла. А мне вроде этого не надо, ну или дальше мудрить...
допустим:
: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
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
: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
megaloman, пожалуйста, разъясните, что за "козявки" типа "2>&1" в строке
%XComm% >> "%log%" 2>&1
чего обозначают, и где об этом почитать можно?
megaloman
14-03-2018, 13:31
Использование операторов перенаправления команд (http://www.windowsfaq.ru/content/view/260/57/)Сообщения команды при нормальной работе выводятся в окно командной строки в поток 1. Вы перенаправляете этот вывод в файл. Если есть сообщения об ошибках при выполнении, они выводятся в поток 2. 2>&1 перенаправляет сообщения об ошибках в первый поток, то есть в Вашем случае, в файл. То есть в лог-файле Вы при этом получите не только сообщения о нормальной работе команды, но и об ошибках, если такие произойдут
Barmaley000
14-03-2018, 17:09
alpap, проверил, понравилось - работает! Кое-что понял для себя.
megaloman, спасибо за ссылку, просветился. А я раньше думал, чего это вывод ошибок выполнения команд идет не в файл, а в консоль? Теперь понимаю. :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.