【问题标题】:Time changing randomly on Windows 7 while batch file is running批处理文件运行时在 Windows 7 上随机更改时间
【发布时间】:2020-04-24 09:34:03
【问题描述】:

我的电脑上的时间一直在随机变化。 操作系统为 Windows 7 Professional Service Pack 1 时区:UTC 都柏林、爱丁堡、里斯本、伦敦 正如预期的那样,时间在 2020 年 3 月 29 日发生了变化。 已选中夏令时。

    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 分钟。需要帮助来解决这个问题。

问候, 克里斯

【问题讨论】:

  • 您提供的代码不应跳过一小时,因此我无法复制您的问题。没有复制您概述的行为的编程问题。根据您在代码中提供的内容和输出文件的 sn-p,如果您要发布整个输出文件(即单个会话中的所有 70 个并发行),也许会对我们有所帮助。正如您使用 >> 一样,这些行可能来自 2 个会话。
  • 是否有可能在您提供的代码之外修改了%TIME% 变量?
  • 测试 2 的完整日志,一旦时间改变,我就停止了批处理运行。批处理文件仅跟踪每分钟的时间更改,因为更改是随机的,因此更易于监控。无变量变化
  • 请再次执行测试,仅使用我在答案区域发布的脚本。请不要以任何方式修改脚本或您的环境。然后提供反馈,包括输出到控制台的前两行和logtime.txt的所有70行。

标签: windows batch-file time


【解决方案1】:

虽然这不是对您问题的答案,但我已将其包含在此处,供您测试并查看它是否有任何不同,(因为我无法在评论区正确格式化)

@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


要尝试确认,正如我在之前的 cmets 中所述,您的问题是否与编程无关,而是在编程之外。我决定在我的脚本上提供一个修改版本,(不改变其结构),以省略 %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 Scripting Host 来检索不依赖于语言环境的日期和时间字符串,毫无意义地对其进行格式化(以更简洁的格式,与您提供的格式不太相似),并将其打印到文件中。

我已经使用%TIME% 变量留下了开始和结束时间,因为它应该可以直观地指示它与第一个和最后一个文本文件输出之间的任何主要区别。

【讨论】:

  • 虽然我很感谢@Chris 的反馈,但我对您如何在我发布答案后仅 41.5 分钟后运行脚本并回发感到有些困惑,当脚本需要 70 分钟才能运行。考虑到您提供的时区,我什至在一小时后发布了它,所以在测试中您甚至没有看到在一小时内发生了什么翻滚!如果在正确测试后,您不再有报告的问题,请随时将我的答案标记为已接受;谢谢。
  • 脚本在完成后完美显示开始和结束时间。输出是相同的,但不幸的是问题仍然存在。这是输出的 sn-p 记录时间 = 1:55:29.64 Mon 06/04/2020 记录时间 = 1:56:29.15 Mon 06/04/2020 记录时间 = 1:57:29.16 Mon 06/04/ 2020 ... 必须减少字符.. 记录时间 = 2:00:29.19 Mon 06/04/2020 记录时间 = 2:01:29.11 Mon 06/04/2020 记录时间 = 2:02:29.12 Mon 06/04 /2020 记录时间 = 2:03:29.13 Mon 06/04/2020 记录时间 = 3:03:46.66 Mon 06/04/2020 记录时间 = 3:04:46.17 Mon 06/04/2020
  • @Chris,您的 %TIME% 变量用于其默认格式似乎有些奇怪。在您确定为您的时区,使用我提供的脚本,我希望您的 %TIME% 变量输出 Logged time = 14:03:29.13 Fri 25/04/2020 但您的显然使用 Logged time = 2:03:29.13 Mon 06/04/2020 并且没有 AM/@ 987654332@ 指定。您的系统似乎不知道日期或时间到底是什么。无论如何,我添加了另一个可以测试的批处理脚本,看看我们是否可以缩小您的问题范围。
  • 感谢您提供批处理文件,这是输出:开始时间 = 1:56:25.58 Mon 06/04/2020,记录时间 = 02:24:25.17 06/04/2020 记录时间 = 03 :24:53.69 06/04/2020 结束时间 = 4:05:53.10 Mon 06/04/2020 我安装了新的 Windows 7 pro 时间更改不正确。从 Bios 时间中运行测试从未更改,未来日期和时间没有问题.仍然不确定这里的问题。
  • 您遇到的问题超出了我的回答范围,我的代码已经过测试,没有出现任何问题。不幸的是,这里的站点成员不能作为远程硬件和软件助手进行操作,因此除非您在提供有关您的问题 PC 的更多信息方面取得重大进展,否则我们无法为您提供进一步的帮助。据我们所知,您有一个或多个正在修改时间的流程/策略。请将您的问题限制在此处,仅针对代码,并使用其他站点进行软件和硬件诊断。
猜你喜欢
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多