2009-05-06 21 views
9

Vorrei impostare una variabile in base al numero di righe in un file che contiene una stringa di consegna.Imposta la variabile sul risultato di "Trova" nel file batch

Qualcosa di simile:

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

Oppure:

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

Nessuna di queste opzioni funziona, ovviamente.

Grazie.

risposta

13

dalla riga di comando

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

dal script batch

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

Questo è grande. Tuttavia, avrei dovuto dire che ho bisogno di questo per lavorare con un percorso che ha uno spazio. Le virgolette non sembrano aiutare. Ugh. Quindi ... per/f "token = 3" %% f in ('find/c/i "Trasferimento completato" "C: \ percorso test \ ftp.LOG"') set set isComplete = %% f set isComplete to "PATH \ FTP.LOG:", dove l'errore, immagino, è causato dallo spazio. – MattH

+0

È necessario utilizzare l'opzione "usebackq" del comando for in modo da poter inserire virgolette sul percorso: per/f "usebackq tokens = 3" %% f in ('find/c/i" Transfer completato "" C : \ test path \ ftp.log "') set set isComplete %% f –

11

Non è necessario usare il comando for; find imposterà il ERRORLEVEL a uno di questi valori, in base al risultato: è stato trovato

  • 0, almeno una partita.
  • 1, nessuna corrispondenza trovata.
  • 2 o più, si è verificato un errore.

Poiché sembra che si vuole solo vedere se il trasferimento completato, e non il numero totale di volte in cui compare la stringa, si può fare qualcosa di simile:

@echo OFF 

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

Attualmente mi aspetto un conteggio di 2 (due file trasferiti). . . quindi due occorrenze di "Trasferimento completato" = Successo. – MattH

+0

L'IF% isComplete%> 0' è un po 'confuso allora; è quello che vuoi veramente "IF% isComplete% EQU 2'? –

Problemi correlati