web-dev-qa-db-ja.com

変数をバッチファイルの「検索」の結果に設定します

与えられた文字列を含むファイルの行数に基づいて変数を設定したいと思います。

何かのようなもの:

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"

明らかに、これらのオプションはどちらも機能しません。

ありがとう。

10
MattH

コマンドラインから

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 
15
Preet Sangha

forコマンドを使用する必要はありません。 findは、結果に基づいてERRORLEVELを次のいずれかの値に設定します。

  • 0、少なくとも1つの一致が見つかりました。
  • 1、一致するものが見つかりませんでした。
  • 2以上、エラーが発生しました。

文字列が表示される合計回数ではなく、転送が完了したかどうかを確認したいだけのように見えるので、次のようにすることができます。

@echo OFF

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