Время меняется случайным образом на Windows 7 во время работы пакетного файла - PullRequest
1 голос
/ 24 апреля 2020

Время постоянно меняется на моем P C. Операционная система: Windows 7 Профессиональный пакет обновления 1 Часовой пояс: UT C Дублин, Эдинбург, Лиссабон, Лондон Время изменилось 29 марта 2020 года, как и ожидалось. Дневной свет проверен.

    Ran several tests that all started at 01:55 AM on 6th of April 2020.
    Each test ran for 70 minutes outputting time and date every minute monitored via batch file and outputted to log file.

       @echo on
        set loop=0
        :loop
        rem echo Logged time = %time% %date%>> logtime.txt
        timeout 60
        set /a loop=%loop%+1 
        echo Logged time = %time% %date%>> logtime.txt
        if "%loop%"=="70" goto next
        goto loop
        :next
        echo  end time Logged time = %time% %dat

    Results from testing time displayed just before and after time changed

    Test 1 shows time changed by 1 hour 
    Test1: Output should expect time 2:07:42 to change to 2:08:33
    Logged time =  2:03:42.10 Mon 06/04/2020
    Logged time =  2:04:42.11 Mon 06/04/2020
    Logged time =  2:05:42.12 Mon 06/04/2020
    Logged time =  2:06:42.13 Mon 06/04/2020
    Logged time =  2:07:42.14 Mon 06/04/2020
    Logged time =  **3:08**:33.61 Mon 06/04/2020
    Logged time =  3:09:33.12 Mon 06/04/2020
    Logged time =  3:10:33.13 Mon 06/04/2020

Test 2 shows time changed by 1 hour  Complete Log
Logged time =  1:55:59.05 Mon 06/04/2020
Logged time =  1:56:59.17 Mon 06/04/2020
Logged time =  1:57:59.17 Mon 06/04/2020
Logged time =  1:58:59.17 Mon 06/04/2020
Logged time =  1:59:59.18 Mon 06/04/2020
Logged time =  2:00:59.19 Mon 06/04/2020
Logged time =  2:01:59.10 Mon 06/04/2020
Logged time =  2:02:59.11 Mon 06/04/2020
Logged time =  2:03:59.12 Mon 06/04/2020
Logged time =  2:04:59.13 Mon 06/04/2020
Logged time =  2:05:59.14 Mon 06/04/2020
Logged time =  2:06:59.15 Mon 06/04/2020
Logged time =  2:07:59.16 Mon 06/04/2020
Logged time =  2:08:59.17 Mon 06/04/2020
Logged time =  2:09:59.18 Mon 06/04/2020
Logged time =  2:10:59.19 Mon 06/04/2020
Logged time =  2:11:59.10 Mon 06/04/2020
Logged time =  2:12:59.11 Mon 06/04/2020
Logged time =  2:13:59.12 Mon 06/04/2020
Logged time =  2:14:59.13 Mon 06/04/2020
Logged time =  2:15:59.14 Mon 06/04/2020
Logged time =  2:16:59.15 Mon 06/04/2020
Logged time =  2:17:59.16 Mon 06/04/2020
Logged time =  2:18:59.17 Mon 06/04/2020
Logged time =  2:19:59.18 Mon 06/04/2020
Logged time =  2:20:59.19 Mon 06/04/2020
Logged time =  2:21:59.10 Mon 06/04/2020
Logged time =  2:22:59.11 Mon 06/04/2020
Logged time =  2:23:59.12 Mon 06/04/2020
Logged time =  2:24:59.13 Mon 06/04/2020
Logged time =  2:25:59.14 Mon 06/04/2020
Logged time =  2:26:59.15 Mon 06/04/2020
Logged time =  2:27:59.16 Mon 06/04/2020
Logged time =  2:28:59.17 Mon 06/04/2020
Logged time =  2:29:59.17 Mon 06/04/2020
Logged time =  2:30:59.17 Mon 06/04/2020
Logged time =  2:31:59.17 Mon 06/04/2020
Logged time =  2:32:59.17 Mon 06/04/2020
Logged time =  2:33:59.17 Mon 06/04/2020
Logged time =  2:34:59.17 Mon 06/04/2020
Logged time =  2:35:59.17 Mon 06/04/2020
Logged time =  2:36:59.17 Mon 06/04/2020
Logged time =  2:37:59.17 Mon 06/04/2020
Logged time =  2:38:59.17 Mon 06/04/2020
Logged time =  2:39:59.17 Mon 06/04/2020
Logged time =  2:40:59.17 Mon 06/04/2020
Logged time =  2:41:59.18 Mon 06/04/2020
Logged time =  2:42:59.19 Mon 06/04/2020
Logged time =  2:43:59.10 Mon 06/04/2020
Logged time =  2:44:59.11 Mon 06/04/2020
Logged time =  2:45:59.12 Mon 06/04/2020
Logged time =  2:46:59.13 Mon 06/04/2020
Logged time =  2:47:59.14 Mon 06/04/2020
Logged time =  2:48:59.15 Mon 06/04/2020
Logged time =  3:49:27.61 Mon 06/04/2020
Logged time =  3:50:10.82 Mon 06/04/2020
Logged time =  3:50:11.23 Mon 06/04/2020
Logged time =  3:50:11.74 Mon 06/04/2020
Logged time =  3:50:11.95 Mon 06/04/2020


    Test 3 shows time changed by 1 h
    Logged time =  2:49:50.10 Mon 06/04/2020
    Logged time =  2:50:50.10 Mon 06/04/2020
    Logged time =  2:51:50.10 Mon 06/04/2020
    Logged time =  **3:52:17**.66 Mon 06/04/2020
    Logged time =  3:53:17.16 Mon 06/04/2020
    Logged time =  3:54:17.16 Mon 06/04/2020

