在批处理文件中获取日期

在批处理文件中获取日期

我对批处理文件一无所知,我需要自动化一个应用程序。该应用程序有两个字段

  1. 今天的日期
  2. 昨天的日期

在批处理文件中,我有应用程序的位置和我的登录信息。
此外,我还需要这两个日期。如何通过批处理文件获取日期?

答案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 提到的帖子:

如何在批处理文件中获取昨天的日期?

如何在 DOS 中获取昨天的日期

dos 批处理编程:如何获取并显示昨天的日期

答案2

稍微有点 OT,但如果您可以使用 PowerShell 而不是 CMD.EXE,一切都会变得容易得多,例如,您可以使用表达式Get-DateUFormat说明符,如文档中所述这里,以完全按照您的意愿行事。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

相关内容