2009-05-06 82 views
9

我想根据包含给定字符串的文件中的行数设置变量。将变量设置为批处理文件中的“查找”结果

喜欢的东西:

set isComplete = 0 
%isComplete% = find /c /i "Transfer Complete" "C:\ftp.LOG" 
IF %isComplete% > 0 ECHO "Success" ELSE ECHO "Failure" 

或者:

set isComplete = 0 
find /c /i "Transfer Complete" "C:\ftp.LOG" | %isComplete% 
IF %isComplete% > 0 ECHO "Success" ELSE ECHO "Failure" 

既不这些选项工作,效果显着。

谢谢。

回答

13

从批处理脚本

for /f "tokens=3" %%f in ('find /c /i "Transfer Complete" "C:\ftp.LOG"') do set isComplete=%%f 
+0

这是伟大的。但是,我应该提到,我需要这种方式来处理有空间的路径。引号似乎没有帮助。啊。所以... for/f“tokens = 3”%% f in('find/c/i“Transfer Complete”“C:\ test path \ ftp.LOG”')do set isComplete = %% f sets isComplete to“PATH \ FTP.LOG:”,其中的错误,我猜,是由空间造成的。 – MattH 2009-05-06 20:45:27

+0

您需要使用for命令的“usebackq”选项,以便您可以将路径引用到路径中:for/f“usebackq tokens = 3”%% f in(`find/c/i“Transfer Complete”“C :\ test path \ ftp.log“`)do set isComplete %% f – 2009-05-07 00:21:50

11

你并不需要使用for命令在命令行

for /f "tokens=3" %f in ('find /c /i "Transfer Complete" "C:\ftp.LOG"') do set isComplete=%f 

; find将设置ERRORLEVEL这些值中的一个,基于该结果:

  • 0时,至少一个匹配的结果。
  • 1,未找到匹配项。
  • 2个或更多,发生错误。

因为它看起来像你只是想看看是否传输完毕的,而不是次出现的字符串的总数,你可以做这样的事情:

@echo OFF 

@find /c /i "Transfer Complete" "C:\test path\ftp.LOG" > NUL 
if %ERRORLEVEL% EQU 0 (
    @echo Success 
) else (
    @echo Failure 
) 
相关问题