从服务程序运行脚本时生成的时间戳文件不正确

时间:2017-01-31 08:51:02

标签: batch-file cmd windows-7

如果我在Windows 7(cmd.exe)的命令行上运行脚本timestamp.cmd,代码如下:

@echo off
echo generating timestamp file >>timestamp.txt
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set mydate=%%a%%b%%c)
for /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a%%b)
echo %mydate% > timestamp.txt
echo %mytime%00 >> timestamp.txt

然后我得到输出:

31012017 
084300

但如果我从服务中将其作为命令运行,则输出为:

Tue0131 
0941 AM00

首先,我不明白为什么我会得到这样的输出。其次,我该如何解决?

1 个答案:

答案 0 :(得分:3)

为什么?

日期/时间格式绑定到用户配置。同一系统中的每个用户帐户可以具有不同的配置。您的帐户和系统服务帐户的配置不同。

如何?

使用其他方法检索日期,选择始终以已知格式提供日期/时间格式的来源。

使用robocopy

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "myDate="
    for /f "tokens=1-6 delims=:/ " %%a in ('
        robocopy "|" . /njh
    ') do if not defined myDate (
        set "myDate=%%c%%b%%a"
        set "myTime=%%d%%e%%f"
    )

    >"timestamp.txt" (
        echo %myDate%
        echo %myTime%
    )

使用wmic

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "tokens=2 delims==." %%a in ('
        wmic os get localdatetime /format:list
    ') do set "myDate=%%a"

    set "myTime=%myDate:~-6%"
    set "myDate=%myDate:~6,2%%myDate:~4,2%%myDate:~0,4%"

    >"timestamp.txt" (
        echo %myDate%
        echo %myTime%
    )

或......

您应该查看this answer并选择更适合您需求的方法。