Установите переменную в результат “Поиска” в пакетном файле
-
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
)
Не связан с StackOverflow