-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陈述,以确保我正在阅读正确的数据,我就是。我有最后一条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
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 解决了问题。

于 2013-07-05T18:22:34.113 回答
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 回答