Crear un bat con cierta informacion.

Iniciado por Tefaa, 16 Noviembre 2015, 07:39 AM

0 Miembros y 2 Visitantes están viendo este tema.

Tefaa

Hola, estaba creando el siguiente BAT.

Código (DOS) [Seleccionar]
@ECHO OFF
:Menu
cls
color a
echo Seleccione la opci¢n segun el DVD que desea ejecutar.
echo.
echo 1. DVD1
echo 2. DVD2
echo 3. Salir
set /p var=
if %var%==1 goto :primero
if %var%==2 goto :segundo
if %var%==3 exit
Pause>Nul
if %var% GTR 3 echo Error
goto :Menu
:primero
cls
color a
echo.
Echo Esta seguro que desea ejecutar el DVD1?
echo.
Echo s o n?
set /p var=
if %var%==s START /D "DVD1" dvd1.exe
if %var%==s echo.
if %var%==s echo Ejecutando DVD1 . . .
if %var%==s echo Presione una tecla para continuar . . .
if %var%==s echo.
if %var%==s pause>Nul
if %var%==s goto :Menu
if %var%==n goto :Menu
Pause>Nul
:segundo
cls
color a
Echo Esta seguro que desea ejecutar el DVD2?
Echo s o n?
set /p var=
if %var%==s START /D "DVD2" dvd2.exe
if %var%==s echo.
if %var%==s echo DVD2 . . .
if %var%==s echo Presione una tecla para continuar . . .
if %var%==s echo.
if %var%==s pause>Nul
if %var%==s goto :Menu
if %var%==n goto :Menu
Pause>Nul


Digamos que funciona bárbaro si lo tengo en la pc. Ejemplo: D:\DVDS
en DVDS esta 1.bat y carpeta DVD1 y DVD2

Anda todo si lo ejecuto desde el pc. (Incluyendo bat todo, de excelencia)

Si lo grabo a un DVD
con la carpeta DVD1 y DVD2 y el bat en raiz llamado 1.bat.
le hago un autorun open = 1.bat

Hasta ahí anda todo bárbaro, ahora cuando apretas 1 o 2 no ejecuta nada  y de hecho se queda trabado en el s o n? S (según la respuesta que le demos)
Cosa que estando toda la estructura fuera del DVD anda bien. :S

Que estoy haciendo mal ? o como se llama la estructura para CDROM??

Gracias!

Eleкtro

Cita de: Tefaa en 16 Noviembre 2015, 07:39 AMQue estoy haciendo mal ?

Hay un uso abundante de malas prácticas en el código que has mostrado, muchas cosas son mejorables, sin embargo, el código debería cumplir su función, el problema no debe ser del script, si además mencionas que la ejecución del script se te "traba" o se "cuelga" en la sentencia Set /P ...

De todas formas, para las preguntas booleanas (True/False) es recomendable utilizar el comando Choice, que ha sido diseñado para ese propósito, en lugar del comando Set /P, aparte de eso, podrías probar otra sintaxis diferente para el comando Start:

Código (dos) [Seleccionar]
@ECHO OFF

Choice /C "SN" /M "Pregunta"
If %ERRORLEVEL% EQU 1 (
:: Si
Start "" ".\DVD1\dvd1.exe"
) Else (
:: No
Start "" ".\DVD2\dvd2.exe"
)

Pause>Nul


Pero como ya digo no creo que una refactorización del código mejore el problema que tienes.

Saludos








Tefaa

#2
Cita de: Eleкtro en 16 Noviembre 2015, 08:49 AM
Hay un uso abundante de malas prácticas en el código que has mostrado, muchas cosas son mejorables, sin embargo, el código debería cumplir su función, el problema no debe ser del script, si además mencionas que la ejecución del script se te "traba" o se "cuelga" en la sentencia Set /P ...

De todas formas, para las preguntas booleanas (True/False) es recomendable utilizar el comando Choice, que ha sido diseñado para ese propósito, en lugar del comando Set /P, aparte de eso, podrías probar otra sintaxis diferente para el comando Start:

Código (dos) [Seleccionar]
@ECHO OFF

Choice /C "SN" /M "Pregunta"
If %ERRORLEVEL% EQU 1 (
:: Si
Start "" ".\DVD1\dvd1.exe"
) Else (
:: No
Start "" ".\DVD2\dvd2.exe"
)

Pause>Nul


Pero como ya digo no creo que una refactorización del código mejore el problema que tienes.

Saludos

