2009-05-06 18 views
9

Chciałbym ustawić zmienną na podstawie liczby wierszy w pliku, które zawierają ciąg znaków.Ustaw zmienną na wynik "Znajdź" w pliku wsadowym

Coś jak:

set isComplete = 0 
%isComplete% = find /c /i "Transfer Complete" "C:\ftp.LOG" 
IF %isComplete% > 0 ECHO "Success" ELSE ECHO "Failure" 

Lub:

set isComplete = 0 
find /c /i "Transfer Complete" "C:\ftp.LOG" | %isComplete% 
IF %isComplete% > 0 ECHO "Success" ELSE ECHO "Failure" 

Żadna z tych opcji nie działa, oczywiście.

Dzięki.

Odpowiedz

13

z linii poleceń

for /f "tokens=3" %f in ('find /c /i "Transfer Complete" "C:\ftp.LOG"') do set isComplete=%f 

ze skryptu wsadowego

for /f "tokens=3" %%f in ('find /c /i "Transfer Complete" "C:\ftp.LOG"') do set isComplete=%%f 
+0

To jest wielki. Jednak powinienem był wspomnieć, że potrzebuję tego do pracy ze ścieżką, która ma przestrzeń. Cytaty nie pomagają. Ugh. Więc ... dla/f "tokeny = 3" %% f in ("znajdź/c/i" Przesyłanie zakończone "" C: \ ścieżka testowa \ ftp.LOG "') ustaw wartość isComplete = %% f ustawia isComplete na "PATH \ FTP.LOG:", gdzie błąd, jak sądzę, jest spowodowany przez spację. – MattH

+0

Należy użyć opcji "usebackq" polecenia for, aby można było wstawić cudzysłowy wokół ścieżki: for/f "usebackq tokeny = 3" %% f in ('find/c/i" Transfer zakończony "" C : \ ścieżka testowa \ ftp.log "') ustaw wartość isComplete %% f –

11

Nie trzeba użyć komendy for; find ustawi ERRORLEVEL do jednej z tych wartości, w oparciu o wyniki:

  • 0, co najmniej jeden mecz został znaleziony.
  • 1, nie znaleziono pasujących wyników.
  • Wystąpił błąd 2 lub więcej.

Ponieważ wygląda po prostu chcesz sprawdzić, czy przeniesienie zakończona, a nie całkowitą liczbę razy pojawia się napis, można zrobić coś takiego:

@echo OFF 

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

Właściwie oczekuję teraz liczby 2 (dwa pliki przesłane). . . więc dwa wystąpienia "Transfer Complete" = Sukces. – MattH

+0

"IF% isComplete%> 0" jest trochę mylące; jest to, co naprawdę chcesz "IF% isComplete% EQU 2"? –