2009-05-06 3 views
9

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

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

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

Это здорово. Однако я должен был упомянуть, что мне нужно это, чтобы работать с пустым пространством. Котировки, похоже, не помогают. Тьфу. Итак ... для/f "tokens = 3" %% f in ('find/c/i "Transfer Complete" "C: \ test path \ ftp.LOG"') установить isComplete = %% f устанавливает isComplete в «PATH \ FTP.LOG:», где ошибка, я думаю, вызвана пробелом. – MattH

+0

Вам нужно использовать опцию «usebackq» команды for, чтобы вы могли помещать кавычки по пути: for/f «usebackq tokens = 3» %% f in ('find/c/i" Transfer Complete "" C : \ test path \ ftp.log "') установить 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 (два файла переданы). , , поэтому два появления «Передача завершена» = Успех. – MattH

+0

'IF% isComplete%> 0' немного запутывается; это то, что вы действительно хотите «IF% isComplete% EQU 2»? –

Смежные вопросы