Batch file 奇数for循环行为

Batch file 奇数for循环行为,batch-file,for-loop,Batch File,For Loop,在64位Dell笔记本电脑上运行Windows 7 Enterprise(标准规格),并尝试编写一个简单的批处理脚本 我不知道下面的循环是怎么回事 我想在名为“ContactUsDates.txt”的文本文件中列出一组日期范围,格式如下: Start Date = 2014-02-26 End Date = 2014-02-27 Filename = 140226 -------------- Start Date = 2014-02-27 End Date = 2014-02-28 Filen

在64位Dell笔记本电脑上运行Windows 7 Enterprise(标准规格),并尝试编写一个简单的批处理脚本

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

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

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
--------------
2014-02-262014-02-27

2014-02-272014-02-28

2014-02-282014-03-01

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

我希望我的输出如下所示:

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
--------------
开始日期=2014年2月26日

结束日期=2014年2月27日

文件名=140226


开始日期=2014年2月27日

结束日期=2014年2月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年2月26日

结束日期=2014年2月27日

文件名=


开始日期=2014年2月27日

结束日期=2014年2月28日

文件名=


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


如果您能帮助我们了解可能发生的事情,我们将不胜感激

你差点就成功了。试试这个:

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

我怀疑它是“dos批处理文件”
DOS
是一种自Windows ME之后就没有使用过的操作系统。如果您将
echo
语句中的
%
替换为
,则您的代码将与编写的代码一样工作。但是使用
for
语句中的
“tokens=1,2*delims=,”
将数据拆分为两个变量更有效。请看下面我的答案。对不起,我仍然把在CMD窗口中运行的任何东西都称为“dos”:)我不编程,也不太了解这些东西,所以请尽我所能!我几乎完成了完全相同的代码的编写^^^谢谢,它运行得非常完美:)现在我有了更酷的工具,如“tokens”和“delims”。