Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: daniel.r.23 en 18 Febrero 2013, 23:15 pm



Título: pulsaciones en batch
Publicado por: daniel.r.23 en 18 Febrero 2013, 23:15 pm
Buenas tardes a todos, ya hace bastante dias vengo estudiando la gran mayoria de los temas relacionado con batch sacando, viendo y formulando ideas para un pequeño prog.
La cuestion de este post es que no logro saber como hacer con batch o batch y VBScript para que en un determinado menu dentro del .bat al presionar la tecla Esc me vuelva al menu anterior a ese.
Esto ya hace tres dias que lo vengo viendo y no logro hacer nada. Le paso mi cod para que vean como viene la mano.

Código
  1. @echo off
  2.  
  3. title: FALTANTES DISCO     .:DANIEL RAMOS:.
  4.  
  5. setlocal enabledelayedexpansion
  6.  
  7. mode con cols=66
  8. mode con lines=20
  9. cls
  10.  
  11.  
  12. :Menu
  13. cls
  14. color 0F
  15.  
  16. echo  ****************************************************************
  17. echo  *  *           Obtener Lista Faltantes Actulizada                                          *  *
  18. echo  *  *                      Daniel Ramos                                                            *  *
  19. echo  *  ************************************************************
  20. echo  *                                                                                                    *
  21. echo  *  Opciones:                                                   *
  22. echo  *                                                              *
  23. echo  *                                                              *
  24. echo  *  1 - Comparar                                                *
  25. echo  *  2 - Separar por comprador                                   *
  26. echo  *  3 - Imprimir                                                *
  27. echo  *  4 - Salir                                                   *
  28. echo  *                                                              *
  29. echo  *                                                              *
  30. echo  *                                                              *
  31. echo  *                                                              *
  32. echo  *                                                              *
  33. echo  *                                                              *
  34. echo  ****************************************************************
  35. set /p opc=Opci¢n:
  36. If %opc% == 1 goto :Comparar
  37. If %opc% == 2 goto :Separar
  38. If %opc% == 3 goto :Imprimir
  39. If %opc% == 4 goto :Salir
  40.  
  41. :Comparar
  42. echo  ****************************************************************
  43. echo  *  *           Obtener Lista Faltantes Actulizada           *  *
  44. echo  *  *                      Daniel Ramos                      *  *
  45. echo  *  **********************************************************  *
  46. echo  *                                                              *
  47. echo  *                                                              *
  48. echo  *                                                              *
  49. echo  *                                                              *
  50. echo  *                                                              *
  51. echo  *                                                              *
  52. echo  *         Ingrese el nombre y la extension del archivo         *
  53. echo  *                                                              *
  54. echo  *                                                              *
  55. echo  *                   Ejemplo: faltantes.txt                     *
  56. echo  *                                                              *
  57. echo  *                                                              *
  58. echo  *                                                ***************
  59. echo  *                                                * ESC = ATRAS *
  60. echo  ****************************************************************
  61. set /p x1=Aarchivo previamente procesado:
  62.  
  63.  
  64. del tempfile.txt
  65. set /a strlength=0
  66. set /a num=0
  67. If NOT EXIST tempfile.txt (
  68. For %%R In (tempfile.txt) Do (
  69. "%%R" > tempfile.txt
  70. cls
  71. )
  72. )
  73.  
  74. ECHO %x1%> tempfile.txt
  75.  
  76. FOR %%? IN (tempfile.txt) DO (
  77. set /a strlength+=%%~z?
  78. set /a strlength-=2
  79. )
  80.  
  81. set /a num+=46-%strlength%
  82. set "texto=*  Archivo 1 : "
  83. set "texto=%texto%%x1%"
  84. set /a "x = 1"
  85. set "espacio= "
  86.  
  87. :while1
  88. if %x% leq %num% (
  89. set /a "x = x + 1"
  90. set "espacio=%espacio% "
  91. goto :while1
  92. )
  93.  
  94. set "texto=%texto%%espacio% *"
  95. del tempfile.txt
  96.  
  97.  
  98. cls
  99. echo  ****************************************************************
  100. echo  *  *           Obtener Lista Faltantes Actulizada           *  *
  101. echo  *  *                      Daniel Ramos                      *  *
  102. echo  *  **********************************************************  *
  103. echo  *                                                              *
  104. echo  *                                                              *
  105. echo  *         Ingrese el nombre y la extension del archivo         *
  106. echo  *                                                              *
  107. echo  *                                                              *
  108. echo  %texto%
  109. echo  *  Archivo 2 :                                                 *
  110. echo  *                                                              *
  111. echo  *                                                              *
  112. echo  *                                                              *
  113. echo  *                                                              *
  114. echo  *                                                              *
  115. echo  *                                                ***************
  116. echo  *                                                * ESC = ATRAS *
  117. echo  ****************************************************************
  118. set /p "x2= Archivo a procesar: "
  119.  
  120. set /a length=0
  121. set /a numero=0
  122. set "text=*  Archivo 2 : "
  123. set "text=%text%%x2%"
  124. set /a "y = 1"
  125. set "esp= "
  126.  
  127. If NOT EXIST tempfile.txt (
  128. For %%R In (tempfile.txt) Do (
  129. "%%R" > tempfile.txt
  130. cls
  131. )
  132. )
  133.  
  134. ECHO %x2% > tempfile.txt
  135.  
  136. FOR %%? IN (tempfile.txt) DO (
  137. set /a length+=%%~z?
  138. set /a length-=3
  139. )
  140.  
  141. set /a numero+=46-%length%
  142.  
  143.  
  144. :while2
  145. if %y% leq %numero% (
  146. set /a "y = y + 1"
  147. set "esp=%esp% "
  148. goto :while2
  149. )
  150.  
  151. set "text=%text%%esp% *"
  152.  
  153. del tempfile.txt
  154.  
  155. cls
  156. echo  ****************************************************************
  157. echo  *  *           Obtener Lista Faltantes Actulizada           *  *
  158. echo  *  *                      Daniel Ramos                      *  *
  159. echo  *  **********************************************************  *
  160. echo  *                                                              *
  161. echo  *                                                              *
  162. echo  *         Ingrese el nombre y la extension del archivo         *
  163. echo  *                                                              *
  164. echo  *                                                              *
  165. echo  %texto%
  166. echo  %text%
  167. echo  *                                                              *
  168. echo  *                                                              *
  169. echo  *                                                              *
  170. echo  *                Presione enter para comenzar..                *
  171. echo  *                                                              *
  172. echo  *                                                ***************
  173. echo  *                                                * ESC = ATRAS *
  174. echo  ****************************************************************
  175.  
  176. set /a OuterVar=1
  177. set /a InnerVar=0
  178. del Fin.txt
  179.  
  180. If NOT EXIST Fin.txt (
  181. For %%R In (Fin.txt) Do (
  182. "%%R" > Fin.txt
  183. cls
  184. )
  185. )
  186.  
  187. REM Acá comienza el Código D23_1 el cual se encarga de comparar y copiar
  188. REM los datos del archivo existene "procesado" con el "aún no procesado".
  189.  
  190. For /F "tokens=* delims=" %%I In (%x1%) Do (
  191. echo %%I
  192. For /F "tokens=1 delims= " %%M In ("%%I") Do (
  193. echo %%M
  194. For /F "tokens=1 delims= " %%N In (%x2%) Do (
  195. If %%M == %%N (
  196. echo %%I >> Fin.txt
  197. )
  198. )
  199. )
  200. )
  201.  
  202. REM Finaliza Código D23_1
  203.  
  204. REM Acá comienza el Código D23_2 el cual se encarga de comparar y copiar
  205. REM los datos del archivo existene "aún no procesado" con el "procesado".
  206.  
  207. For /F "tokens=* delims=" %%I In (%x2%) Do (
  208. For /F "tokens=1 delims= " %%M In ("%%I") Do (
  209. For /F "tokens=1 delims= " %%L In (Fin.txt) Do (
  210. If %%M == %%L (
  211. set /a InnerVar+= %OuterVar%
  212. )
  213. )
  214. if !InnerVar! neq %OuterVar% (
  215. echo %%I >> Fin.txt
  216. ) else (
  217. set /a InnerVar-= !InnerVar!
  218. )
  219. )
  220. )
  221.  
  222.  
  223. For /F "tokens=* delims=" %%I In (%x1%) Do (
  224. For /F "tokens=1 delims= " %%M In ("%%I") Do (
  225. For /F "tokens=1 delims= " %%L In (Fin.txt) Do (
  226. If %%M == %%L (
  227. set /a InnerVar+= %OuterVar%
  228. )
  229. )
  230. if !InnerVar! neq %OuterVar% (
  231. echo %%I >> Fin.txt
  232. ) else (
  233. set /a InnerVar-= !InnerVar!
  234. )
  235. )
  236. )
  237.  
  238.  
  239. REM Finaliza Código D23_2
  240.  
  241. cls
  242. echo  ****************************************************************
  243. echo  *  *           Obtener Lista Faltantes Actulizada           *  *
  244. echo  *  *                      Daniel Ramos                      *  *
  245. echo  *  **********************************************************  *
  246. echo  *                                                              *
  247. echo  *                                                              *
  248. echo  *                                                              *
  249. echo  *                                                              *
  250. echo  *                                                              *
  251. echo  *                                                              *
  252. echo  *                      Proceso Finalizado                      *
  253. echo  *                 Presione Enter Para Continuar                *
  254. echo  *                                                              *
  255. echo  *                                                              *
  256. echo  *                                                              *
  257. echo  *                                                              *
  258. echo  *                                                              *
  259. echo  *                                                              *
  260. echo  ****************************************************************
  261. "C:\Program Files (x86)\OpenOffice.org 3\program\scalc.exe" Fin.txt
  262. goto :Menu
  263.  
  264.  
  265. :Imprimir
  266. cls
  267. echo  ****************************************************************
  268. echo  *  *           Obtener Lista Faltantes Actulizada           *  *
  269. echo  *  *                      Daniel Ramos                      *  *
  270. echo  *  **********************************************************  *
  271. echo  *                                                              *
  272. echo  *                                                              *
  273. echo  *                                                              *
  274. echo  *                                                              *
  275. echo  *                                                              *
  276. echo  *                                                              *
  277. echo  *                       En Construcción                        *
  278. echo  *                 Presione Enter Para Continuar                *
  279. echo  *                                                              *
  280. echo  *                                                              *
  281. echo  *                                                              *
  282. echo  *                                                              *
  283. echo  *                                                              *
  284. echo  *                                                              *
  285. echo  ****************************************************************
  286. goto :Menu
  287.  
  288. :Separar
  289. cls
  290. echo  ****************************************************************
  291. echo  *  *           Obtener Lista Faltantes Actulizada           *  *
  292. echo  *  *                      Daniel Ramos                      *  *
  293. echo  *  **********************************************************  *
  294. echo  *                                                              *
  295. echo  *                                                              *
  296. echo  *                                                              *
  297. echo  *                                                              *
  298. echo  *                                                              *
  299. echo  *                                                              *
  300. echo  *                       En Construcción                        *
  301. echo  *                 Presione Enter Para Continuar                *
  302. echo  *                                                              *
  303. echo  *                                                              *
  304. echo  *                                                              *
  305. echo  *                                                              *
  306. echo  *                                                              *
  307. echo  *                                                              *
  308. echo  ****************************************************************
  309. goto :Menu
  310.  
  311.  
  312.  
  313. :Salir
  314.  
  315.  


