-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
)

echo正しいデータを読み取っていることを確認するための最初の 3 つのステートメントがあります。echo %month% - month変数が設定されていることを確認する最後のステートメントがありますが、そうではありません。

4

3 に答える 3

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
)
于 2013-07-05T18:00:01.333 に答える
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
于 2013-07-05T20:40:57.993 に答える