【问题标题】:Incorrect timestamp file generated when run script from a service program从服务程序运行脚本时生成的时间戳文件不正确
【发布时间】:2017-01-31 08:51:02
【问题描述】:

如果我在 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

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

【问题讨论】:

  • 日期和时间值的格式化是一个可配置的项目,控制面板 > 语言小程序。但是这种格式仅适用于您的用户帐户,并且看起来您更改了它,该服务可能使用服务帐户运行。考虑使用另一个帐户运行该服务。或者编写一个程序以你喜欢的方式输出,程序员的解决方案。

标签: batch-file cmd windows-7


【解决方案1】:

为什么?

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

怎么做?

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

使用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 并选择更适合您需要的方法。

【讨论】:

  • FOR的好方法循环命令输出,命令在单独的一行!
猜你喜欢
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
相关资源
最近更新 更多