使用批处理脚本重命名上个月的文件

Posted

技术标签:

【中文标题】使用批处理脚本重命名上个月的文件【英文标题】:Rename a file with the previous month using a batch script 【发布时间】:2019-01-10 17:15:31 【问题描述】:

我想使用批处理脚本重命名上个月 + 当前年份的文件。请帮忙!

例如:重命名 c:\Example.txt Example_MMYY.txt

其中 MM = 上个月,YY = 当前年份或 Example_0718.txt

【问题讨论】:

如果月份是 01 - 上个月应该是 12 并且年份也应该更改? 正确!感谢您指出这一点。 【参考方案1】:

试试这个:

 :prevmonthren
setlocal

::argument value
::set "file=%~f1"

::hardcoded value
set "file=testfile.txt"

for %%# in ("%file%") do (
    set "ext=%%~x#"
    set "nam=%%~n#"
)

for /f %%# in ('wMIC Path Win32_LocalTime Get /Format:value') do @for /f %%@ in ("%%#") do @set %%@


set /a prev_month=month-1
if %prev_month% lss 10 set "prev_month=0%prev_month%"
if %month%==1 (
    set "prev_month=12"
    set /a year=year-1
)
set year=%year:~2%
ren %file% %nam%_%prev_month%%year%%ext%


endlocal

您可以对文件位置使用硬编码值或取消注释设置文件位置的第一行(并注释第二行)以使用命令行参数。

【讨论】:

【参考方案2】:

这个问题可以很简单的解决:

@echo off
setlocal

for /F "tokens=1,3 delims=/" %%m in ("%date%") do (
   set /A "MM=1%%m-1, YY=%%n-!(MM-100), MM+=12*!(MM-100)"
)

ren Example.txt Example_%MM:~-2%%YY:~-2%.txt

这个方法假设%date%变量的格式是MM/DD/YYYY。如果不是,只需更改 "tokens=1,3" 选项中的数字即可。

【讨论】:

收到以下错误...无效号码。数字常量可以是十进制 (17)、十六进制 (0x11) 或八进制 (021)。访问被拒绝。按任意键继续 。 . . @tsabsuav,date 变量是区域相关的,所以我们需要知道date 变量的格式是什么来调整tokensdelims 为@987654329 @ 命令。我假设你需要这个:"tokens=2,4 delims=/ " 正如我在答案中所说,该方法假设%date%变量的格式为MM/DD/YYYY。如果您向我们展示echo %date% 的输出,我可以相应地修复代码... @Aacini 谢谢哥们!您更新的代码完美运行!抱歉,我不知道如何在此处发布更新的代码,但您的上述建议有效!【参考方案3】:

如果您可以通过调用 Powershell 来获取日期,您可以简化代码。

for /f "usebackq" %%G in (`powershell "(Get-Date).AddMonths(-1).ToString('MMyy')"`) do set "mmyy=%%G"
rename Example.txt Example_%mmyy%.txt

【讨论】:

@tsabsuav 说它不起作用真的无助于我帮助你。你需要告诉我你收到的错误。 @tsabsuav,我发现了错误。我在FOR 元变量中遗漏了一个百分号。我一直在 cmd 提示符下进行测试。在 cmd 提示符下使用 FOR 命令时,您只使用百分之一符号。您必须在批处理文件中将它们加倍。我忘了把SET 命令中的百分号加倍。

以上是关于使用批处理脚本重命名上个月的文件的主要内容,如果未能解决你的问题,请参考以下文章

使用创建日期复制和重命名文件(批处理脚本)

使用 Windows 批处理脚本重命名目录中的所有文件

使用 Windows 批处理脚本重命名目录中的所有文件

从文件夹名称重命名文件的批处理脚本; “-”的问题

Windows 批处理脚本用它的第一行重命名 PDF 文件(循环可能)?

使用 bash 脚本批量重命名 FTP 服务器上的文件