Не уверен, почему время меняется случайным образом на 1 час, так как оно должно было измениться только на 1 минуту. Нужна помощь, чтобы понять это.

С уважением, Крис

1 Ответ

0 голосов
/ 24 апреля 2020

Несмотря на то, что это не ответ на ваш вопрос, я включил его здесь, чтобы вы могли проверить, есть ли какая-то разница, (так как я не смог правильно отформатировать его в области комментариев) :

@Echo Off
Echo Start time = %TIME% %DATE%
(   For /L %%G In (1,1,70) Do (
        SetLocal EnableDelayedExpansion
        Echo Logged time = !TIME! !DATE!
        EndLocal
        "%__AppDir__%timeout.exe" /T 60 /NoBreak>NUL
    )
)>"logtime.txt"
Echo End time = %TIME% %DATE%
"%__AppDir__%timeout.exe" /T -1
Exit /B


Чтобы попытаться подтвердить, связана ли, как я уже говорил в моих предыдущих комментариях, ваша проблема не с программированием, а с чем-то за его пределами. Я решил предоставить измененную версию моего скрипта, (без изменения его структуры) , чтобы исключить циклическое использование переменной %TIME%. Если он работает как задумано, проблема связана с вашей системой или с перезаписью системной переменной %TIME%.

Попробуйте этот :

<!-- :
@Echo Off
Echo Start time = %TIME% %DATE%
(   For /L %%G In (1, 1, 70) Do (
        "%__AppDir__%cscript.exe" //NoLogo "%~f0?.wsf"
        "%__AppDir__%timeout.exe" /T 60 /NoBreak > NUL
    )
) > "logtime.txt"
Echo End time = %TIME% %DATE%
"%__AppDir__%timeout.exe" -1
Exit /B
-->
<Job><Script Language="VBScript">
Set colItems = GetObject("winmgmts:\\.\root\cimv2").ExecQuery( _
  "Select LocalDateTime From Win32_OperatingSystem")
For Each objItem In colItems
  dtmLocal = objItem.LocalDateTime
  dtMM = Mid(dtmLocal, 5, 2)
  dtDD = Mid(dtmLocal, 7, 2)
  dtYYYY = Left(dtmLocal, 4)
  tmHH = Mid(dtmLocal, 9, 2)
  tmMM = Mid(dtmLocal,11, 2)
  tmSS = Mid(dtmLocal,13, 2)
  tmFF = Right(Round((Mid(dtmLocal,14,5) *100),0),2)
Next
dtS = dtDD & "/" & dtMM & "/" & dtYYYY
tmS = tmHH & ":" & tmMM & ":" & tmSS & "." & tmFF
Wscript.Echo "Logged time = " & tmS  & " " &  dtS
</Script></Job>

Он использует Windows Узел сценариев, чтобы получить не зависящую от локали строку даты и времени, бессмысленно форматирует ее (в более точный формат, не слишком отличающийся от того, который вы предоставили) и печатает ее в файл.

Я оставил время начала и окончания, используя переменную %TIME%, так как она должна дать вам визуальную индикацию любой существенной разницы между ней и первым и последним выводом текстового файла.

...