2011-09-30 49 views
7

Mi programa por loteslotes cómo configurar resultado FINDSTR a una variable y deshabilitar la impresión findstr a la consola

FINDSTR /C:"Result Comparison failure" %tmp_result_file% 

que quiero hacer el folloiwng, establecer el resultado del comando anterior a una variable. Si lo encuentra, configure la primera línea en varible o establezca que la línea encontrada para una varible está bien para mí.

también el comando de arriba imprimirá el comando findstr para la consola incluso @echo off. ¿Hay algún método para desactivar la impresión?

muchas gracias


parte de mi escritura, lo que hago comando se ejecuta en cada línea en SourceFile y poner el funcionamiento el resultado en un archivo tmp, a continuación, utilizar encontrar str para encontrar la cadena logrado verifica el resultado de la ejecución.

for /f %%a in (%source_file%) do (
    echo run %%a >> %output_file% 
    call %run_script_command% %%a > %tmp_result_file% 2>&1 
    ::notepad %tmp_result_file% 
     for /f %%i in ('FINDSTR /C:"Result Comparison failure" %tmp_result_file%') do echo %%ixxx 
    echo xx 
) 

muy extraño, el resultado es:

 
    xx 
    Resultxxx 
    xx 

el fondo es que tengo dos artículos en %source_file%, por lo que la carrera fuera de 2 veces.
para el primero, el FINDSTR no puede encontrar nada, por lo que imprima xxx
para la segunda, se encontró una en findstr, pero sólo imprimir "Result" en lugar de "Result Comparison failure", también el XX es impresión antes de resultado. ¡Muy extraño!

Respuesta

2

El primer problema se debe a que acaba de tomar el primer token de FOR. Para resolverlo, tiene dos soluciones, o bien hacerse eco de la línea completa, donde se encuentra la cadena ...

for /f %%i "tokens=*" in ('FINDSTR /C:"Result Comparison Failure" %tmp_result_file%') do echo %%i 

o eco de las tres fichas encontraron

for /f %%i in ('FINDSTR /C:"Result Comparison Failure" %tmp_result_file%') do echo %%i %%j %%k 

el segundo problema, el xx se hizo eco dos veces es porque ejecuta dos veces el comando. El primer xx es el de la primera ejecución, el segundo es de la segunda ejecución. Si desea evitar el segundo, debe usar alguna lógica adicional. Por ejemplo, establecer una variable y luego verificarla. Advertencia, establecer una variable en un ciclo requiere habilitar la expansión retrasada y usar! Xx! sintaxis (ver HELP SET para una explicación detallada)

setlocal enabledelayedexpansion 
... 
set result= 
for /f %%i "tokens=*" in ('FINDSTR /C:"Result Comparison Failure" %tmp_result_file%') do (
    set result=%%i 
) 
if "!result!"=="" ( 
    echo !result! 
) else (
    echo xx 
) 
+1

+ 1, pero ¿por qué no comparar el valor de '%% i' directamente? Como este (en el cuerpo del bucle interno):' IF "%% i" == "" (ECHO xx) ELSE ECHO %% i'. –

+0

sí , tienes razón, esa es una posibilidad ... Reutilicé código manejando múltiples resultados de búsqueda. –

2

Compruebe el comando FOR/F.

for /f %i in ('FINDSTR /C:"Result Comparison failure" %tmp_result_file%') do ... 
+0

cambió a %% i, pero aún no funciona –

+1

Tipo de '/?' para ver todas las opciones. La opción delims parece relevante aquí. Intentaba apuntarlo en la dirección correcta, no para resolver todo su problema por usted. –

+0

Probablemente quiera 'for/f" delims = "%% i in (...' – Gabe

Cuestiones relacionadas