La Web del Programador: Comunidad de Programadores
 
    Pregunta:  61124 - EJECUTAR EN PROCESO BAT
Autor:  luis martin
Como puedo ejecutar proceso BAT de Dos desde Visual Fox 8 y poder capturar el ERRORLEVEL que me deja el programa DOS que se ejecuta dentro de un BAT ?

Gracias

  Respuesta:  Ingrid Pazmiño
Hola Luis

Por ejemplo en un sistema de VFP que tengo, uso archivos .BAt para copiar datos de un PC a un Servidor_PC. Esto lo hago de la siguiente manera:

1. Se crea un archivo .bat el cual tiene los comandos de DOS que deseas ejecutar. Por ejemplo, supongamos el archivo c:misbatCOPIAR.BAT, el cual contiene:
cls
@echo off
echo "Enviando informacion al SERVIDOR_PC ...presione 'enter' y VERIFIQUE...!!"
pause
cd enlacecategoria
xcopy *.* /v /y /s /e \Servidor_PCd_Servidor_PCsistemacarpeta
ECHO "La conexion fue EJECUTADA..Verifique resultado...GRACIAS..!!"
pause

2. Para ejecutar este .BAT desde VFP en la forma que tengas diseñada al presionar el objeto que da la opcion debes ejecutar el siguiente comando:
RUN "c:MISBATCOPIAR"
y el sistema ejecuta lo que contiene el .bat

3. Para conocer el resultado de ERRORLEVEL busca en la ayuda de windows donde encontrarás entre otras esta manera de capturar el error:

Utilizar defined variable
Si se utiliza defined variable, se agregarán las tres variables siguientes: %errorlevel%, %cmdcmdline% y %cmdextversion%.

%errorlevel% se expande en una representación de cadena del valor actual de errorlevel, siempre y cuando no exista ya una variable de entorno con el nombre ERRORLEVEL, en cuyo caso obtendrá su valor. El siguiente ejemplo muestra cómo se puede utilizar errorlevel después de ejecutar un programa por lotes:

goto respuesta%errorlevel%
:respuesta0
echo El programa ha devuelto el código 0
:respuesta1
echo El programa ha devuelto el código 1
goto final
:final
echo Terminado.

También se pueden utilizar los operadores de comparación de operadorDeComparación de la forma siguiente:

if %errorlevel% LEQ 1 goto correcto
%cmdcmdline% se expande en la línea de comandos original pasada a Cmd.exe antes de que éste realice ningún procesamiento, siempre y cuando no exista ya una variable de entorno con el nombre cmdcmdline, en cuyo caso obtendrá su valor.

%cmdextversion% se expande en una representación de cadena del valor actual de cmdextversion, siempre y cuando no exista ya una variable de entorno con el nombre CMDEXTVERSION, en cuyo caso obtendrá su valor.

Bueno espero te ayude algo...

Suerte