Bueno acá las lineas del meú se corrieron pero bue.
Espero su respuestas!! ayuda por favor!!!



[MOD] Se corrieron porque no usaste el botón "Insertar código", es obligatorio en el foro usar la etiqueta [ CODE ] para publicar scripts.


Título: Re: pulsaciones en batch
Publicado por: Eleкtro en 19 Febrero 2013, 00:23 am
No puedes hacer eso en Batch (ni ayudarte con un VBS), esto es Batch, no puedes capturar eventos del teclado, sólamente puedes hacer algo parecido con el comando choice:

Código
  1. Echo [1] opcion 1
  2. Echo [2] opcion 2
  3. Echo [3] opcion 3                      [A] Atras
  4.  
  5. Choice /C 123A /M "escoje una opcion"
  6. If %Errorlevel% EQU 4 (Goto :Etiqueta)
  7. Echo has elegido la opción %ERRORLEVEL%

http://foro.elhacker.net/scripting/batch_code_punto_de_venta_resuelto-t369481.0.html;msg1776205#msg1776205
http://foro.elhacker.net/scripting/interpretar_una_palabra_con_otra_o_remplazarla-t375956.0.html;msg1804159#msg1804159

Saludos


Título: Re: pulsaciones en batch
Publicado por: daniel.r.23 en 20 Febrero 2013, 13:14 pm
Citar
Código:
    Echo [1] opcion 1
    Echo [2] opcion 2
    Echo [3] opcion 3                      [A] Atras
     
    Choice /C 123A /M "escoje una opcion"
    If %Errorlevel% EQU 4 (Goto :Etiqueta)
    Echo has elegido la opción %ERRORLEVEL%

