更新:现在它's 2016 I' d使用PowerShell,除非它有一个非常引人注目的向后兼容原因,特别是因为使用 date
的区域设置问题 . 见@ npocmaka的https://stackoverflow.com/a/19799236/8479
什么是Windows命令行语句我可以使用以我可以放入文件名的格式获取当前日期时间?
我想有一个.bat文件,它将目录压缩到一个存档中,并将当前日期和时间作为名称的一部分,例如 Code_2008-10-14_2257.zip
. 有没有简单的方法可以做到这一点,独立于机器的区域设置?
我真的不介意日期格式,理想情况下它是yyyy-mm-dd,但任何简单都可以 .
到目前为止我已经有了这个,在我的机器上给了我 Tue_10_14_2008_230050_91
:
rem Get the datetime in a format that can go in a filename.
set _my_datetime=%date%_%time%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%
rem Now use the timestamp by in a new ZIP file name.
"d:\Program Files\7-Zip\7z.exe" a -r Code_%_my_datetime%.zip Code
我可以忍受这个,但它看起来有点笨重 . 理想情况下,它更简洁,并具有前面提到的格式 .
我正在使用Windows Server 2003和Windows XP Professional . 我不想安装额外的实用程序来实现这一点(虽然我发现有一些可以做很好的日期格式化) .
27 回答
另一种方式(credit):
请注意,我在这里的答案仍然依赖于区域设置确定的日期和月份的顺序 - 不确定如何解决这个问题 .
我注意到o / p做了 not 要求一个区域无关的解决方案 . 我的解决方案是针对英国的 .
这是一个最简单的解决方案,一个单行解决方案,用于批处理文件:
请使用以下脚本在命令行中获取当天:
一个基于
wmic
的函数:Upside: 地区独立 . Downside: 只有系统管理员才能运行wmic.exe .
用法:
这回复了这样一个字符串:
请注意,函数参数是out-Parameters - 也就是说,您必须提供变量名而不是值 .
所有参数都是可选的,因此如果您只想获得年份和月份,则
call:Now Y M
是有效的通话 .我用这个(再次不是地区独立的(英国))
我有类似的问题 . 我从FTP服务器每天自动下载加密文件 . 我想使用gpg解密文件,将文件重命名为当前日期(YYYYMMDD格式)并将解密的文件放入正确部门的文件夹中 .
我经历了几个根据日期重命名文件的建议,并且在我偶然发现这个简单的解决方案之前没有运气 .
它工作得很好(即文件名为“2011-06-14.txt”) .
(Source)
http://sourceforge.net/projects/unxutils/files/
在ZIP文件中查找名为“Date.exe”的内容并将其重命名为“DateFormat.exe”(以避免冲突) .
将它放在Windows system32文件夹中 .
它有很多“日期输出”选项 .
如需帮助,请使用
DateFormat.exe --h
我不确定如何将其输出放入环境变量...使用SET .
简短回答:
答案很长
我知道已经提到了很多方法 . 但是我的方法是将其分解以了解它是如何完成的 . 希望对喜欢一步一步的方法的人有所帮助 .
Matthew Johnson's one-liner solution获得单行日期和时间是雄辩和有用的 .
但是,它需要在批处理文件中进行简单的修改:
这是一种将日期时间排在一行的方法:
在美国,这将输出“yyyy-mm-dd hhmm” . 不同的区域设置将导致不同的%date%输出,但您可以修改令牌顺序 .
如果需要不同的格式,请通过重新排列标记或使用不同(或不使用)分隔符来修改echo语句 .
只需使用此行:
见Windows Batch File (.bat) to get current date in MMDDYYYY format:
如果你喜欢24小时/军用格式的时间,你可以用这个替换第二个FOR行:
如果您希望日期独立于区域日/月顺序,您可以使用“WMIC os GET LocalDateTime”作为源,因为它是按ISO顺序:
不幸的是,这不能免受区域设置的影响,但它可以满足您的需求 .
很棒的东西你可以在Wikipedia上找到 .
生成ISO日期格式的区域独立解决方案:
还有什么可以优化:如果在修改时使用短期内的日期格式,其他进程可能会感到困惑 . 因此,根据现有格式字符串解析输出可能会“更安全” - 但会更复杂
这里是时间部分的类似批处理文件 .
--jeroen
这是我用过的:
如果您想要有关自动备份到7-Zip档案的更多想法,我有一个您可以使用的免费/开放项目或查看想法:http://wittman.org/ziparcy/
给定已知的位置,以功能形式参考 .
ECHOTIMESTAMP
调用显示如何将时间戳记输入变量(在此示例中为DTS
) .并保存到文件,timestamp.bat,这是输出:
区域独立日期时间解析
%DATE%
和dir
命令的输出格式是区域相关的,因此既不健壮也不聪明 . date.exe(UnxUtils的一部分)以任何可思考的格式提供任何日期和时间信息 . 您还可以使用date.exe
从任何文件中提取日期/时间信息 .示例:(在cmd脚本中使用%%而不是%)
date.exe +"%Y-%m-%d"
2009-12-22
date.exe +"%T"
18时55分03秒
date.exe +"%Y%m%d %H%M%S: Any text"
20091222 185503:任何文字
date.exe +"Text: %y/%m/%d-any text-%H.%M"
文字:09/12/22-任何文字-18.55
Command: date.exe +"%m-%d """%H %M %S """"
07-22 "18:55:03"`
参考文件中的日期/时间信息:
date.exe -r c:\file.txt +"The timestamp of file.txt is: %Y-%m-%d %H:%M:%S"
在CMD脚本中使用它来获取年,月,日,时间信息:
在CMD脚本中使用它来获取任何所需格式的时间戳:
从任何参考文件中提取日期/时间信息 .
向文件添加其日期/时间信息:
date.exe是part of the free GNU tools,无需安装 .
注意:将
date.exe
复制到搜索路径中的任何目录可能会导致使用Windows内置date
命令的其他脚本失败 .这是alt.msdos.batch.nt中的一个变体,它可以独立于本地工作 .
把它放在一个文本文件中,例如getDate.cmd
为了使代码工作没有错误消息到stderr,我不得不为%% a,%% b和%% c的变量赋值添加单引号 . 我的语言环境(PT)在循环/解析的一个阶段导致错误,其中“set = 20”之类的东西正在执行 . 引号为赋值语句的左侧产生一个标记(尽管是空的) .
缺点是凌乱的语言环境变量名称:'yy','mm'和'dd' . 但是,嘿,谁在乎!
我使用vMax中的批处理文件更改了the answer,因此它也适用于荷兰语 .
荷兰语 - 我们一直坚持 - 在
%date%
,date/t
和date
中有一些破坏原始批处理文件的变化 .如果有些人也可以针对其他Windows语言环境进行检查,并报告结果,那就太好了 .
如果批处理文件在您的位置失败,请在命令提示符下包含这两个语句的输出:
echo:^|date
date/t
这是您应该从批处理文件获得的输出示例:
以下是修订后的代码,其中包含以下原因:
--jeroen
使用Windows 7,此代码适用于我:
另外两种不依赖于时间设置的方法(均取自:How get data/time independent from localization:) . 并且两者都获得了一周中的一天,并且它们都不需要管理员权限!:
More information about get-date function .
还有三种使用其他Windows脚本语言的方法 . 他们会给你更多的灵活性,例如你可以得到一年中的一周,时间以毫秒为单位,等等 .
.bat
) . 作为Windows Script Host(though can be disabled through the registry it's a rare case)的一部分,JScript在NT及以上的每个系统上都可用:要从批处理文件中使用它:
前四行此代码将为您提供Windows XP Professional及更高版本中可靠的YY DD MM YYYY HH Min Sec变量 .
这不是更简洁,但可能是一种更灵活的方式(credit):