4

I want to use the month name in the file name. i am exporting the data from sql server the name of the file should use the system date if the month is 3 three then it should print the file name as febact,if the month is 4 then it should print marchact.

Thanks, Ravi.

user2172165
  • 107
  • 2
  • 2
  • 5

8 Answers8

8

You have not provided the format of your file name. The Batch file below just converts the month of current date:

@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%

If you want month name have constant length (ie: 3 letters):

@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%

Antonio

Aacini
  • 65,180
  • 12
  • 72
  • 108
7

WMIC doesn't seem to work on my Win XP - it's not included in XP Home edition.

This isn't the most elegant solution, but should work.

@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%

A bit better :

@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%
AjV Jsy
  • 5,799
  • 4
  • 34
  • 30
3

I know, that this question is pretty old. However, I do not like unneccessary loops or multiple case if statements when only one can qualify anyway. You might want to try this instead:

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

For mo you will get 1...12, for pos an index 0,3...33 into the string "JanFeb...Dec", and, assuming it is May (mo=5), ti will then output:

May

Hope it still helps, if not the OP, then someone else.

Note: not locale independent, you must know where from to pick your month digits.

  • 2
    Yep! I'm one of those 'someone elses' that this helped. Thanks for the simple / effective code idea. Exactly what I was looking for. – S3DEV Feb 19 '18 at 14:22
3
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%
Ganesh
  • 31
  • 3
2

I worked off of @aacini and their answer. I just bypassed the second FOR loop and went straight for the month code.

@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
midoriha_senpai
  • 177
  • 1
  • 16
0

Try this (hopefully independent from local settings):

@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
Endoro
  • 37,015
  • 8
  • 50
  • 63
0

Piggy-backing on AjV Jsy's post, here is what I use to set a variable for the name of the previous month. I use this code in a batch file to create a new folder with the name of the previous month - I use this for backups and automated month end reporting.

@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
Aron
  • 765
  • 6
  • 14
0

Or run a powershell command to format the date:

for /f "tokens=*" %%i in ('PowerShell -Command "Get-Date -format 'ddMMMyyyy'"') do echo %%i

Richard Sandoz
  • 327
  • 4
  • 9