Ms-Dos - Pequeño script en Batch

   
Vista:

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
información
Otras secciones de LWP con contenido de Ms-Dos
- Cursos de Ms-Dos
- Temas de Ms-Dos
información
Cursos y Temas de Ms-Dos
- Comandos de Ms-Dos
- Curso de MS-DOS
- Tutorial de comandos para MS-DOS
Imágen de perfil de Antoni Masana

Pequeño script en Batch

Publicado por Antoni Masana (269 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