Установите переменную в результат “Поиска” в пакетном файле

StackOverflow https://stackoverflow.com/questions/831122

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

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"

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

Спасибо.

Это было полезно?

Решение

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

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 

Другие советы

Вам не нужно использовать 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
)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top