Archivo Bat

#1
Tengo el codigo siguiente, el problema es que no regresa al menu, si no que termina y cierra, me pueden ayudar???


@echo off
:menu
title Observaciones
Echo. ±±±±±±±±±±±±±±±±±±±±±±±--------------------±±±±±±±±±±±±±±±±±±±±±±±
Echo. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
echo.
echo.
echo.
echo. "Que desea hacer????"
echo.
echo. (1) Listar Programas Instalados
echo.
echo. (2) Listar Historial de Navegacion
echo.
echo. (3) Salir
echo.
echo.
set /p var=^>^>^>
if %var%==1 goto :primero
if %var%==2 goto :Segundo
if %var%==3 goto :Tercero
cls

:primero
regedit /a %TEMP%\filename.reg "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
for /f "Skip=1 Tokens=*" %%i in ('type %TEMP%\Filename.reg') do set line="%%i"&call :programas

goto: menu


:Segundo
regedit /a %TEMP%\filename.reg "HKEY_CURRENT_USER\Software\Microsoft\Internet%Explorer\TypedURLs"
for /f "Skip=1 Tokens=*" %%i in ('type %TEMP%\Filename.reg') do set line="%%i"&call :Historial

goto :menu


:programas
set work=%line:~2,11%
set work=%work:"=%
If NOT "%work%" EQU "DisplayName" goto :EOF
set work=%line:~16,120%
set work=%work:"=%
@echo %work%
@echo %work% >> listado_programas.txt

:Historial
set work=%line:~2,11%
set work=%work:"=%
If NOT "%work%" EQU "DisplayName" goto :EOF
set work=%line:~16,120%
set work=%work:"=%
@echo %work%
@echo %work% >> listado_Historial.txt
 

ProfesiorX

Bovino adolescente
#2
Me temo que lo que quieres hacer no funcionara.

Mira, la manera en la que trabajan los archivos bat (abreviacion de Batch, que significa archivo de procesamiento por lotes) es que el interprete de comandos va leyendo el archivo linea por linea, y una vez leida, esa linea se descarta y no se queda guardada.

Por lo tanto, cuando tu utilizas una sentenca goto, lo que hace es que DESCARTA todas las lineas sin ejecutarlas hasta que llega a la etiqueta especificada en el goto y de nuevo comienza la ejecucion dese ahi, entonces, al no quedar guardada, no puedes regresar a una linea anterior, el goto solo te perimtira ir a una eriqueta definida mas adelante, NUNCA a una etiqueta definida antes.

Espero que con esto haya respondido tu duda

Saludos :)
 

greyess74

Bovino maduro
#3
ProfesiorX difiero con su opinión.

ivanrik5: Le hice unos arreglos a tu archivo para quedar asi, y asi funcionará:

@echo off
:Menu
cls
title Observaciones
Echo. ±±±±±±±±±±±±±±±±±±±±±±±--------------------±±±±±±±±±±±±±±±±±±±±±±±
Echo. ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
echo.
echo.
echo.
echo. "Que desea hacer????"
echo.
echo. (1) Listar Programas Instalados
echo.
echo. (2) Listar Historial de Navegacion
echo.
echo. (3) Salir
echo.
echo.
set /p var=^>^>^>
if %var%==1 goto :primero
if %var%==2 goto :Segundo
if %var%==3 goto exit
if %var% GTR 3 echo Error
goto :Menu

:primero
cls
regedit /a %TEMP%\filename.reg "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
for /f "Skip=1 Tokens=*" %%i in ('type %TEMP%\Filename.reg') do set line="%%i"&call :programas
Echo Presione una tecla para volver al menu
Pause>Nul
goto :Menu

:Segundo
cls
regedit /a %TEMP%\filename.reg "HKEY_CURRENT_USER\Software\Microsoft\Internet%Explorer\TypedURLs"
for /f "Skip=1 Tokens=*" %%i in ('type %TEMP%\Filename.reg') do set line="%%i"&call :Historial
Echo Presione una tecla para volver al menu
Pause>Nul
goto :Menu

:programas
set work=%line:~2,11%
set work=%work:"=%
If NOT "%work%" EQU "DisplayName" goto :EOF
set work=%line:~16,120%
set work=%work:"=%
@echo %work%
@echo %work% >> listado_programas.txt

:Historial
set work=%line:~2,11%
set work=%work:"=%
If NOT "%work%" EQU "DisplayName" goto :EOF
set work=%line:~16,120%
set work=%work:"=%
@echo %work%
@echo %work% >> listado_Historial.txt
 
#4
Simplemente corrige el espacio que hay en:

goto: menu

por

goto :menu

ya que los dos puntos son parte del nombre de la etiqueta y si los separas no la va a encontrar. y agrega una etiqueta :Tercero al final para que la opción 3 no muestre el mensaje de que no se encontró la etiqueta.
 
Arriba