我有一个非常简单的批处理文件
@SET isodt=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME::=-%
DatabaseCleansing.Process.exe > output\output_%isodt%.txt
手动运行时会创建类似
的文件名output_2016-06-09_23-29-47.44.txt
但是,当Windows Scheduler自动运行时,它会创建如下文件名:
output_2016-06-10 _
两种情况下文件的内容都是正确的。 我猜错了什么?
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL EnableExtensions
rem get CIM_DATETIME
for /f "tokens=2 delims==" %%G in (
'wmic OS get localdatetime /value') do set "ldt=%%G"
rem simplified format yyyymmddHHMMSS.mm e.g. 20160610160046.36
set "isodt=%ldt:~0,17%"
echo simplified format yyyymmddHHMMSS.mm %isodt%
rem modified ISO format yyyy-mm-dd_HH-MM-SS.mm e.g. 2016-06-10_16-00-46.36
set "isodt=%ldt:~0,4%-%ldt:~4,2%-%ldt:~6,2%_%ldt:~8,2%-%ldt:~10,2%-%ldt:~12,5%"
echo modified ISO format yyyy-mm-dd_HH-MM-SS.mm %isodt%
rem use quotes around the output file (thanks for the thought, Stephan)
DatabaseCleansing.Process.exe > "output\output_%isodt%.txt"
解释:如果在10:00:00
和23:59:59
之间运行,您的脚本将按预期工作。但是,%time%
变量在00:00:00
和09:59:59
之间包含前导空格。
尽管有下一次格式设置,但仍会出现这种情况
==> reg query "HKCU\Control Panel\International" | findstr /I "sTimeFormat sShortTime"
sTimeFormat REG_SZ HH:mm:ss
sShortTime REG_SZ HH:mm
虽然HH
应该显示带有前导零的小时;比较Change the display of dates, times, currency, and measurements文章所说的内容:
选择要使用的日期和时间格式。 Windows使用 以下符号用于指定日期和时间的显示方式:
Time notations Displays -------------- -------- h Hour (hh displays the hour with a leading zero) m Minute (mm displays the minute with a leading zero) s Second (ss displays the second with a leading zero) h/H 12 or 24 hour time display
使用
@SET "isodt=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME::=-%"
@SET "isodt=%isodt: =0%"
或更好,从区域设置 CIM_DATETIME yyyymmddHHMMSS.mmmmmmsUUU
format获取%isodt%
变量。例如,您可以修改next code snippet以添加连字符和下划线:
rem obtain %datetime% variable in locale independent yyyymmddHHMMSS format
for /f "tokens=2 delims==" %%G in (
'wmic OS get localdatetime /value') do set "datetime=%%G"
set "isodt=%datetime:~0,17%"
此外,SET "isodt=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME::=-%"
命令可以失败以及在下一个短日期格式设置下返回. 20- 0-10_15-22-11,63
,该设置默认为我的Windows 8.1原始系统区域设置默认预安装为空格据称, 应该在完全停止后通过错误解释Czech language grammar rules:
==> reg query "HKCU\Control Panel\International" /V sShortDate
HKEY_CURRENT_USER\Control Panel\International
sShortDate REG_SZ dd. MM. yyyy