我有一些包含多行的文本文件。我试图使用下面的代码阅读文本文件中的所有行,但它只返回每个文本文件的最后一句。
第一个文本文件:
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
总是只返回文本文件的最后一句?
答案 0 :(得分:3)
因为findstr /b
选项仅匹配该行的开头处的字符串。有关详细信息,请参阅here。
DOWNLOADING
不在行的开头。 ERROR
是,这就是您找到该特定行的原因。
您要么必须调整所需的内容(例如FTP
而不是DOWNLOADING
),要么摆脱/b
所以它看起来整个行 - 但是,这可能会引起其他后果。
答案 1 :(得分:0)
使用&#34;令牌= 2,*&#34;
这样,每个可能的行(*)中的所有第二个标记都将通过
传递给for body令牌2为%% e 令牌*为%% f
希望有帮助...