Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: bITEBUG en 11 Junio 2011, 03:26 am



Título: [Batch] "Se ha alcanzado el nivel maximo de recursividad de "setlocal""
Publicado por: bITEBUG en 11 Junio 2011, 03:26 am
Primero que nada quiero pedir disculpas por algunos de mis post en los que he hecho preguntas acerca de errores que solamente eran generados a causa de el entorno especifico en el que trabajo dentro de Xp, o sea un registro caotico e incomprensible luego de años de modificaciones desmedidas, instale freedos y adios problema!

Acerca de el asunto de este post, espero que no sea otro de estos errores, porque aun no lo he probado en freedos, pero por lo que he visto por internet no soy el unico que se ha topado con este error.
¿A que se debe?


Título: Re: "Se ha alcanzado el nivel maximo de recursividad de "setlocal""
Publicado por: SuperDraco en 11 Junio 2011, 04:08 am
Código:
SETLOCAL

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

Ahora el comando por lotes SETLOCAL acepta argumentos opcionales:
        ENABLEEXTENSIONS / DISABLEEXTENSIONS
            Habilita o deshabilita las extensiones del procesador de comandos
            Estos argumentos tienen prioridad sobre los modificadores CMD E:O
            o /E:OFF. Vea CMD /? para obtener más detalles.
        ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION
            Habilita o deshabilita la expansión de variables de entorno
            retardada. Estos argumentos tienen prioridad sobre los
            modificadores CMD /V:ON o /V:OFF. Vea CMD /? para obtener 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 de 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 scripts por lotes para determinar si las extensiones
están disponibles con la siguiente técnica:

    VERIFY OTHER 2>null
    SETLOCAL ENABLEEXTENSIONS
    IF ERRORLEVEL 1 echo No puede habilitar 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 de ERROLEVEL a un valor distinto de cero.


Supongo que por algo relacionado con la memoria.

Se soluciona con un simple y efectivo:

Código:
ENDLOCAL


Título: Re: "Se ha alcanzado el nivel maximo de recursividad de "setlocal""
Publicado por: bITEBUG en 11 Junio 2011, 09:24 am
¿O sea que conviene poner un setlocal antes de cada apertura y un enlocal despues de cada cierre en vez de un solo setlocal al principio del batch?


Título: Re: "Se ha alcanzado el nivel maximo de recursividad de "setlocal""
Publicado por: SuperDraco en 11 Junio 2011, 15:42 pm
¿O sea que conviene poner un setlocal antes de cada apertura y un enlocal despues de cada cierre en vez de un solo setlocal al principio del batch?

No se tanto como para resolverte al 100% esa pregunta, lo que si te puedo decir es que comprobé que al llegar al limite de recursividad, un ENDLOCAL lo soluciona, pero por otro lado, despues de utilizar ENDLOCAL, el límite de recursividad se acortará bastante más, así que por lógica supongo que si tienes problemas con el límiite, lo debes usar en cada cierre.

saludosss


Título: Re: [Batch] "Se ha alcanzado el nivel maximo de recursividad de "setlocal""
Publicado por: bITEBUG en 12 Junio 2011, 05:54 am
Acabo de leer la ayuda de nuevo, no sabia que endlocal cambiaba el errorlevel :S


Título: Re: "Se ha alcanzado el nivel maximo de recursividad de "setlocal""
Publicado por: erickesau en 27 Febrero 2015, 08:42 am
Código:
SETLOCAL

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

Ahora el comando por lotes SETLOCAL acepta argumentos opcionales:
        ENABLEEXTENSIONS / DISABLEEXTENSIONS
            Habilita o deshabilita las extensiones del procesador de comandos
            Estos argumentos tienen prioridad sobre los modificadores CMD E:O
            o /E:OFF. Vea CMD /? para obtener más detalles.
        ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION
            Habilita o deshabilita la expansión de variables de entorno
            retardada. Estos argumentos tienen prioridad sobre los
            modificadores CMD /V:ON o /V:OFF. Vea CMD /? para obtener 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 de 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 scripts por lotes para determinar si las extensiones
están disponibles con la siguiente técnica:

    VERIFY OTHER 2>null
    SETLOCAL ENABLEEXTENSIONS
    IF ERRORLEVEL 1 echo No puede habilitar 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 de ERROLEVEL a un valor distinto de cero.


Supongo que por algo relacionado con la memoria.

Se soluciona con un simple y efectivo:

Código:
ENDLOCAL




tengo el mismo error mi codigo es el siguiente



setlocal DisableDelayedExpansion

set BUILDIR=PROYECTO\models\EEMFile
set INTEXTFILE=script-player-delete%num%.txt

set OUTTEXTFILE=temp.txt
set SEARCHTEXT=%cd1%\
set VER=-delete "
set OUTPUTLINE=

for /f "tokens=1,* delims=¶" %%A in ( %BUILDIR%\%INTEXTFILE% ) do (
    SET string=%%A
    setLocal EnableDelayedExpansion
    SET modified=!string:%SEARCHTEXT%=%VER%!
    echo.!modified! >> %BUILDIR%\%OUTTEXTFILE%
    endlocal
 )

del %BUILDIR%\%INTEXTFILE%
rename %BUILDIR%\%OUTTEXTFILE% %INTEXTFILE%




me da el mismo error despues de usarlos en mas de apriximadamente 13 veces seguidas ayuda


Título: Re: "Se ha alcanzado el nivel maximo de recursividad de "setlocal""
Publicado por: Eleкtro en 27 Febrero 2015, 09:39 am
tengo el mismo error mi codigo es el siguiente

me da el mismo error despues de usarlos en mas de apriximadamente 13 veces seguidas ayuda

1. Debes utiliza las etiquetas GeShi para insertar código, lee las normas del foro de programación.

2. Está prohibido revivir un tema antiguo para formular otra pregunta, lee las normas del foro elhacker.net.

Dicho esto, estás activando/desactivando la expansión de las variables y llegas al límite de la pila, prueba así:

Código:
@Echo OFF & SetLocal EnableDelayedExpansion

Set "buildDir=.\PROYECTO\models\EEMFile"
Set "srcFilename=script-player-delete%num%.txt"
Set "outFilename=temp.txt"
Set "searchText=%cd1%\"
Set "ver=-delete "" & REM "
Set "outputLine="

(
    For /F "UseBackQ Tokens=1 Delims=¶" %%# in (
        "%buildDir%\%srcFilename%"
    ) Do (
        Set "str=%%#"
        Set "mod=!str:%searchText%=%ver%!"
        Echo.!mod!
    )
)>"%buildDir%\%outFilename%"

Del "%buildDir%\%srcFilename%"
Ren "%buildDir%\%outFilename%" "%srcFilename%"

Pause&Exit /B 0

Si tienes más dudas sobre el tema, crea un nuevo post.

Tema cerrado.

Saludos!