2011-07-07 15 views

Respuesta

4

No es que yo sepa, pero puede escribir fácilmente uno en otro script por lotes.

call TestBatchScript.cmd > console_output.txt 
findstr /C:"this string" console_output.txt 

establecerá% errorlevel% en cero si se encuentra la cadena, y distinto de cero si la cadena está ausente. Luego puede probarlo con IF ERRORLEVEL 1 goto :fail y ejecutar el código que desee después de la etiqueta :fail.

Si desea una evaluación compacta de varias de tales cadenas, puede utilizar || Sintaxis:

call TestBatchScript.cmd > console_output.txt 
findstr /C:"teststring1" console_output.txt || goto :fail 
findstr /C:"teststring2" console_output.txt || goto :fail 
findstr /C:"teststring3" console_output.txt || goto :fail 
findstr /C:"teststring4" console_output.txt || goto :fail 
goto :eof 

:fail 
echo You Suck! 
goto :eof 

O bien, puede ir aún más lejos y leer la lista de cadenas de un archivo

call TestBatchScript.cmd > console_output.txt 
set success=1 
for /f "tokens=*" %%a in (teststrings.txt) do findstr /C:"%%a" console_output.txt || call :fail %%a 
if %success% NEQ 1 echo You Suck! 
goto :eof 

:fail 
echo Didn't find string "%*" 
set success=0 
goto :eof 
2

He creado una biblioteca para las pruebas unitarias ventanas lote. Actualmente está en su infancia, pero funciona y lo uso.

Se llama cmdUnit y puede ser descargado desde el sitio del proyecto en bitbucket:

https://bitbucket.org/percipio/cmdunit

1

utilizo lo siguiente para filter comandos del tipo:

Para archivo por lotes foo.cmd, cree la siguiente archivos:

foo.in.txt:
hola

foo.expected.txt:
hola mundo

foo.test.cmd:

@echo off 

echo Testing foo.cmd ^< foo.in.txt ^> foo.out.txt 

call foo.cmd <foo.in.txt> foo.out.txt || exit /b 1 

:: fc compares the output and the expected output files: 
call fc foo.out.txt foo.expected.txt || exit /b 1 

exit /b 0 

A continuación, ejecute foo.test.cmd

Cuestiones relacionadas