Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Запись результата TIME в текстовый файл

Ответить
Настройки темы
CMD/BAT - Запись результата TIME в текстовый файл

Старожил


Сообщения: 310
Благодарности: 6

Профиль | Отправить PM | Цитировать


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

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

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

Отправлено: 14:13, 13-04-2014

 

Новый участник


Сообщения: 30
Благодарности: 2

Профиль | Отправить PM | Цитировать


Уж простите, напишу сюда, чтоб не создавать новую тему, т.к. эта вроде более всего подходит по тематике.
Для проверки получения снимков даты-времени между началом и концом выполнения пакетника написал простенький скрипт для проверки вообще, как будет выводить снимки даты-времени по ходу выполнения:
Скрытый текст
@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"! А ведь должно, по идее, возрастать на одну секунду!
Такое впечатление, что оно "замирает" на все время выполнения скрипта. Неправильно это. А в чем дело - понять пока не могу. То ли это глюк интерпретатора, то ли не знаю даже, что и думать...

Отправлено: 10:05, 13-03-2018 | #11



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

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


Ветеран


Contributor


Сообщения: 2703
Благодарности: 1683

Профиль | Отправить PM | Цитировать


Вариант 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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 13-03-2018 в 13:09.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:43, 13-03-2018 | #12


Новый участник


Сообщения: 30
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:52, 13-03-2018 | #13


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:57, 13-03-2018 | #14


Новый участник


Сообщения: 30
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

......................................
: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%
интерпретатор достиг конца файла. А мне вроде этого не надо, ну или дальше мудрить...

Отправлено: 18:10, 13-03-2018 | #15


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


допустим:
Код: Выделить весь код
: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
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:58, 13-03-2018 | #16


Ветеран


Contributor


Сообщения: 2703
Благодарности: 1683

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 13-03-2018 в 21:11.


Отправлено: 20:16, 13-03-2018 | #17


Новый участник


Сообщения: 30
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 13:10, 14-03-2018 | #18


Ветеран


Contributor


Сообщения: 2703
Благодарности: 1683

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:31, 14-03-2018 | #19


Новый участник


Сообщения: 30
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:09, 14-03-2018 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Запись результата TIME в текстовый файл

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Отредактировать текстовый файл login AutoIt 12 16-01-2014 12:55
CMD/BAT - Запись результата команды в txt DeepPurple Скриптовые языки администрирования Windows 4 12-12-2013 15:31
VBS/WSH/JS - [решено] Запись пути к выделенной папке в текстовый файл Sta1917 Программирование и базы данных 5 25-02-2013 19:09
добавить запись в текстовый файл не открывая его. GooDok AutoIt 3 19-10-2010 16:42
VBS/WSH/JS - Экспорт значений реестра в общий текстовый файл + добавление доп данных в этот файл fedko Скриптовые языки администрирования Windows 0 17-06-2010 11:52




 
Переход