如何使用bat打印文件名中的月份名称
我想在文件名中使用月份名称。 我从sql server导出数据文件的名称应该使用系统日期,如果月份是3三,那么它应该打印文件名为febact,如果月份是4,那么它应该打印marchact。如何使用bat打印文件名中的月份名称
谢谢, Ravi。
您没有提供您的文件名格式。下面只是批处理文件当前日期的月份转换:
@echo off
setlocal EnableDelayedExpansion
set m=100
for %%m in (January February March April May June July August September October November December) do (
set /A m+=1
set month[!m:~-2!]=%%m
)
rem Change tokens=2 for DD/MM/YYYY date format
for /F "tokens=1 delims=/" %%m in ("%date%") do (
set monthName=!month[%%m]!
)
echo %monthName%
如果你想月份名称具有一定长度(即:3个字母):
@echo off
setlocal EnableDelayedExpansion
for /F "tokens=1 delims=/" %%m in ("%date%") do (
set /A "m=(1%%m%%100-1)*3"
)
set month=JanFebMarAprMayJunJulAugSepOctNovDec
set monthName=!month:~%m%,3!
echo %monthName%
安东尼
恒定长度版本给出错误* 3在这个时候是意想不到的 – 2017-07-24 15:18:08
@MrMysteryGuest:当然是。 'set/A'命令中的表达式必须用引号引起来......我修复了代码 – Aacini 2017-07-24 15:33:16
谢谢。批处理文件的语法很奇怪:) – 2017-07-24 15:37:34
WMIC似乎不能在我的Win XP上运行 - 它不包含在XP Home Edition中。
这不是最优雅的解决方案,但应该工作。
@echo off
rem 0,2 for mm/dd/yyyy or 3,2 for dd/mm/yyyy
set month-num=%date:~3,2%
if %month-num%==01 set mo-name=jan
if %month-num%==02 set mo-name=feb
if %month-num%==03 set mo-name=mar
if %month-num%==04 set mo-name=apr
if %month-num%==05 set mo-name=may
if %month-num%==06 set mo-name=jun
if %month-num%==07 set mo-name=jul
if %month-num%==08 set mo-name=aug
if %month-num%==09 set mo-name=sep
if %month-num%==10 set mo-name=oct
if %month-num%==11 set mo-name=nov
if %month-num%==12 set mo-name=dec
echo build filename using %mo-name%
好位:
@echo off
rem 0,2 for mm/dd/yyyy or 3,2 for dd/mm/yyyy
set month-num=%date:~3,2%
rem remove any leading zero :
IF "%month-num:~0,1%"=="0" SET month-num=%month-num:~1%
FOR /f "tokens=%month-num%" %%a in ("jan feb mar apr may jun jul aug sep oct nov dec") do set mo-name=%%a
echo build filename using %mo-name%
试试这个(希望独立于本地设置):
@echo off &setlocal
for /f "tokens=2*" %%a in ('reg query "HKCU\Control Panel\International" /v sShortDate^|find "REG_SZ"') do set "ssShortDate=%%b"
reg add "HKCU\Control Panel\International" /f /v sShortDate /d "ddd MMM" >nul
set "dowlm=%date%"
reg add "HKCU\Control Panel\International" /f /v sShortDate /d "dd MM yyyy" >nul
set "cdate=%date%"
reg add "HKCU\Control Panel\International" /f /v sShortDate /d "%ssShortDate%" >nul
for /f "tokens=1-2" %%i in ("%dowlm%") do set "dow=%%i"&set "lmonth=%%j"
for /f "tokens=1-3" %%i in ("%cdate%") do set "day=0%%i"&set "month=0%%j"&set "year=%%k"
set "day=%day:~-2%"
set "month=%month:~-2%"
echo.%dow%, %day%.%lmonth%.%year%
endlocal
Pause
在AjV Jsy的帖子上支持,这里是什么我用来为前一个月的名称设置一个变量。我在批处理文件中使用此代码创建一个名为前一个月的新文件夹 - 我将其用于备份和月末自动报告。
@echo off
set Year=%date:~10,4%
set Month=%date:~4,2%
:: This script sets the variable "PrvMonth" to display the name of the previous month.
if %Month%==01 set PrvMonth=December
if %Month%==02 set PrvMonth=January
if %Month%==03 set PrvMonth=February
if %Month%==04 set PrvMonth=March
if %Month%==05 set PrvMonth=April
if %Month%==06 set PrvMonth=May
if %Month%==07 set PrvMonth=June
if %Month%==08 set PrvMonth=July
if %Month%==09 set PrvMonth=August
if %Month%==10 set PrvMonth=September
if %Month%==11 set PrvMonth=October
if %Month%==12 set PrvMonth=November
我知道,这个问题很旧。但是,我不喜欢不必要的循环或多个case if语句,只有一个可以限定。你可能会想,而不是尝试:
setlocal ENABLEDELAYEDEXPANSION
set "mo=%date:~3,2%"
if "%mo:~0,1%"=="0" set "mo=%mo:~1%"
set names=JanFebMarAprMayJunJulAugSepOctNovDec
set /a "pos = 3 * %mo%" - 3
set "ti=!names:~%pos%,3!"
echo %ti%
pause
对于月您将获得1 ... 12,为POS索引0,3 ...... 33到字符串“JanFeb月... ”,并假设它是五月(月 = 5),TI然后将输出:
May
希望它仍然有帮助,如果不是OP,那么别人。
注意:不是区域独立的,你必须知道从哪里挑选你的月份数字。
是的!我是其中一位帮助过的“其他人”。感谢简单/有效的代码想法。正是我在找什么。 – S3DEV 2018-02-19 14:22:32
cls
@ECHO OFF
TITLE PRINT_MONTH NAME
rem To get valuse from local machine
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set year=%dt:~0,4%
set month=%dt:~4,2%
set day=%dt:~6,2%
rem set month name for the corresponding numbers
if %month%==01 set monthname=JANUARY
if %month%==02 set monthname=FEBRUARY
if %month%==03 set monthname=MARCH
if %month%==04 set monthname=APRIL
if %month%==05 set monthname=MAY
if %month%==06 set monthname=JUNE
if %month%==07 set monthname=JULY
if %month%==08 set monthname=AUGUST
if %month%==09 set monthname=SEPTEMBER
if %month%==10 set monthname=OCTOBER
if %month%==11 set monthname=NOVEMBER
if %month%==12 set monthname=DECEMBER
rem print month name
echo %monthname%
我关闭@aacini和他们的答案。我刚绕过第二个FOR循环,直接进入月份代码。
@echo off
setlocal EnableDelayedExpansion
set m=100
for %%m in (January
February
March
April
May
June
July
August
September
October
November
December
) do (
set /a m+=1
set month[!m:~-2!]=%%m
)
set monthNow=%date:~3,3%
set monthNow=%monthNow: =%
set monthName=!month[%monthNow%]!
echo %monthName%
pause
可能[重复](http://*.com/questions/8662432/batch-file-day-month-year-syntax)? – 2013-03-18 04:04:49
你的意思是'02 - > febact'&'03 - > marchact'吗? – Endoro 2013-03-18 05:54:59