Esto me sirve pero si por ejemplo presiono A me va a la pantalla anterior, pero si quiero escribir algo ejemplo libro.txt no me deja y no tengo forma, alguna idea?


Título: Re: pulsaciones en batch
Publicado por: Eleкtro en 20 Febrero 2013, 13:24 pm
Esto me sirve
pero si quiero escribir algo ejemplo libro.txt no me deja

Para eso sólo puedes usar "Set /P"r.

saludos


Título: Re: pulsaciones en batch
Publicado por: daniel.r.23 en 20 Febrero 2013, 13:41 pm
Para eso sólo puedes usar "Set /P"r.

saludos

Disculpa pero no estoy entendiendo.
te muestro el cod y la idea,

Código
  1. @ECHO OFF
  2.  
  3. mode con cols=66
  4. mode con lines=20
  5. cls
  6.  
  7.  
  8. :Menu
  9. cls
  10. color 0F
  11.  
  12. echo  ****************************************************************
  13. echo  *  *           Obtener Lista Faltantes Actulizada           *  *
  14. echo  *  *                      Daniel Ramos                      *  *
  15. echo  *  **********************************************************  *
  16. echo  *                                                              *
  17. echo  *  Opciones:                                                   *
  18. echo  *                                                              *
  19. echo  *                                                              *
  20. echo  *  1 - Comparar                                                *
  21. echo  *  2 - Separar por comprador                                   *
  22. echo  *  3 - Imprimir                                                *
  23. echo  *  4 - Salir                                                   *
  24. echo  *                                                              *
  25. echo  *                                                              *
  26. echo  *                                                              *
  27. echo  *                                                              *
  28. echo  *                                                              *
  29. echo  *                                                              *
  30. echo  ****************************************************************
  31. set /p opc=Opci¢n:
  32. If %opc% == 1 goto :Comparar
  33. If %opc% == 4 goto :Salir
  34.  
  35.  
  36. :Comparar
  37. echo  ****************************************************************
  38. echo  *  *           Obtener Lista Faltantes Actulizada           *  *
  39. echo  *  *                      Daniel Ramos                      *  *
  40. echo  *  **********************************************************  *
  41. echo  *                                                              *
  42. echo  *                                                              *
  43. echo  *                                                              *
  44. echo  *                                                              *
  45. echo  *                                                              *
  46. echo  *                                                              *
  47. echo  *         Ingrese el nombre y la extension del archivo         *
  48. echo  *                                                              *
  49. echo  *                                                              *
  50. echo  *                   Ejemplo: faltantes.txt                     *
  51. echo  *                                                              *
  52. echo  *                                                              *
  53. echo  *                                                ***************
  54. echo  *                                                *  [A] ATRAS  *
  55. echo  ****************************************************************
  56. Choice /C A /N /M "Aarchivo previamente procesado: "
  57. If %Errorlevel% EQU 4 (Goto :Menu)
  58. Echo has ingresado una cadena de caracteres
  59.  
  60. :Salir
  61.  

