elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Crear un bat con cierta informacion.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear un bat con cierta informacion.  (Leído 2,981 veces)
Tefaa

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Crear un bat con cierta informacion.
« en: 16 Noviembre 2015, 07:39 am »

Hola, estaba creando el siguiente BAT.

Código
  1. @ECHO OFF
  2. :Menu
  3. cls
  4. color a
  5. echo Seleccione la opci¢n segun el DVD que desea ejecutar.
  6. echo 1. DVD1
  7. echo 2. DVD2
  8. echo 3. Salir
  9. set /p var=
  10. if %var%==1 goto :primero
  11. if %var%==2 goto :segundo
  12. if %var%==3 exit
  13. Pause>Nul
  14. if %var% GTR 3 echo Error
  15. goto :Menu
  16. :primero
  17. cls
  18. color a
  19. Echo Esta seguro que desea ejecutar el DVD1?
  20. Echo s o n?
  21. set /p var=
  22. if %var%==s START /D "DVD1" dvd1.exe
  23. if %var%==s echo.
  24. if %var%==s echo Ejecutando DVD1 . . .
  25. if %var%==s echo Presione una tecla para continuar . . .
  26. if %var%==s echo.
  27. if %var%==s pause>Nul
  28. if %var%==s goto :Menu
  29. if %var%==n goto :Menu
  30. Pause>Nul
  31. :segundo
  32. cls
  33. color a
  34. Echo Esta seguro que desea ejecutar el DVD2?
  35. Echo s o n?
  36. set /p var=
  37. if %var%==s START /D "DVD2" dvd2.exe
  38. if %var%==s echo.
  39. if %var%==s echo DVD2 . . .
  40. if %var%==s echo Presione una tecla para continuar . . .
  41. if %var%==s echo.
  42. if %var%==s pause>Nul
  43. if %var%==s goto :Menu
  44. if %var%==n goto :Menu
  45. 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!


« Última modificación: 16 Noviembre 2015, 08:36 am por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Crear un bat con cierta informacion.
« Respuesta #1 en: 16 Noviembre 2015, 08:49 am »

Que 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
  1. @ECHO OFF
  2.  
  3. Choice /C "SN" /M "Pregunta"
  4. If %ERRORLEVEL% EQU 1 (
  5. :: Si
  6. Start "" ".\DVD1\dvd1.exe"
  7. ) Else (
  8. :: No
  9. Start "" ".\DVD2\dvd2.exe"
  10. )
  11.  
  12. Pause>Nul

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

Saludos


En línea

Tefaa

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: Crear un bat con cierta informacion.
« Respuesta #2 en: 16 Noviembre 2015, 21:40 pm »

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
  1. @ECHO OFF
  2.  
  3. Choice /C "SN" /M "Pregunta"
  4. If %ERRORLEVEL% EQU 1 (
  5. :: Si
  6. Start "" ".\DVD1\dvd1.exe"
  7. ) Else (
  8. :: No
  9. Start "" ".\DVD2\dvd2.exe"
  10. )
  11.  
  12. 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)
« Última modificación: 16 Noviembre 2015, 21:55 pm por Tefaa » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Crear un bat con cierta informacion.
« Respuesta #3 en: 16 Noviembre 2015, 22:10 pm »

Entonces 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.



Hay 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é.



no 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
En línea

Tefaa

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: Crear un bat con cierta informacion.
« Respuesta #4 en: 16 Noviembre 2015, 22:25 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
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Crear un bat con cierta informacion.
« Respuesta #5 en: 17 Noviembre 2015, 07:56 am »

Lo 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
  1. Echo Esta seguro que desea ejecutar el DVD2?
  2. Choice /C "SN"

saludos
En línea

Tefaa

Desconectado Desconectado

Mensajes: 33



Ver Perfil
Re: Crear un bat con cierta informacion.
« Respuesta #6 en: 17 Noviembre 2015, 15:39 pm »

Simplemente usa el comando Echo para formular la pregunta:

Código
  1. Echo Esta seguro que desea ejecutar el DVD2?
  2. 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.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Crear un bat con cierta informacion.
« Respuesta #7 en: 17 Noviembre 2015, 21:40 pm »

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.

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.



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.)

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
« Última modificación: 17 Noviembre 2015, 21:43 pm por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Crear proxy web. Fallo reenviar información.
Java
beker 4 3,626 Último mensaje 10 Agosto 2010, 10:31 am
por beker
Crear un bat que valide informacion de un archivo
Scripting
dablind 1 2,318 Último mensaje 11 Diciembre 2010, 19:09 pm
por leogtz
Crear partición y conservar información.
Hardware
Embusterillo de bolsillo 1 2,232 Último mensaje 11 Enero 2011, 20:06 pm
por Aprendiz-Oscuro
Información para crear una web .
Desarrollo Web
anonimo12121 5 3,593 Último mensaje 28 Febrero 2012, 10:53 am
por Graphixx
Crear AP y Analizar la informacion
Hacking
markspitz15 1 2,369 Último mensaje 7 Agosto 2012, 10:22 am
por adastra
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines