代码之家  ›  专栏  ›  技术社区  ›  marc_s

Windows批处理文件-从当前日期计算文件名

  •  2
  • marc_s  · 技术社区  · 13 年前

    PREFIX-2010-AUG-09.zip
    

    如果我用这样的东西,我可以接近:

    SET filename=PREFIX-%date:~-4,4%-%date:~-7,2%-%date:~0,2%.zip
    

    结果:

    PREFIX-2010-08-09.zip
    

    但是在这个例子中,我得到的月份是两位数(08)。

    在Windows批处理文件中,有什么简单的技巧可以从数字月份(例如08表示“AUG”=August)中获得三个字母的月份缩写吗??

    更新:

    3 回复  |  直到 13 年前
        1
  •  2
  •   Frank Bollack    13 年前

    这类似于一个查找表:

    set month_01=JAN
    set month_02=FEB
    set month_03=MAR
    @rem ...
    
    set number=02
    
    for %%a in (month_%number%) do call set month_as_text=%%%%a%%
    
    echo %month_as_text%
    

    %number% for 循环用于取消对匹配变量名的引用。

    甚至更短:

    set number=02
    
    for /f "tokens=%number%" %%m in ("JAN FEB MAR APR ...") do set month_as_text=%m
    
    echo %month_as_text%
    

    编辑:

    Johannes建议对第1版进行速记:

    set month_01=JAN
    set month_02=FEB
    set month_03=MAR
    @rem ...
    
    set number=02
    
    setlocal enabledelayedexpansion
    
    set month_as_text=!month_%number%!    
    
    echo %month_as_text%
    
        2
  •  1
  •   Dev F    13 年前

    你总是可以手工翻译数字到文本,比如:

    if %MM%==01 set MM=Jan
    if %MM%==02 set MM=Feb
    if %MM%==03 set MM=Mar
    if %MM%==04 set MM=Apr
    etc.
    
        3
  •  0
  •   ngreen    7 年前

    for /f "tokens=08" %a in ("A B C D E F G H I J") do echo %a
    

    如果你更换 08 上面有 09 它也会失败。如果你使用 07 10

    months=JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
    :: get the month as a 2-digit number
    set number=%date:~4,2%
    :: remove leading zero
    for /f "tokens=* delims=0" %%a in ("%number%") do set number=%%a
    :: index into array to get month name
    for /f "tokens=%number%" %%m in ("%months%") do set month_as_text=%%m
    :: print month name
    echo %month_as_text%