La idea es que al presionar A se vaya al otro menu, y si escribo una cadena de caracters este se guarde en una variable, en el choise no puedo poner un "set /p r=" y que quede esperando una cadena de caracteres.


Título: Re: pulsaciones en batch
Publicado por: Eleкtro en 20 Febrero 2013, 13:58 pm
La idea es que al presionar A se vaya al otro menu, y si escribo una cadena de caracters este se guarde en una variable, en el choise no puedo poner un "set /p r=" y que quede esperando una cadena de caracteres.

Lo que intento decirte es que sólo puedes escribir cadenas con "Set /P", con "Choice" sólo puedes escribir 1 dígito. No hay forma de hacer lo que pides (combinarlo), esto es Batch.

Saludos


Título: Re: pulsaciones en batch
Publicado por: daniel.r.23 en 20 Febrero 2013, 14:13 pm
Bien gracias.


Título: Re: pulsaciones en batch
Publicado por: daniel.r.23 en 20 Febrero 2013, 15:37 pm
estoy de nuevo, idea de como pasar el valor de un errorlevel a texto?
ejemplo
yo presiono la tecla h y el errorlevel es 104, ahora yo como muestro ese 104 como h en cmd ?


Título: Re: pulsaciones en batch
Publicado por: Eleкtro en 20 Febrero 2013, 16:16 pm
¿Como que si presionas la tecla "H" el errorlevel que te manda es 104?

