我们如何在 Windows 批处理文件中重命名上个月的最后一天的文件?

How do we rename a file with the last day of previous month in Windows batch files?

我需要编写一个批处理程序,以 DDMMYYY 格式使用上个月最后一天的日期重命名 Excel 文件。 我有一个使用当前日期重命名代码的示例。

ren example.xls example_%DATE:/=%.xls

有没有办法对上个月的最后一天做同样的事情?

提前致谢。

显然你必须计算那个日期。

  1. 从当前日期 (20.12.2021) 开始
  2. 将当前日期更改为 1 (1.12.2021)
  3. 将此日期转换为儒略日 (2459550)
  4. 减去 1 天 (2459549)
  5. 将其转换回公历日期 (30.11.2021)

您还可以从 powershell 获得一些帮助:

@echo off
for /F "delims=" %%i IN ('powershell.exe -Command "(Get-Date -Day 1 -Hour 0 -Minute 0 -Second 0).AddSeconds(-1).ToString('yyyy-MM-dd')"') DO (
   ren "example.xls" "%%i.xls"
)

可以根据需要在 powershell 字符串的末尾更改日期格式,目前为 ("yyyy-MM-dd")

如果您对使用 PowerShell 感到满意,我认为没有任何理由使用 for 循环。你可以一行完成:

%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile "Rename-Item -Path \".\example.xls\" -NewName \"$(((Get-Date -Day 1).AddDays(-1)).ToString('ddMMyyyy')).xls\""

如果你使用正确的公式,这真的很简单:

for /F "tokens=1-3 delims=/" %%a in ("%date%") do (
   set /A "M=1%%b-100,a=^!(M-1),Y=%%c-a,M+=12*a-1,D=30+((M+(M-8>>31)+1)&1)-^!(M-2)*(2-^!(Y%%4)),M+=100"
)
ren example.xls example_%D%%M:~1%%Y%.xls

如果您不使用延迟扩展,请从三个 ! 运算符中删除 ^ 插入符号。

提示:获取此纯批处理解决方案所花费的时间并将其与 PowerShell 解决方案进行比较...