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

时间:2010-08-09 11:43:31

标签: command-line batch-file

我想创建一个环境变量来保存文件名,如:

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”= 8月)?

更新:这需要在Windows 2008 R2服务器上运行,是的,如果有人可以向我展示PowerShell解决方案,那也可以:-)谢谢!

3 个答案:

答案 0 :(得分:2)

这就像查找表:

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%

修改

约翰内斯建议第一版的速记:

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%

答案 1 :(得分:1)

您可以随时手动进行数字到文本的翻译,例如:

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.

答案 2 :(得分:0)

8月和9月的第一个答案是错误的。原因是shell将前导零解释为八进制,而08和09不是有效的八进制数。您可以通过运行此命令轻松地看到这一点:

                String query = "Update PS 
                set ShelfNumber="+edittextshelf+
                "from file.ItemPart PS"+
                "join file.item P on P.id=PS.id"+
                "where P.ItemNumber="+edittextitem;
                PreparedStatement preparedStatement = con.prepareStatement(query);
                preparedStatement.executeUpdate();

如果您将上面的for /f "tokens=08" %a in ("A B C D E F G H I J") do echo %a 替换为08,它也会失败。如果您使用0907,它将有效。工作实施如下:

10