Установить переменную для результата «Найти» в пакетном файле - PullRequest
10 голосов
/ 06 мая 2009

Я хотел бы установить переменную в зависимости от количества строк в файле, которые содержат заданную строку.

Что-то вроде:

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"

Очевидно, что ни один из этих вариантов не работает.

Спасибо.

Ответы [ 2 ]

15 голосов
/ 06 мая 2009

из командной строки

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 
12 голосов
/ 07 мая 2009

Вам не нужно использовать команду 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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...