[Batch] Menu batch dinamico

Iniciado por shadowhunter, 1 Noviembre 2013, 11:43 AM

0 Miembros y 1 Visitante están viendo este tema.

shadowhunter

Necesito ayuda a encontrar donde falla este codigo:

@echo off & COLOR 70 & mode con: cols=75 lines=30
title Animefiles 1.3.2

@set ruta1= %CD%
Set "Directory=%CD%\plugins"

set sep=ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
SETLOCAL
CD Plugins
if exist autorun.txt (
<"autorun.txt" set /p "run="
call %run%
)
ENDLOCAL

:MENU
CD %ruta1%
cls
echo.
echo             ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo             º                 Animefiles                  º
echo             ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
echo             º   Version 1.3.2     º    By Shadowhunter    º
echo             ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ |MORE
echo Elija una opcion: |MORE
echo %sep%
echo 1 .Crear una nueva lista.
echo 2 .Ver listas.
echo 3 .Eliminar una lista.
echo 4 .Incluir un anime a una lista.
echo 5 .Eliminar un anime de una lista.
echo 6 .Buscar un anime.
echo 7 .Activar Plugins.
echo 8 .Abrir carpeta contenedora.
echo 9 .Ayuda.
echo 10.Salir.
echo ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
setlocal
For %%# in (
"%Directory%\*.bat"
) Do (
Set /A "FileCount+=1"
Set "File!FileCount!=%%~nx#"
)
For /L %%X in (1, 1, !FileCount!) Do (
Type "%Directory%\activados.txt" | Findstr /I "!File%%X!" 1>NUL 2>&1
Echo %%X. !File%%X! | MORE
)
endlocal
echo %sep%
echo.
set menu=0
set/p "menu=>"
if %menu%==1 goto CREAR
if %menu%==2 goto LISTAS
if %menu%==3 goto DEL
if %menu%==4 goto INDAT
if %menu%==5 goto DELANIME
if %menu%==6 goto BUSCAR
if %menu%==7 goto ACTIVAR
if %menu%==8 goto OPENC
if %menu%==9 goto MENU2
if %menu%==10 goto exit
cls
echo.
echo Opcion no valida. |MORE
pause
goto MENU

:CREAR
:LISTAS
:DEL
:INDAT
:DELANIME
:BUSCAR
:ACTIVAR
:OPENC
:MENU2
exit


El programa deberia de cargar una serie de nombres de archivos que estarian almacenados en activados.txt de la forma:

prueba1.bat
prueba2.bat
prueba3.bat
....

y mostrarlos como un menu de la forma:

1. prueba1
2. prueba2
3. prueba3
....

Pero no consigo que se muestre en pantalla, al igual que tambien deberia de cargar el nombre de un unico archivo almacenado en autorun.txt si existe y ejecutar ese archivo, pero me lo carga y no lo ejecuta.

agradezco cualquier ayuda u opinion al respecto.

Almapa

Te falta por una parte activar o permitir la extensión de variables para que se puedan definir las variables, que como bien has escrito, van entre "!".

setlocal enabledelayedexpansion

Aquí tienes la explicación
http://ss64.com/nt/delayedexpansion.html


Mira a ver si es eso.
Un saludo.

shadowhunter

gracias pero sigo sin poder eliminarle la extension y tambien me gustaria que empezara a partir del 10, pero al ponerlo hace cosas extrañas.


Almapa

Ahh perdón, me había dejado media respuesta XD
Cuando ejecutas la línea

Set "File!FileCount!=%%~nx#"

No puedes quitar la "x" del parámetro "~nx". Sabiendo que estás rastreando solo archivos .bat puedes guardar las variables sin la extensión y añadirle la extensión si es necesario a posteriori.

Almapa

Otra solución, que supongo que te gustará más es evitar la extensión solo a la hora de mostrarlo modificando la línea del ECHO.

Echo %%X. !File%%X:.bat=! | MORE

De este modo sustituyes el ".bat" por nada.


Un saludo

shadowhunter


shadowhunter

pero el problema que tengo es que comienza a enumerar a partir de 1 yo quiero que empieze por el 11 y si modifico para que empiece desde 10 me da errores...

ayuda por favor!

Almapa

Como??? A ver si quieres que lo que se muestre sea

11. prueba1
12. prueba2
13. prueba3

Puedes crear una variable dentro del bucle que sea:

set /a variable=%%X+10

y mostrarla donde quieras que aparezca, en el caso que te proponía yo sería:

Echo !num!. !File%%X:.bat=! | MORE


Si de verdad quieres aprender, este tipo de fallo lo deberías investigar e intentar solucionar tu solo, pero en cuestión de 10 minutos no creo que hayas investigado mucho  ;)

Un saludo


shadowhunter

Si ofender, pero si pido ayuda es por que no consigo que me funcione  :xD

Precisamente habia intentado poniendo como tu me propones:

set /a variable=%%X+10

pero en ese caso, la variable no me imprime en pantalla nada, solo imprime !File%%X:.bat=!

Almapa

A mi así:
For %%# in (
"%Directory%\*.bat"
) Do (
Set /A "FileCount+=1"
Set "File!FileCount!=%%~nx#"
)
For /L %%X in (1, 1, !FileCount!) Do (
set /a num=%%X +10
Type "%Directory%\activados.txt" | Findstr /I "!File%%X!" 1>NUL 2>&1
Echo !num!. !File%%X:.bat=! | MORE
)



me saca esto:

11. prueba1
12. prueba2
13. prueba3