我们如何在 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
有没有办法对上个月的最后一天做同样的事情?
提前致谢。
显然你必须计算那个日期。
- 从当前日期 (20.12.2021) 开始
- 将当前日期更改为 1 (1.12.2021)
- 将此日期转换为儒略日 (2459550)
- 减去 1 天 (2459549)
- 将其转换回公历日期 (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 解决方案进行比较...
我需要编写一个批处理程序,以 DDMMYYY 格式使用上个月最后一天的日期重命名 Excel 文件。 我有一个使用当前日期重命名代码的示例。
ren example.xls example_%DATE:/=%.xls
有没有办法对上个月的最后一天做同样的事情?
提前致谢。
显然你必须计算那个日期。
- 从当前日期 (20.12.2021) 开始
- 将当前日期更改为 1 (1.12.2021)
- 将此日期转换为儒略日 (2459550)
- 减去 1 天 (2459549)
- 将其转换回公历日期 (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 解决方案进行比较...