Foros del Web » Programación para mayores de 30 ;) » Programación General »

Programacion BAT

Estas en el tema de Programacion BAT en el foro de Programación General en Foros del Web. Hola a todos. El error si se puede llamar asi es que el valor del ERRORLEVEL no cambia se mantiene constante, aun usando un set ...
  #1 (permalink)  
Antiguo 03/01/2008, 13:11
Avatar de ariaschector  
Fecha de Ingreso: enero-2008
Mensajes: 3
Antigüedad: 16 años, 10 meses
Puntos: 0
Programacion BAT

Hola a todos.

El error si se puede llamar asi es que el valor del ERRORLEVEL no cambia se mantiene constante, aun usando un set ERRORLEVEL = n el valor no cambia siempre me regresa 0.

Lo raro es que en la computadora donde desarrolle el ejemplo si me cambia el valor, pero ya en la compu de pruebas y la de produccion no me hace ese cambio.

Alguien sabe a que se debe esto? y como solucionarlo?

Muchas Gracias por su atencion.
  #2 (permalink)  
Antiguo 03/01/2008, 14:58
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 10 meses
Puntos: 19
Re: Programacion BAT

Pon el código a ver si podemos ayudarte

salu2

potsdata: Mira este ejemplo, donde errorlevel debería cambiar

Código:
@echo off
choice /C:12
IF %ERRORLEVEL%==2 echo ERRORLEVEL vale %ERRORLEVEL%
IF %ERRORLEVEL%==1 echo ERRORLEVEL vale %ERRORLEVEL%
pause
  #3 (permalink)  
Antiguo 04/01/2008, 11:35
Avatar de ariaschector  
Fecha de Ingreso: enero-2008
Mensajes: 3
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Programacion BAT

Esta es la parte del codigo y pues lo raro como ya lo habia mensionado con anterioridad es que en la maquina de desarrollo si hace el cambio pero en las de pruebas y la de produccion no lo hace siempre manda un 0 aun cuando se le de un SET ERRORLEVEL.

:Error
echo %date% - %time% - ERROR: El archivo %1 no existe >> Bitacora.txt
echo %date% - %time% - F I N D E E J E C U C I O N C O N E R R O R E S >> Bitacora.txt
echo %date% - %time% - ERRORLEVEL = %ERRORLEVEL% >> Bitacora.txt
set ERRORLEVEL=12
echo %date% - %time% - ERRORLEVEL = %ERRORLEVEL% >> Bitacora.txt
exit /b

Ojala y alguien me ayude con esto por favor.
  #4 (permalink)  
Antiguo 04/01/2008, 13:41
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 10 meses
Puntos: 19
Re: Programacion BAT

Esto es lo que me da bitacora.txt
Cita:
04/01/2008 - 19:32:31,73 - ERROR: El archivo no existe
04/01/2008 - 19:32:31,74 - F I N D E E J E C U C I O N C O N E R R O R E S
04/01/2008 - 19:32:31,74 - ERRORLEVEL = 0
04/01/2008 - 19:32:31,83 - ERRORLEVEL = 12
Por lo que creo que es un problema de configuración del entorno de cada PC.
Intenta probar con:

Código:
rem al principio del script
@echo off
rem 
setlocal
rem ....
:Error
echo %date% - %time% - ERROR: El archivo %1 no existe >> Bitacora.txt
echo %date% - %time% - F I N D E E J E C U C I O N C O N E R R O R E S >> Bitacora.txt
echo %date% - %time% - ERRORLEVEL = %ERRORLEVEL% >> Bitacora.txt
set ERRORLEVEL=12
echo %date% - %time% - ERRORLEVEL = %ERRORLEVEL% >> Bitacora.txt

rem
endlocal
exit /b
Cita:
C:\Documents and Settings\Administrador>setlocal /?
Comienza la sección de cambios locales de entorno en un archivo por lotes.
Los cambios de entorno hechos después de que se haya emitido SETLOCAL son
locales en el archivo por lotes. ENDLOCAL debe ser emitido para restaurar
la configuración anterior. Cuando se llega al final de un archivo de proceso
por lotes, se ejecuta un ENDLOCAL implícito para cualquier comando SETLOCAL
pendiente que se haya emitido para este archivo de proceso por lotes.

SETLOCAL

Si las extensiones de comandos están habilitadas SETLOCAL cambia así:

Ahora el comando del archivo por lotes SETLOCAL acepta argumentos opcionales:
ENABLEEXTENSIONS / DISABLEEXTENSIONS
Habilitar o deshabilitar las extensiones del procesador
de comandos. Ver CMD /? para más detalles.
ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION
Habilita o deshabilita la expansión de la variable de entorno
retardada. Ver SET /? para más detalles. Estas modificaciones
duran hasta que coincida el comando ENDLOCAL, independientemente
de su configuración anterior para el comando SETLOCAL.

El comando SETLOCAL establecerá el valor ERRORLEVEL si se diera un argumento.
Será cero si se da uno de los dos argumentos válidos y el otro no. Puede usar
esto en los archivos de proceso por lotes para determinar si las extensiones
están disponibles usando la siguiente técnica:

VERIFY OTHER 2>null
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 echo No puede activar las extensiones

Esto funciona porque en las versiones anteriores de CMD.EXE, SETLOCAL
no establecía el valor de ERRORLEVEL. El comando VERIFY con un argumento
erróneo inicializa el valor ERRORLEVEL a un valor distinto de cero.
Cuentanos y suerte
  #5 (permalink)  
Antiguo 04/01/2008, 13:52
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 10 meses
Puntos: 19
Re: Programacion BAT

Mirate este hilo:
http://www.lawebdelprogramador.com/n...n8=0&n9=0&n0=0

Tiene que ver con "La expansión de variables de entorno retardada" del DOS

A ver si te ilumina.
Cita:
Según lo que postié en el primer mensaje, puse que con el modificador /v se soluciona este problema, el cual no me funcionó inicialmente. Pero si funciona, solo que había que seguir leyendo el documento. :P

El funcionamiento de este "patch" es así:

1) Abres o ejecutas el CMD así...

cmd /v: on

2) Se abrirá un aventana de Intérprete de Comandos pero con la opción /V actibada. Pero para usar esta nueva característica, uno debe usar un símbolo distinto al % para llamar a las variables declaradas, entonces se hace así:

@echo off

set bool=true
echo !bool!
pause

if "!bool!" == "true" (
set bool=false
echo !bool!
pause
)

==========SALIDA==========
true
Presione una tecla para continuar . . .
false
Presione una tecla para continuar . . .
========FIN SALIDA=========

A diferencia de antes, que las variables se llamaban con los signos %, lo cual porducía que el valor de la variable a la que se llama no cambie y siga con el valor inicial...

@echo off

set bool=true
echo %bool%
pause

if "%bool%" == "true" (
set bool=false
echo %bool%
pause
)

==========SALIDA==========
true
Presione una tecla para continuar . . .
true
Presione una tecla para continuar . . .
========FIN SALIDA=========

Como verán, el problema de la modificación de las variables (o declaración en tiempo de ejecución) fue solucionado.

Esta información la obtuve desde el mismo comando set /?
A este problema Microsoft le llama "Expansión de variable inmediata".
Y a la solución o mejora de Microsoft es llamada "Expansión de variable retardada".
salu2
  #6 (permalink)  
Antiguo 08/01/2008, 09:48
Avatar de ariaschector  
Fecha de Ingreso: enero-2008
Mensajes: 3
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Programacion BAT

OK Muchas gracias por tu ayuda hoy mismo probare las alternativas que me diste para solucionar este problema.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:13.