来自服务程序的 运行 脚本生成的时间戳文件不正确
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 更适合你需要的方法。
如果我 运行 一个脚本,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 更适合你需要的方法。