No master sabes que pasa, no se programar. Hice eso con lo que encontre en internet... Lo único que se es que funciono si lo ejecuto desde cualquier parte de la pc cambiándole el directorio. Si escribo C:\ la ruta completa barbaro anda, si escribo solo parte de la ruta es para cuando el bat se encuentra en el mismo lugar que los archivos.
Ahora si lo pongo en la lectora, hoy la lectora es Z:\ Mañana D:\ Pasado H:\ y depende a donde vaya no siempre es la misma unidad. Entonces por eso quise hacerlo así DVD blabla\ archivos...
Entonces reitero, anda en el pc pero no en el DVD. Porque ? Hay alguna funcion o variable nose como se llame, para cdrom ? Algo asi como Start /d -cdrom -t dvd\ archivos algo asi ?

(Pruebo igual lo tuyo, lo que pasa es que es un bajon tener que grabar otro dvd, y no entiendo bien las comillas despues del Start)
Saludos
Gracias

Edit: Con el codigo que me pasaste quedo lo siguiente.

Citar@ECHO OFF

:Menu
cls
color a

echo Seleccione la opci¢n segun el DVD que desea ejecutar.
echo.

echo 1. DVD1
echo 2. DVD2
echo 3. Salir

set /p var=
if %var%==1 goto :primero
if %var%==2 goto :segundo
if %var%==3 exit
Pause>Nul

if %var% GTR 3 echo Error


:primero
cls
color a
Choice /C "SN" /M "Esta seguro que desea ejecutar el DVD1?"
If %ERRORLEVEL% EQU 1 (
   :: S2i
   Start "" ".\DVD1\present.exe"
) Else (
   :: No
   goto :Menu
)

Pause>Nul


:segundo
cls
color a

Choice /C "SN" /M "Esta seguro que desea ejecutar el DVD2?"
If %ERRORLEVEL% EQU 1 (
   :: Si
   Start "" ".\DVD2\3129_1024x600.exe"
) Else (
   :: No
   goto :Menu
)

Pause>Nul

Pero me sucede lo siguiente;
Si apreto Si en la primera pregunta.. ejecuta el programa y se queda ahi luego le apreto no y va al segundo dvd y me pregunta, cuando preferiria que vuelva al menu. (Ahora iba a probar goto:Menu despues del comando que me pasaste)
Lo segundo que me surge es Me hace la pregunta y me pone el S/N al lado... se puede poner abajo ? Gracias. (Ahora lo probare en un dvd)

Eleкtro

Cita de: Tefaa en 16 Noviembre 2015, 21:40 PMEntonces reitero, anda en el pc pero no en el DVD. Porque ?

Al menos yo no se darte una respuesta lógica a ese problema por que me parece un comportamiento extraño, suponiendo que no sea por un fallo de I/O de la lectora o tal vez un mal estado del DVD (que segurisimamente no lo es, pero es lo único que me parece que podría explicar algo así).

Pienso que el código que tienes debería funcionarte en el DVD, de hecho como ya has mencionado te funciona si lo usas en un disco físico.

También se me ocurre que tal vez por algún motivo el directorio de trabajo del script cambie cuando lo inicias desde el DVD. Puedes comprobarlo con el comando Echo %CD%.

Intenta explicar exactamente lo que sucede, que significa "no funciona" para ti ...con más detalles, y por supuesto prueba el código que mostré de todas formas y añádele el comando que he mencionado para revisar cual es el directorio de trabajo actual cuando inicias el script.




Cita de: Tefaa en 16 Noviembre 2015, 21:40 PMHay alguna funcion o variable nose como se llame, para cdrom ? Algo asi como Start /d -cdrom -t dvd\ archivos algo asi ?

No, no existe tal variable de entorno, pero eso no tiene importancia ya que hay otras maneras de averiguarlo. El directorio de trabajo del script siempre será el directorio desde donde lo inicies (a menos que lo modifiques arbitrariamente), y también puedes utilizar los caracteres ".\" para especificar la ruta de trabajo actual, como hice en el script que te mostré.




Cita de: Tefaa en 16 Noviembre 2015, 21:40 PMno entiendo bien las comillas despues del Start

El comando Start toma dos argumentos, uno es el título, y el otro es la ruta del archivo, las comillas que ves las utilicé para poner un título vacío, puedes poner lo que quieras o dejar un título vacío como hice yo, pero no las elimines.

Saludos








Tefaa

Cita de: Eleкtro en 16 Noviembre 2015, 22:10 PM
Al menos yo no se darte una respuesta lógica a ese problema por que me parece un comportamiento extraño, suponiendo que no sea por un fallo de I/O de la lectora o tal vez un mal estado del DVD (que segurisimamente no lo es, pero es lo único que me parece que podría explicar algo así).

