pulsaciones en batch

Iniciado por daniel.r.23, 18 Febrero 2013, 23:15 PM

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

daniel.r.23

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 (dos) [Seleccionar]
@echo off

title: FALTANTES DISCO     .:DANIEL RAMOS:.

setlocal enabledelayedexpansion

mode con cols=66
mode con lines=20
cls


: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% == 2 goto :Separar
If %opc% == 3 goto :Imprimir
If %opc% == 4 goto :Salir

:Comparar
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  ****************************************************************
set /p x1=Aarchivo previamente procesado:


del tempfile.txt
set /a strlength=0
set /a num=0
If NOT EXIST tempfile.txt (
For %%R In (tempfile.txt) Do (
"%%R" > tempfile.txt
cls
)
)

ECHO %x1%> tempfile.txt

FOR %%? IN (tempfile.txt) DO (
set /a strlength+=%%~z?
set /a strlength-=2
)

set /a num+=46-%strlength%
set "texto=*  Archivo 1 : "
set "texto=%texto%%x1%"
set /a "x = 1"
set "espacio= "

:while1
if %x% leq %num% (
set /a "x = x + 1"
set "espacio=%espacio% "
goto :while1
)

set "texto=%texto%%espacio% *"
del tempfile.txt
 

cls
echo  ****************************************************************
echo  *  *           Obtener Lista Faltantes Actulizada           *  *
echo  *  *                      Daniel Ramos                      *  *
echo  *  **********************************************************  *
echo  *                                                              *
echo  *                                                              *
echo  *         Ingrese el nombre y la extension del archivo         *
echo  *                                                              *
echo  *                                                              *
echo  %texto%
echo  *  Archivo 2 :                                                 *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                ***************
echo  *                                                * ESC = ATRAS *
echo  ****************************************************************
set /p "x2= Archivo a procesar: "

set /a length=0
set /a numero=0
set "text=*  Archivo 2 : "
set "text=%text%%x2%"
set /a "y = 1"
set "esp= "

If NOT EXIST tempfile.txt (
For %%R In (tempfile.txt) Do (
"%%R" > tempfile.txt
cls
)
)

ECHO %x2% > tempfile.txt

FOR %%? IN (tempfile.txt) DO (
set /a length+=%%~z?
set /a length-=3
)

set /a numero+=46-%length%


:while2
if %y% leq %numero% (
set /a "y = y + 1"
set "esp=%esp% "
goto :while2
)

set "text=%text%%esp% *"

del tempfile.txt

cls
echo  ****************************************************************
echo  *  *           Obtener Lista Faltantes Actulizada           *  *
echo  *  *                      Daniel Ramos                      *  *
echo  *  **********************************************************  *
echo  *                                                              *
echo  *                                                              *
echo  *         Ingrese el nombre y la extension del archivo         *
echo  *                                                              *
echo  *                                                              *
echo  %texto%
echo  %text%
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                Presione enter para comenzar..                *
echo  *                                                              *
echo  *                                                ***************
echo  *                                                * ESC = ATRAS *
echo  ****************************************************************
pause > nul

set /a OuterVar=1
set /a InnerVar=0
del Fin.txt

If NOT EXIST Fin.txt (
For %%R In (Fin.txt) Do (
"%%R" > Fin.txt
cls
)
)

REM Acá comienza el Código D23_1 el cual se encarga de comparar y copiar
REM los datos del archivo existene "procesado" con el "aún no procesado".

For /F "tokens=* delims=" %%I In (%x1%) Do (
echo %%I
For /F "tokens=1 delims= " %%M In ("%%I") Do (
echo %%M
pause
For /F "tokens=1 delims= " %%N In (%x2%) Do (
If %%M == %%N (
echo %%I >> Fin.txt
)
)
)
)

REM Finaliza Código D23_1

REM Acá comienza el Código D23_2 el cual se encarga de comparar y copiar
REM los datos del archivo existene "aún no procesado" con el "procesado".

For /F "tokens=* delims=" %%I In (%x2%) Do (
For /F "tokens=1 delims= " %%M In ("%%I") Do (
For /F "tokens=1 delims= " %%L In (Fin.txt) Do (
If %%M == %%L (
set /a InnerVar+= %OuterVar%
)
)
if !InnerVar! neq %OuterVar% (
echo %%I >> Fin.txt
) else (
set /a InnerVar-= !InnerVar!
)
)
)


For /F "tokens=* delims=" %%I In (%x1%) Do (
For /F "tokens=1 delims= " %%M In ("%%I") Do (
For /F "tokens=1 delims= " %%L In (Fin.txt) Do (
If %%M == %%L (
set /a InnerVar+= %OuterVar%
)
)
if !InnerVar! neq %OuterVar% (
echo %%I >> Fin.txt
) else (
set /a InnerVar-= !InnerVar!
)
)
)


REM Finaliza Código D23_2

cls
echo  ****************************************************************
echo  *  *           Obtener Lista Faltantes Actulizada           *  *
echo  *  *                      Daniel Ramos                      *  *
echo  *  **********************************************************  *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                      Proceso Finalizado                      *
echo  *                 Presione Enter Para Continuar                *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  ****************************************************************
pause > nul
"C:\Program Files (x86)\OpenOffice.org 3\program\scalc.exe" Fin.txt
goto :Menu


:Imprimir
cls
echo  ****************************************************************
echo  *  *           Obtener Lista Faltantes Actulizada           *  *
echo  *  *                      Daniel Ramos                      *  *
echo  *  **********************************************************  *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                       En Construcción                        *
echo  *                 Presione Enter Para Continuar                *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  ****************************************************************
pause > nul
goto :Menu

:Separar
cls
echo  ****************************************************************
echo  *  *           Obtener Lista Faltantes Actulizada           *  *
echo  *  *                      Daniel Ramos                      *  *
echo  *  **********************************************************  *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                       En Construcción                        *
echo  *                 Presione Enter Para Continuar                *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  *                                                              *
echo  ****************************************************************
pause > nul
goto :Menu



:Salir
Exit

endlocal



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.

Eleкtro

#1
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 (dos) [Seleccionar]
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%


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








daniel.r.23

Citar    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?

Eleкtro

Cita de: daniel.r.23 en 20 Febrero 2013, 13:14 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








daniel.r.23

Cita de: EleKtro H@cker en 20 Febrero 2013, 13:24 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 (DOS) [Seleccionar]

@ECHO OFF

mode con cols=66
mode con lines=20
cls


: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
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  *                                                *  [A] ATRAS  *
echo  ****************************************************************
Choice /C A /N /M "Aarchivo previamente procesado: "
If %Errorlevel% EQU 4 (Goto :Menu)
Echo has ingresado una cadena de caracteres
PAUSE

:Salir
Exit


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.

Eleкtro

Cita de: daniel.r.23 en 20 Febrero 2013, 13:41 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








daniel.r.23


daniel.r.23

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 ?

Eleкtro

¿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 (dos) [Seleccionar]
Choice /C ABCDEFGH

Lee la ayuda del comando:
CitarNOTA:
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 (dos) [Seleccionar]
cmd /c exit 104
echo %=exitcodeAscii%


Saludos.








daniel.r.23

Acá me esta saliendo con ayuda del archivo Keyboard.dat


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