2009-05-06 11 views
9

与えられた文字列を含むファイルの行数に基づいて変数を設定したいと思います。以下のような変数をバッチファイルの "Find"の結果に設定する

何か:

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 

バッチスクリプト

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 "転送完了" "C:\テストパス\ ftp.LOG"')doComplete = %% f は、isCompleteを "PATH \ FTP.LOG:"に設定します。ここでは、エラーはスペースに起因すると考えられます。 – MattH

+0

パスの前後に引用符を付けるためには、forコマンドの "usebackq"オプションを使用する必要があります。for/f "usebackq tokens = 3" %% f in( 'find/c/i" :\ test path \ ftp.log ")do set isComplete %% f –

11

からあなたはforコマンドを使用する必要はありません。 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 
) 
+0

実際に私は現在2(2つのファイルが転送された)の数を期待しています。 。 。 "Transfer Complete" =成功の2回の出現です。 – MattH

+0

'IF%isComplete%> 0'はちょっと混乱します。 'IF%isComplete%EQU 2'が本当に欲しいものですか? –

関連する問題