奇怪的for循环行为

时间:2014-04-03 18:50:54

标签: batch-file for-loop

在64位戴尔笔记本电脑(标准规格)上运行Windows 7企业版,并尝试整理一个简单的批处理脚本。

我无法弄清楚下面的循环是怎么回事。

我想遍历一个名为" ContactUsDates.txt"的文本文件中列出的一组日期范围,格式如下:

2014-02-26,2014-02-27

2014-02-27,2014-02-28

2014-02-28,2014-03-01

等...逗号之前的日期将是开始日期,逗号之后的日期将是结束日期。文件名是开始日期的精简版。

我希望我的输出看起来像这样:

开始日期= 2014-02-26

结束日期= 2014-02-27

Filename = 140226


开始日期= 2014-02-27

结束日期= 2014-02-28

Filename = 140227


开始日期= 2014-02-28

结束日期= 2014-02-29

Filename = 140228


等...

这是我目前正在运行的代码:

@echo OFF

setlocal enabledelayedexpansion

for /f %%A in (ContactUsDates.txt) do (

set daterange=%%A

set startdate=!daterange:~0,10!
set enddate=!daterange:~11,10!
set filename=!daterange:~2,2!!daterange:~5,2!!daterange:~8,2!


@echo Start Date = %startdate%
@echo End Date = %enddate% 
@echo Filename = %filename%

@echo --------------

)

我得到的输出有时是空白的:

开始日期=

结束日期=

Filename =


开始日期=

结束日期=

Filename =


但有时我得到开始日期和结束日期,但不是文件名:

开始日期= 2014-02-26

结束日期= 2014-02-27

Filename =


开始日期= 2014-02-27

结束日期= 2014-02-28

Filename =


这是在2个不同命令shell中运行的相同代码。

任何帮助弄清楚可能发生的事情都会非常感激!

1 个答案:

答案 0 :(得分:3)

你几乎拥有它。试试这个:

@echo OFF

setlocal enabledelayedexpansion

for /f "tokens=1,2* delims=," %%A in (ContactUsDates.txt) do (

set startdate=%%A
set enddate=%%B
set filename=!startdate:-=!
set filename=!filename:~2!

echo Start Date = !startdate!
echo End Date = !enddate! 
echo Filename = !filename!

echo --------------

)

endlocal

当我运行它时,输出如下所示:

Start Date = 2014-02-26
End Date = 2014-02-27
Filename = 140226
--------------
Start Date = 2014-02-27
End Date = 2014-02-28
Filename = 140227
--------------
Start Date = 2014-02-28
End Date = 2014-03-01
Filename = 140228
--------------