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

Incorrect timestamp file generated when run script from a service program

如果我 运行 一个脚本,timestamp.cmd,代码如下,在 Windows 7 (cmd.exe):

的命令行上
@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

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

为什么?

Date/time 格式与用户配置绑定。同一系统中的每个用户帐户可以有不同的配置。你的账号和系统服务的账号配置不一样

如何?

使用不同的方法检索日期,select 源始终以已知格式提供 date/time 格式。

使用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 和 select 更适合你需要的方法。