2010-08-09 90 views
2

计算文件名,我想创建一个环境变量来保存文件名类似:Windows批处理文件 - 从当前日期

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解决方案,那也能工作:-)谢谢!

+1

哪个版本的Windows?日期处理在版本之间往往有所不同。 – 2010-08-09 11:44:24

+1

另外,你可以使用PowerShell?我敢打赌,这会让这更容易。 – 2010-08-09 11:45:40

+0

@Pekka:服务器是Win Server 2008 R2,是的--PowerShell也会工作:-)我需要a)从FTP下载文件,b)解压缩(这是我需要文件名的地方),和c)恢复它到SQL Server – 2010-08-09 15:15:24

回答

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% 

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

或者更短:

set number=02 

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

echo %month_as_text% 

编辑:

约翰内斯提出了第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% 
+1

您可以使用延迟扩展来缩短对'!month_%number%!'的数组访问权限。 – Joey 2010-08-11 21:59:30

+0

@Johannes:我对此并不确定,也找不到快速参考。但是你仍然需要定义数组,这就是为什么我更喜欢第二个(更短)的解决方案。无论如何,我会增加你的消化,谢谢。 – 2010-08-12 07:19:08

+0

是的,第二个选项确实不错:-) - 不幸的是,这只适用于这样一个有限的项目集,因为afaik标记器只允许最多31个标记。 – Joey 2010-08-12 09:19:09

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. 
0

第一个答案是不正确的八月九月。原因是shell将前导零解释为八进制,而08和09不是有效的八进制数。您可以通过运行这个命令很容易看到自己这一点:

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

如果您要更换以上09它也将发生故障08。如果您使用0710,它将起作用。一个工作实现如下:

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% 
相关问题