我对批处理文件一无所知,我需要自动化一个应用程序。该应用程序有两个字段
- 今天的日期
- 昨天的日期
在批处理文件中,我有应用程序的位置和我的登录信息。
此外,我还需要这两个日期。如何通过批处理文件获取日期?
答案1
在 Microsoft Windows 系统上,您可以使用命令date /t
(该/t
选项可防止命令提示更改日期)或使用echo %date%
显示日期环境变量的内容来获取当前日期。但是,DDD mm/dd/yyyy
如果系统使用美国日期格式显示日期,则这两种方式都会以 的形式显示日期,其中 DDD 是用 3 个字符缩写表示的星期几,例如“Thu”,mm 是用两位数表示的月份,例如“08”表示 8 月,dd 是日期,yyyy 是年份。
C:\>date /t
Thu 08/06/2015
C:\>echo %date%
Thu 08/06/2015
您可以重新格式化存储在环境变量中的日期表示形式%date%
。例如,如果您希望日期采用 yyyymmdd 格式,则可以使用类似下面的命令,其中YYYYMMDD
设置一个变量来保存重新格式化的日期;变量名称可以是任何您喜欢的名称,例如 mydate 等。
C:\>set YYYYMMDD=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%
C:\>echo %YYYYMMDD%
20150806
提取日期字符串元素的子字符串参数的格式为%variable:~startposition,numberofchars%
,因此如果字符串“Thu 08/06/2015”中星期四的“T”位于位置 0,则第 10 个字符是 2015 的“2”,而我想要 4 个字符,即“2015”,因此%DATE:10,4%
将返回这些字符。或者您也可以将第一个数字视为要跳过的字符数,即%variable:~num_chars_to_skip,numberofchars%
。然后我可以附加%DATE:~4,2%
以获取月份的“08”,然后%DATE:~7,2%
提取日期,即“06”,如果日期为 2015 年 8 月 6 日,则在变量中表示%DATE%
为“Thu 08/06/2015”。带有附加链接的参考资料
但是,如果您的批处理文件可能在其他国家/地区的系统上使用,那么如果您要重新格式化日期而不是仅以系统默认的格式显示日期,则可能需要调整除月/日/年之外的其他日期显示样式。如果您发出命令reg query
,则可以看到系统的默认格式。例如:
C:\>reg query "HKCU\Control Panel\International" /v sShortDate
HKEY_CURRENT_USER\Control Panel\International
sShortDate REG_SZ M/d/yyyy
在上面的例子中,我可以看到系统使用的是月/日/年格式。可以使用 查看国家/地区的设置reg query "HKCU\Control Panel\International" /v sCountry
,但如果你知道系统是使用默认日期表示的本地系统,那么这可能不是你需要关心的事情。
有关获取昨天日期的方法,有几篇 Stack Overflow 帖子,包括 DavidPostill 提到的帖子:
答案2
稍微有点 OT,但如果您可以使用 PowerShell 而不是 CMD.EXE,一切都会变得容易得多,例如,您可以使用表达式Get-Date
和UFormat
说明符,如文档中所述这里,以完全按照您的意愿行事。Powershell 还可以更轻松地对日期进行合理的算术运算,例如,它知道 2025 年 1 月 1 日之前的一天不是 2025 年 1 月 0 日。
PowerShell 是至少可追溯到 Windows 7 的 Windows 版本的标准。
示例(此处PS >
是交互式 PowerShell ISE 窗口中的提示):
PS > $oldfile = "backup." + (get-date (get-date).addDays(-1) -UFormat "%Y%m%d")
PS > $newfile = "backup." + (get-date -UFormat "%Y%m%d")
PS > echo $oldfile
backup.20171027
PS > echo $newfile
backup.20171028