El errorlevel, en el comando Choice, va del 1 al X aumentando de valor progresívamente,
por ejemplo en este comando, si elijes la letra "H", el errorlevel será 8, no 104 (que es el número decimal de la letra)

Código
  1. Choice /C ABCDEFGH

Lee la ayuda del comando:
Citar
NOTA:
La variable de entorno ERRORLEVEL está establecida como el índice de la
clave que se seleccionó en el conjunto de opciones. La primera opción
devuelve un valor de 1, la segunda un valor de 2 y así sucesivamente.
Si el usuario presiona una clave que no sea una opción válida, la
herramienta emite un sonido de advertencia. Si la herramienta detecta una
condición de error, devuelve un valor ERRORLEVEL de 255. Si el usuario
presiona CTRL+PAUSA o CTRL+C, la herramienta devuelve un valor
ERRORLEVEL 0. Cuando el usuario usa parámetros ERRORLEVEL en un
programa por lotes, los enumera en orden decreciente.


De todas formas si quieres pasar el %ERRORLEVEL% decimal a ASCII, aquí tienes:
Código
  1. cmd /c exit 104
  2. echo %=exitcodeAscii%

Saludos.


Título: Re: pulsaciones en batch
Publicado por: daniel.r.23 en 20 Febrero 2013, 17:02 pm
Acá me esta saliendo con ayuda del archivo Keyboard.dat

Código:
@ECHO OFF

mode con cols=66
mode con lines=20
cls

set char=
set text=Aarchivo previamente procesado:
set texto=%text%
:Menu
cls
color 0F

echo  ****************************************************************
echo  *  *           Obtener Lista Faltantes Actulizada           *  *
echo  *  *                      Daniel Ramos                      *  *
echo  *  **********************************************************  *
echo  *                                                              *
echo  *  Opciones:                                                   *
echo  *                                                              *
echo  *                                                              *
echo  *  1 - Comparar                                                *
echo  *  2 - Separar por comprador                                   *
echo  *  3 - Imprimir                                                *
echo  *  4 - Salir                                                   *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  ****************************************************************
set /p opc=Opci¢n:
If %opc% == 1 goto :Comparar
If %opc% == 4 goto :Salir


