2013-03-18 72 views
2

我想在文件名中使用月份名稱。 我從sql server導出數據文件的名稱應該使用系統日期,如果月份是3三,那麼它應該打印文件名爲febact,如果月份是4,那麼它應該打印marchact。如何使用bat打印文件名中的月份名稱

謝謝, Ravi。

+0

可能[重複](http://stackoverflow.com/questions/8662432/batch-file-day-month-year-syntax)? – 2013-03-18 04:04:49

+0

你的意思是'02 - > febact'&'03 - > marchact'嗎? – Endoro 2013-03-18 05:54:59

回答

5

您沒有提供您的文件名格式。下面只是批處理文件當前日期的月份轉換:

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

安東尼

+0

恆定長度版本給出錯誤* 3在這個時候是意想不到的 – 2017-07-24 15:18:08

+0

@MrMysteryGuest:當然是。 'set/A'命令中的表達式必須用引號引起來......我修復了代碼 – Aacini 2017-07-24 15:33:16

+0

謝謝。批處理文件的語法很奇怪:) – 2017-07-24 15:37:34

4

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

試試這個(希望獨立於本地設置):

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

在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 
1

我知道,這個問題很舊。但是,我不喜歡不必要的循環或多個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,那麼別人。

注意:不是區域獨立的,你必須知道從哪裏挑選你的月份數字。

+1

是的!我是其中一位幫助過的「其他人」。感謝簡單/有效的代碼想法。正是我在找什麼。 – S3DEV 2018-02-19 14:22:32

0
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% 
+3

您能不能請添加一些解釋,以便將來的用戶更好地理解您的解決方案。 – JensS 2017-10-06 11:28:01

+0

@JensS可以嗎? – Ganesh 2017-10-09 13:41:27

0

我關閉@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 
相關問題