2013-07-05 90 views
-1

我正在嘗試編寫一個批處理文件,該文件將採用一個月份的縮寫,列在文本文件(dates.txt)中,然後將變量month分配給相應的數值當月的價值。但是,該變量沒有設置,我不知道爲什麼。我讀過一些有關循環是罪魁禍首的東西。我不確定這是否是一個因素。在批處理文件中設置變量

for /F "tokens=1,2,3" %%b in (dates.txt) do (
    echo %%b 
    echo %%c 
    echo %%d 

    if %%c==Jan set month=01 
    if %%c==Feb set month=02 
    if %%c==Mar set month=03 
    if %%c==Apr set month=04 
    if %%c==May set month=05 
    if %%c==Jun set month=06 
    if %%c==Jul set month=07 
    if %%c==Aug set month=08 
    if %%c==Sep set month=09 
    if %%c==Oct set month=10 
    if %%c==Nov set month=11 
    if %%c==Dec set month=12 

    echo %%c 
    echo %month% - month 
) 

我已經得到了最初的3個echo報表,以確保我讀正確的數據,對此我。我有最後的echo %month% - month聲明來確保我的變量是設置的,但它不是。

回答

0

您也可以使用陣列來解決這個問題:

@echo off 
setlocal EnableDelayedExpansion 

rem Create the array of numbers based on 3-letter month names 
set number=100 
for %%a in (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) do (
    set /A number+=1 
    set monthNumber[%%a]=!number:~1! 
) 

for /F "tokens=1,2,3" %%b in (dates.txt) do (
    echo %%b 
    echo %%c 
    echo %%d 
    set month=!monthNumber[%%c]! 
) 

echo %month% - month 
3

你需要delayed expansion!variables!

@echo off &setlocal enabledelayedexpansion 
for /F "tokens=1,2,3" %%b in (dates.txt) do (
    echo %%b 
    echo %%c 
    echo %%d 

    if %%c==Jan set month=01 
    if %%c==Feb set month=02 
    if %%c==Mar set month=03 
    if %%c==Apr set month=04 
    if %%c==May set month=05 
    if %%c==Jun set month=06 
    if %%c==Jul set month=07 
    if %%c==Aug set month=08 
    if %%c==Sep set month=09 
    if %%c==Oct set month=10 
    if %%c==Nov set month=11 
    if %%c==Dec set month=12 

    echo %%c 
    echo !month! - month 
) 
+0

等待,請不要介意。謝謝! – hlposts

+0

我試了一下,在這裏工作得很好。 – Endoro

+1

我會確認Endoro的索賠。適合我!也許你省略了'SETLOCAL ENABLEDELAYEDEXPANSION'(我喜歡把它放在一個單獨的行上......這樣,註釋掉@ ECHO來啓用跟蹤並不禁用SETLOCAL)也應該工作它的原始形式,如果你將孤立的左括號移到「echo」之前的行。 – Magoo

0
@ECHO OFF 
SETLOCAL 
SET "month=Jan01Feb02Mar03Apr04May05Jun06Jul07Aug08Sep09Oct10Nov11Dec12" 
FOR /f "tokens=1-3" %%b IN (dates.txt) DO (
ECHO %%c 
CALL SET month=%%month:*%%c=%% 
) 
SET month=%month:~0,2% 
ECHO %month% 
ENDLOCAL 

這裏的另一種方式 - 只爲Endoro已經解決了這個問題不感興趣的緣故。

相關問題