如何在批处理脚本中将数字月份转换为指定命名格式(如11转Nov)
解决批处理中数字月份转英文缩写的问题
要实现将数字月份(比如11)转换成英文缩写(Nov),你可以在批处理脚本中创建月份映射表,结合延迟扩展来动态获取对应缩写。以下是修改后的完整脚本和关键步骤解释:
修改后的完整脚本
@echo off setlocal enabledelayedexpansion :: 定义数字月份到英文缩写的映射 set "month_01=Jan" set "month_02=Feb" set "month_03=Mar" set "month_04=Apr" set "month_05=May" set "month_06=Jun" set "month_07=Jul" set "month_08=Aug" set "month_09=Sep" set "month_10=Oct" set "month_11=Nov" set "month_12=Dec" :: 获取系统日期并拆分年/月/日 for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x set today=%MyDate:~0,4%-%MyDate:~4,2%-%MyDate:~6,2% set "_year=%MyDate:~0,4%" set "_month=%MyDate:~4,2%" set "_day=%MyDate:~6,2%" :: 根据数字月份获取对应的英文缩写 set "month_abbr=!month_%_month%!" :: 执行重命名操作 REN "C:\Year 2020\Oct'2020\Data_Sept'2020.xlsx" "Data_!month_abbr!'!_year!.xlsx"
关键步骤说明
启用延迟扩展:
加入setlocal enabledelayedexpansion是为了支持动态变量拼接——当我们需要用_month的值(比如11)来拼接变量名month_11时,延迟扩展允许我们用!符号读取动态生成的变量值,而不是提前解析的%符号。创建月份映射表:
我们为每个两位数字的月份定义对应的缩写变量(比如month_11=Nov),这样就能通过!month_%_month%!快速匹配到对应的缩写。替换数字月份为缩写:
在重命名命令中,用!month_abbr!替换原来的%_month%,就能生成你需要的Data_Nov'2020.xlsx格式。
替代方案:用IF判断实现
如果你觉得映射表不够直观,也可以用连续的IF判断来匹配月份:
:: 替代方式:逐个判断数字月份 if "%_month%"=="01" set "month_abbr=Jan" if "%_month%"=="02" set "month_abbr=Feb" if "%_month%"=="03" set "month_abbr=Mar" if "%_month%"=="04" set "month_abbr=Apr" if "%_month%"=="05" set "month_abbr=May" if "%_month%"=="06" set "month_abbr=Jun" if "%_month%"=="07" set "month_abbr=Jul" if "%_month%"=="08" set "month_abbr=Aug" if "%_month%"=="09" set "month_abbr=Sep" if "%_month%"=="10" set "month_abbr=Oct" if "%_month%"=="11" set "month_abbr=Nov" if "%_month%"=="12" set "month_abbr=Dec"
这种方式逻辑更直白,但代码量会稍多一些,两种方式都能实现你的需求。
内容的提问来源于stack exchange,提问作者Stunner Dew
相关产品推荐
相关产品推荐

