Command line Windows批处理文件-从当前日期计算文件名
我想创建一个环境变量来保存文件名,例如:Command line Windows批处理文件-从当前日期计算文件名,command-line,batch-file,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”=August) 更新:这需要在W
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)
更新:这需要在Windows 2008 R2服务器上运行,是的,如果有人能向我展示一个PowerShell解决方案,那也可以:-)谢谢 您始终可以手动进行数字到文本的翻译,如:
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.
这类似于查找表:
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%
编辑: 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%
第一个答案在八月和九月是不正确的。原因是shell将前导零解释为八进制,08和09不是有效的八进制数。通过运行以下命令,您可以轻松看到这一点:
for /f "tokens=08" %a in ("A B C D E F G H I J") do echo %a
如果用09
替换上面的08
,它也会失败。如果您使用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%
哪个版本的Windows?不同版本的数据处理往往不同。此外,您可以使用PowerShell吗?我打赌这会使这更容易。@Pekka:Server是Win Server 2008 R2,是的-Powershell也可以工作:-)我需要a)从FTP下载一个文件,b)解压缩它(这是我需要文件名的地方),c)将它还原到SQL Server for Powershell此链接可能有助于@Pekka:Date processing in batch不存在。自NT4以来,语言没有太大变化。您可以使用延迟扩展来缩短对
的数组访问!月份%number%代码>@Johannes:我对此不确定,也找不到快速参考。但是您仍然需要定义数组,这就是为什么我更喜欢第二个(较短的)解决方案。无论如何,我会添加您的建议,谢谢。是的,第二个选项确实不错:-)-遗憾的是,这只适用于如此有限的一组项目,因为afaik标记器最多只允许31个标记。谢谢您的回答!帮助我离目标又近了一大步!