如何从bat文件

时间:2017-07-15 19:44:45

标签: batch-file time output

我正在运行一个小的.bat脚本,将系统时间输出到文本文件,然后导入到OBS。然而,它正在使用的项目需要将时间显示在中央时间而不是东部(我的时区)。是否可以在不更改计算机时钟的时区的情况下更改输出时区?

:loop

time /T > C:\Users\Brennan\Desktop\time\time.txt

time /T

timeout /t 15

goto loop

2 个答案:

答案 0 :(得分:1)

命令wmic path win32_utctime get输出UTF-16 Little Endian编码:

Day  DayOfWeek  Hour  Milliseconds  Minute  Month  Quarter  Second  WeekInMonth  Year
16   0          11                  12      7      3        19      4            2017

此输出可以使用命令 FOR 进行解析,并以国际日期/时间格式YYYY-MM-DD HH:mm:ss与命令 SET 连接到UTC日期/时间字符串。< / p>

@echo off
for /F "skip=1 tokens=1,3,4,5,7,9" %%A in ('%SystemRoot%\System32\wbem\wmic.exe path win32_utctime get') do (
    set "Day=0%%A"
    set "Hour=0%%B"
    set "Minute=0%%C"
    set "Month=0%%D"
    set "Second=0%%E"
    set "Year=%%F"
    goto BuildDateTime
)

:BuildDateTime
set "DateTimeUTC=%Year%-%Month:~-2%-%Day:~-2% %Hour:~-2%:%Minute:~-2%:%Second:~-2%"
echo UTC date/time is: %DateTimeUTC%

上面发布的数据的批处理文件的输出是:

UTC date/time is: 2017-07-16 11:12:19

也可以修改代码以获得UTC时间:

@echo off
for /F "skip=1 tokens=3,4,7" %%A in ('%SystemRoot%\System32\wbem\wmic.exe path win32_utctime get') do (
    set "Hour=0%%A"
    set "Minute=0%%B"
    set "Second=0%%C"
    goto BuildTime
)

:BuildTime
set "TimeUTC=%Hour:~-2%:%Minute:~-2%:%Second:~-2%"
echo UTC time is: %TimeUTC%

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • echo /?
  • for /?
  • set /?
  • wmic /?
  • wmic path /?
  • wmic path win32_utctime /?
  • wmic path win32_utctime get /?

答案 1 :(得分:0)

可以通过tzutil设置区域,但它是全局(系统范围)更改 - setlocal命令不会对其进行本地化。以下将暂时更改所需的区域,方法是保存并恢复它:

for /f "delims=" %%z in ('tzutil /g') do (
  rem set desired zone
  tzutil /s "Central Standard Time"

  time /T > C:\Users\Brennan\Desktop\time\time.txt

  rem restore original zone
  tzutil /s "%%z"
)

请注意,更改是系统范围的,因此tzutil调用系统时钟之间的时间段会发生变化。如果脚本在tzutil调用之间中止,系统时区将保持不变。