Ms-Dos - Pequeño script en Batch

 
Vista:
sin imagen de perfil

Pequeño script en Batch

Publicado por sh0rty (1 intervención) el 14/10/2014 02:40:11
Buenas ante todo a los usuarios de LWP!

Estoy realizando un pequeño script en batch que se trata de lo siguiente:

Debe recibir como argumento la ruta absoluta de un directorio.
Debe recorrer ese directorio (donde habrá ficheros de texto) y leerlos.
Si el fichero contiene la cadena "ISO-9001", el programa escribirá al final del fichero "Estado: Correcto", si no la tiene "Estado: Incorrecto".

He pensado en escribir una cosa u otra en función del Errorlevel, es decir si lo encuentra el Errorlevel se pondrá a 0 y si no lo encuentra el Errorlevel se pondrá a 1...

1
2
3
4
5
6
7
8
9
10
11
for %%a in (%1\*.txt) do (
	find /i "hola" %%a
	echo %errorlevel%
	if %errorlevel% == 0 (
		echo. >> %%a
		echo Estado: Correcto >> %%a
		) ELSE (
			echo. >> %%a
			echo Estado: Incorrecto >> %%a
			)
	)

Hasta aquí todo bien, el problema es que lo encuentre o no, el Errorlevel se queda en 0, y se escribe Correcto en todos los ficheros contengan o no la cadena deseada.
7cd08c5c47

En cambio al ejecutar el comando find en la consola directamente, el Errorlevel si cambia...
63cb6b4b1f


¿Que puedo hacer? Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Pequeño script en Batch

Publicado por Antoni Masana (811 intervenciones) el 14/10/2014 15:27:38
Como he comentado otras veces el BATCH de Windows es una verdadera M*I*E*R*D*A y con perdon a las mierdas por la comparación

Podemos aplicar aquel chiste de: Vale, aceptamos Windows como Sistema Operativo.

Solucion a tu problema:

1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
for %%a in (%1\*.txt) do call :Buscar %%a
goto:EOF
 
:Buscar
   FIND /I "ISO-9001" %1 >nul 2>nul
   if %errorlevel% == 0 (
      echo. >> %%a
      echo Estado: Correcto >> %%a
) ELSE (
      echo. >> %%a
      echo Estado: Incorrecto >> %%a
)

Funciona tanto con el FIND como con el FINDSTR

El problema es que al estar dentro del FOR la variable ERRORLEVEL no se actualiza con el resultado del FIND.

En teoria (de programación) lo que haces deberia funcionar pero el comando FOR tiene más agujeros que una esponja.

En mis pruebas funciona mi ejemplo

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar