为什么它只检索文本文件的最后一行?

时间:2014-06-10 02:57:34

标签: batch-file

我有一些包含多行的文本文件。我试图使用下面的代码阅读文本文件中的所有行,但它只返回每个文本文件的最后一句。

第一个文本文件:

Successful Download
FTP DOWNLOADING
ERROR-20140605CW19

第二个文本文件:

Succesful Download
DisConnected

以下代码用于查找特定关键字,以便在if else中执行某些操作:

@echo off
setlocal EnableDelayedExpansion
REM (
cd C:\Users\310152922\Desktop\AutomatedScript\Scriptlogs\3535-2D\
for /F "tokens=2 delims=:" %%e in ('findstr /B "DisCo ERROR null DOWNLOADING" log_DP_*.txt') do (

   echo %%e    <------- this always return the last line of the text files.
   SET x=%%e
   SET s=!x:~0,5!
   SET ddate=!x:~6,8!
   SET cf=!x:~25,4!
   SET week=!x:~14,5!
   SET ddate2=!x:~17,8!
   SET folder=!x:~13,4!
   SET NS=!x:~4,11!

   REM (
   REM echo(s=!s!
   REM echo(ddate=!ddate!
   REM echo(cf=!cf!
   REM echo(week!week!
   REM echo(ddate2=!ddate2!
   REM )>&2
   IF "!s!" == "DisCo" IF NOT "!cf!" == "null" (
      echo(Downloaded:!ddate2!:3535-2D-!folder!
   )
   IF "!s!" == "DisCo" IF "!cf!" == "null" (
      echo(EmptyFiles:!ddate2!:3535-2D-!folder!
   )
   IF "!s!" == "ERROR" IF NOT "!NS!" == "DOWNLOADING" (
      echo(NoneFolder:!ddate!:3535-2D-!week!
   )
   IF "!s!" == "ERROR" IF "!NS! == "DOWNLOADING" (
          echo(FailedDownload
       )
    )

我需要获得倒数第二句FTP DOWNLOADING所以我能够执行if else语句。

为什么%%e总是只返回文本文件的最后一句?

2 个答案:

答案 0 :(得分:3)

因为findstr /b选项仅匹配该行的开头处的字符串。有关详细信息,请参阅here

DOWNLOADING 在行的开头。 ERROR 是,这就是您找到该特定行的原因。

您要么必须调整所需的内容(例如FTP而不是DOWNLOADING),要么摆脱/b所以它看起来整个行 - 但是,这可能会引起其他后果。

答案 1 :(得分:0)

使用&#34;令牌= 2,*&#34;

这样,每个可能的行(*)中的所有第二个标记都将通过

传递给for body

令牌2为%% e 令牌*为%% f

希望有帮助...