【问题标题】:Change folder name from YYYYMMM to MMMM YYYY将文件夹名称从 YYYYMMM 更改为 MMMM YYYY
【发布时间】:2021-03-20 11:21:09
【问题描述】:

我需要一个可以将文件夹名称从 YYYYMMM 重命名为 MMMM YYYY 的批处理

例子:

2019JAN to January 2019
2019FEB to February 2019
etc...

我下面的批次只能从YYYYMMM 重命名为MMMYYYY。感谢有人可以帮助扩展我的代码并实现所需的输出。谢谢。

@echo off
setlocal enableDelayedExpansion
for /d %%F in (*) do (
  set "folder=%%F"
  echo ren !folder! "!folder:~-3!!folder:~0,4!"
)

【问题讨论】:

    标签: batch-file directory rename


    【解决方案1】:

    文件夹重命名任务可以通过:

    @echo off
    setlocal EnableExtensions EnableDelayedExpansion
    set "JAN=January"
    set "FEB=February"
    set "MAR=March"
    set "APR=April"
    set "MAY=May"
    set "JUN=June"
    set "JUL=July"
    set "AUG=August"
    set "SEP=September"
    set "OCT=October"
    set "NOV=November"
    set "DEC=December"
    for /D %%I in (20*) do (
        set "FolderName=%%I"
        call ren "%%I" "%%!FolderName:~4!%% !FolderName:~0,4!"
    )
    endlocal
    

    yyyy-MM 格式的文件夹名称会更好,因为按名称排序的具有该名称的文件夹也按正确的时间顺序列出。

    @echo off
    setlocal EnableExtensions EnableDelayedExpansion
    set "JAN=01"
    set "FEB=02"
    set "MAR=03"
    set "APR=04"
    set "MAY=05"
    set "JUN=06"
    set "JUL=07"
    set "AUG=08"
    set "SEP=09"
    set "OCT=10"
    set "NOV=11"
    set "DEC=12"
    for /D %%I in (20*) do (
        set "FolderName=%%I"
        call ren "%%I" "!FolderName:~0,4!-%%!FolderName:~4!%%"
    )
    endlocal
    

    对于批处理文件文件夹中所有子文件夹的递归重命名,在文件夹名称中使用四位数字年份和三个字符缩写月份,应修改 FOR 循环到:

    for /F "delims=" %%I in ('dir "%~dp020*" /AD /B /S 2^>nul ^| %SystemRoot%\System32\findstr.exe /I /R "\\20[0123456789][0123456789][ADFJMNOS][ACEOPU][BCGLNPRTVY]$"') do (
        set "FolderName=%%~nxI"
        call ren "%%I" "%%!FolderName:~4!%% !FolderName:~0,4!"
    )
    

    正则表达式不能完美避免误报匹配,即匹配的也可以是以20[0-9][0-9] 开头的文件夹,但接下来的三个字符不完全是十二个月的缩写之一。但在这种情况下,这应该不是问题。

    要了解所使用的命令及其工作原理,请打开command prompt 窗口,在那里执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

    • dir /?
    • call /?
    • echo /?
    • endlocal /?
    • findstr /?
    • for /?
    • ren /?
    • set /?
    • setlocal /?

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      相关资源
      最近更新 更多