Pienso que el código que tienes debería funcionarte en el DVD, de hecho como ya has mencionado te funciona si lo usas en un disco físico.

También se me ocurre que tal vez por algún motivo el directorio de trabajo del script cambie cuando lo inicias desde el DVD. Puedes comprobarlo con el comando Echo %CD%.

Intenta explicar exactamente lo que sucede, que significa "no funciona" para ti ...con más detalles, y por supuesto prueba el código que mostré de todas formas y añádele el comando que he mencionado para revisar cual es el directorio de trabajo actual cuando inicias el script.




No, no existe tal variable de entorno, pero eso no tiene importancia ya que hay otras maneras de averiguarlo. El directorio de trabajo del script siempre será el directorio desde donde lo inicies (a menos que lo modifiques arbitrariamente), y también puedes utilizar los caracteres ".\" para especificar la ruta de trabajo actual, como hice en el script que te mostré.




El comando Start toma dos argumentos, uno es el título, y el otro es la ruta del archivo, las comillas que ves las utilicé para poner un título vacío, puedes poner lo que quieras o dejar un título vacío como hice yo, pero no las elimines.

Saludos

Excelente Master! Grabe el dvd y anduvo.
A lo que me refiero con que no anda es como dijiste, en el disco físico me anda y cuando lo grabe al dvd no anda. Así de simple (Con mi código); con tu código anduvo de mil maravillas. (termino siendo una mezcla de ambos por si te interesa).

Lo que me quedo duda es si el [S/N] Puede salir abajo de la pregunta y no al costado?
Gracias.

Saludos

Eleкtro

Cita de: Tefaa en 16 Noviembre 2015, 22:25 PMLo que me quedo duda es si el [S/N] Puede salir abajo de la pregunta y no al costado?

Simplemente usa el comando Echo para formular la pregunta:

Código (dos) [Seleccionar]
Echo Esta seguro que desea ejecutar el DVD2?
Choice /C "SN"


saludos








Tefaa

Cita de: Eleкtro en 17 Noviembre 2015, 07:56 AM
Simplemente usa el comando Echo para formular la pregunta:

Código (dos) [Seleccionar]
Echo Esta seguro que desea ejecutar el DVD2?
Choice /C "SN"


saludos

Claro como el agua! Como no lo había pensado TAN OBVIO.
Estuve viendo tu perfil y vi que te dedicas a todo programación en batch. Me encantaría poder darme cuenta así de fácil como lo viste vos.

Yo programo en Python (1er año de la facu el que viene arranco C).
Y te digo la verdad aveces no veo las cosas tan claras. Algún tip ?  (Se entiende mi pregunta ? Es tan obvio lo que había que hacer que no entiendo como no lo vi.)

Saludos

Stéfano.

Eleкtro

#7
Cita de: Tefaa en 17 Noviembre 2015, 15:39 PMEstuve viendo tu perfil y vi que te dedicas a todo programación en batch. Me encantaría poder darme cuenta así de fácil como lo viste vos.

Lo básico de Batch se aprende "en un día" y lo avanzado en "dos", luego ya es cuestión de recordar según pasan los años, es un lenguaje muy fácil.

Yo desarrollo más que nada en Vb.Net; hace años que no manejo Batch para cosas personales, excepto para ayudar en el foro o para desarrollar scripts insignificantes que realicen una pequeña tarea sin necesitar implementar el algoritmo en un lenguaje de más alto nivel (aunque sea para añadir control de errores), por que sinceramente, utilizar Batch para cualquier proyecto delicado, serio o profesional es perder el tiempo.




Cita de: Tefaa en 17 Noviembre 2015, 15:39 PMaveces no veo las cosas tan claras. Algún tip ?  (Se entiende mi pregunta ? Es tan obvio lo que había que hacer que no entiendo como no lo vi.)

La aplicación Choice.exe tiene unas "reglas" que no se pueden alterar, me refiero a que el output se envía de esa manera (el "S/N" a la derecha) así que simplemente la lógica empleada es buscar un sustituto para escribir la pregunta, y no hay más sustituto que el comando Echo para imprimir un string en la consola. Era un problema demasiado sencillo :P.

Simplemente es una obviedad cómo tú dices, ¿qué tip puedo darte entonces?, no se, ¿comer mucho pescado para ejercitar la mente? xD.

Supongo que la práctica en el lenguaje también influye a la hora de hallar soluciones, no es algo que deba preocuparte, a todos nos pasa. Al escribir un algoritmo siempre podemos estar ignorando una manera más sencilla y/o más optimizada de hacer lo mismo, y luego nos damos cuenta.

Saludos