Показать полную графическую версию : [решено] Время
Letrblak
08-12-2012, 14:40
Помогите пожалуйста сделать время виду 22:11:42,24 перевести в 22114224!!
@echo off
setlocal enableextensions enabledelayedexpansion
set sTime=%time::=%
set sTime=%sTime:.=%
set sTime=%sTime:,=%
echo %sTime%
endlocal
exit /b 0
Letrblak
08-12-2012, 15:48
вопрос следующий: если мне нужно замерить время до начала операцыи, потом после её окончания, и узнать время исполнения операцыи, то код будет иметь такой вид??
@echo off
setlocal enableextensions enabledelayedexpansion
set t1=%time::=%
set t1=%sTime:.=%
set t1=%sTime:,=%
Echo %t1%
for /F %%i in (D:\Bohdan\man\1.txt) do echo %%i
set t2=%time::=%
set t2=%sTime:.=%
set t2=%sTime:,=%
echo %t2%
Set /a t="%t2%"-"%t1%"
echo %t%
ой, извените, всетаки наверно воттакой:
@echo off
setlocal enableextensions enabledelayedexpansion
set sTime=%time::=%
set sTime=%sTime:.=%
set sTime=%sTime:,=%
Echo %sTime%
for /F %%i in (D:\Bohdan\man\Drupal.txt) do echo %%i
set sTime1=%time::=%
set sTime1=%sTime:.=%
set sTime1=%sTime:,=%
echo %sTime1%
Set /a t="%sTime1%"-"%sTime%"
echo %t%
то код будет иметь такой вид??
…
всетаки наверно воттакой…»
Ни то, ни другое.
Letrblak, на форуме были реализации арифметических операций над датой/временем. Поискав, Вы их найдёте. Я лично предпочитаю для подобных вещей пользовать WSH или PoSH.
@Echo Off
Call :Sec t1
Rem Здесь исследуемый процесс
Call :Sec t2
Set /a t=t2-t1
Echo %t% sec
Pause>Nul
Exit
:Sec
Set tm=%time%
Set /a %1=3600*%tm:~0,2%+60*1%tm:~3,2%+1%tm:~6,2%
GoTo :EOF
megaloman
09-12-2012, 21:43
Вот мой вариант решения. Часы в соответствии с региональным русским стандартом системы изменяются от 0 до 23; минуты, секунды в системе должны отображаться двумя знаками, формат времени - 24 часа. Отличия:
1. Разность выдаю в сотых секунды.
2. Учитываю возможный переход через одну полночь (когда t2<t1)
3. Правильно считаю значение каждого времени в сотых секунды - для поставленной задачи (подсчет разности) это не существенно.@echo off
cls
Call :DSek t1
@Echo Здесь процесс
pause
Call :DSek t2
If %t2% GEQ %t1% (Set /a tt=t2-t1) Else (Set /a tt=t2-t1+8640000)
Echo Окончание %t2%
Echo Начало %t1%
Echo Разность %tt% сотые секунды
Pause
GoTo :Eof
:Dsek
FOR /F "tokens=1,2,3,4 delims=:.," %%i in ("%Time%") do Set /A %1=(%%i*3600+1%%j*60+1%%k-6100)*100+1%%l-100
gora, спасибо, не знал, что можно возвращать значение аргумента.
Однако в Ваш батник коварно вкралась ошибка: если время от 0 до 9 часов, то Ваша строка Set /a %1=3600*%tm:~0,2%+60*1%tm:~3,2%+1%tm:~6,2% выполнится с ошибкой, так как Вы выделяете под часы 2 знака, даже если стандарт времени настроен так, чтобы часы занимали 2 позиции, то, например, если текущее время 09 часов эта же строка тоже выполнится с ошибкой
коварно вкралась ошибка »
1 Стандарт времени по умолчанию на ХР и win7 (H:mm:ss) и ведущего нуля у Часов нет. Видимо у Вас иные региональные настройки.
2 Точность до сотых в данном случае сравнима с инструментальной погрешностью и вряд ли представляет какой либо практический интерес.
3 Про суточный переход знаю, но не стал усложнять скрипт ибо сам по ночам сплю. :)
…не знал, что можно возвращать значение аргумента. »
А так: CMD/BAT: возврат значений из процедур через параметры (http://forum.script-coding.com/viewtopic.php?id=2944) — ещё лучше :).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.