2014-04-03 47 views
1

在64位戴尔笔记本电脑上运行Windows 7 Enterprise(标准规格),并试图将简单的批处理脚本放在一起。奇怪的循环行为

我不知道下面的循环是怎么回事。

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

2014-02-26,2014-02-27

2014 -02-27,2014-02-28

2014-02-28,2014-03-01

等等逗号前面日期为起始日期,日期逗号之后将是结束日期。文件名是开始日期的简化版本。

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

开始日期= 2014年2月26日

结束日期= 2014年2月27日

文件名= 140226


开始日期= 2014-02-27

结束日期= 2014-02-28

文件名= 140227


开始日期2014年2月28日=

结束日期= 2014年2月29日

文件名= 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 -------------- 

) 

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

开始日期=

结束日期=

文件名=


开始日期=

结束日期=

文件名=


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

开始日期= 2014-02 -26

结束日期= 2014-02-27

文件名=


开始日期2014年2月27日=

结束日期= 2014年2月28日

文件名=


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

任何帮助找出可能会发生什么将不胜感激!

+2

我怀疑这是一个 'DOS批处理文件'。 'DOS'是一个操作系统,自Windows ME之后就没有被使用过。 –

+0

如果您用'!'替换'echo'语句中的'%',那么您的代码将以书面形式工作。但是在'for'语句中使用''tokens = 1,2 * delims =,''将数据拆分为两个变量会更有效。请参阅下面的答案。 –

+1

对不起,我仍然把任何在CMD窗口中运行的任何东西都叫做“dos”:)我不会编程或者对这些东西了解太多,所以尽我所能! – user3495172

回答

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

我差不多完成了完全相同的代码^^ – Stephan

+0

谢谢,它完美运行:)而且我现在有更多很酷的工具,例如“标记”和“分隔符”。 – user3495172