:Comparar
cls
echo  ****************************************************************
echo  *  *           Obtener Lista Faltantes Actulizada           *  *
echo  *  *                      Daniel Ramos                      *  *
echo  *  **********************************************************  *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *         Ingrese el nombre y la extension del archivo         *
echo  *                                                              *
echo  *                                                              *
echo  *                   Ejemplo: faltantes.txt                     *
echo  *                                                              *
echo  *                                                              *
echo  *                                              *****************
echo  *                                              *  [Esc] ATRAS  *
echo  ****************************************************************
echo  %text%
keyboard
if /I %errorlevel% == 27 (
goto :Menu
)
if /I %errorlevel% == 8 (
set text=%texto%
goto :Menu
)
if %errorlevel% == 13 (
goto :siguiente
)
call :caracter
set "texto=%text%"
set "text=%text%%char%"
goto :Comparar



:salir
exit


:Siguiente
cls
echo  ****************************************************************
echo  *  *           Obtener Lista Faltantes Actulizada           *  *
echo  *  *                      Daniel Ramos                      *  *
echo  *  **********************************************************  *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                  Esto si que es complicado                   *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                ***************
echo  *                                                *  [Z] ATRAS  *
echo  ****************************************************************
pause
goto :salir

:caracter

if %errorlevel% == 46 ( set char=.) 
if %errorlevel% == 49 ( set char=1)
if %errorlevel% == 50 ( set char=2)
if %errorlevel% == 51 ( set char=3)
if %errorlevel% == 52 ( set char=4)
if %errorlevel% == 53 ( set char=5)
if %errorlevel% == 54 ( set char=6)
if %errorlevel% == 55 ( set char=7)
if %errorlevel% == 56 ( set char=8)
if %errorlevel% == 57 ( set char=9)
if %errorlevel% == 65 ( set char=A)
if %errorlevel% == 66 ( set char=B)
if %errorlevel% == 67 ( set char=C)
if %errorlevel% == 68 ( set char=D)
if %errorlevel% == 69 ( set char=E)
if %errorlevel% == 70 ( set char=F)
if %errorlevel% == 71 ( set char=G)
if %errorlevel% == 72 ( set char=H)
if %errorlevel% == 73 ( set char=I)
if %errorlevel% == 74 ( set char=J)
if %errorlevel% == 75 ( set char=K)
if %errorlevel% == 76 ( set char=L)
if %errorlevel% == 77 ( set char=M)
if %errorlevel% == 78 ( set char=N)
if %errorlevel% == 79 ( set char=O)
if %errorlevel% == 80 ( set char=P)
if %errorlevel% == 81 ( set char=Q)
if %errorlevel% == 82 ( set char=R)
if %errorlevel% == 83 ( set char=S)
if %errorlevel% == 84 ( set char=T)
if %errorlevel% == 85 ( set char=U)
if %errorlevel% == 86 ( set char=V)
if %errorlevel% == 87 ( set char=W)
if %errorlevel% == 88 ( set char=X)
if %errorlevel% == 89 ( set char=Y)
if %errorlevel% == 90 ( set char=Z)
if %errorlevel% == 97 ( set char=a)
if %errorlevel% == 98 ( set char=b)
if %errorlevel% == 99 ( set char=c)
if %errorlevel% == 100 ( set char=d)
if %errorlevel% == 101 ( set char=e)
if %errorlevel% == 102 ( set char=f)
if %errorlevel% == 103 ( set char=g)
if %errorlevel% == 104 ( set char=h)
if %errorlevel% == 105 ( set char=i)
if %errorlevel% == 106 ( set char=j)
if %errorlevel% == 107 ( set char=k)
if %errorlevel% == 108 ( set char=l)
if %errorlevel% == 109 ( set char=m)
if %errorlevel% == 110 ( set char=n)
if %errorlevel% == 111 ( set char=o)
if %errorlevel% == 112 ( set char=p)
if %errorlevel% == 113 ( set char=q)
if %errorlevel% == 114 ( set char=r)
if %errorlevel% == 115 ( set char=s)
if %errorlevel% == 116 ( set char=t)
if %errorlevel% == 117 ( set char=u)
if %errorlevel% == 118 ( set char=v)
if %errorlevel% == 119 ( set char=w)
if %errorlevel% == 120 ( set char=x)
if %errorlevel% == 121 ( set char=y)
if %errorlevel% == 122 ( set char=z)