Ms-Dos - Ayuda en batch

 
Vista:
sin imagen de perfil

Ayuda en batch

Publicado por Near (1 intervención) el 21/09/2016 03:44:14
Lo que pasa es lo siguiente. Tengo un codigo que simula a un juego llamado Hack run. El codigo en sí corre bien, excepto cuando un comando en especial no es ejecutado. Tengo los comandos type, help, ls, exit, run, etc... Pero si escribo por ejemplo "DsD
qwjg" sale un mensaje rapidamente diciendo: No se esperaba en este momento. Y se cierra. Pero eso no deberia pasar, porque puse que si se ingresaba cualquier otro comando, volviera al inicio, en fin, aqui esta el codigo para que me puedan ayudar con esto: (Ojo, los demás directorios si están, pero no los puse para simplificar espacio, solo puse el que cumple la función de volver en caso de no haber coincidencias, PD: El mismo código lo ejecuté en un debugger -Take Command v20.0- y funcionó perfectamente, y sin este error, por eso no me explico la causa de este)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
@echo off
color 0a
set an=0
:local
set son=
set /p son=^localhost^>
 
if "%son%" == "" goto :re
 
 
if "%son%" == " " goto :re
 
 
if "%son%" == "ls" goto :list
 
 
if "%son%" == "l" goto :list
 
 
if "%son%" == "type readme" goto :made
 
 
if "%son%" == "t readme" goto :made
 
 
if "%son%" == "clr" goto clean
 
 
if %son% == h goto menu
 
 
if %son% == help goto menu
 
 
if %son% == run goto hc
 
 
if "%son%" == "r" goto hc
 
 
if %son% == type goto how
 
 
if %son% == t goto how
 
 
if "%son%" == "e" (
goto :finish
)
 
 
if "%son%" == "exit" (
goto :finish
) else (goto :incoc)
 
:incoc
echo unrecognized command: '%son%'
goto local
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Ayuda en batch

Publicado por Antoni Masana (811 intervenciones) el 21/09/2016 13:01:16
La solución es muy simple.

En el formato que utilizas el comando IF ha de existir un cadena1 y una cadena2 para que funcione bien.


1
2
3
4
5
6
C:\Tmp>IF /?
Realiza el procesamiento condicional de los programas por lotes.
 
IF [NOT] ERRORLEVEL número comando
IF [NOT] cadena1==cadena2 comando
IF [NOT] EXIST archivo comando

Si pones:

1
IF %son% == h goto Help

Cuando se de la circunstancia que comentas Pero si escribo por ejemplo "DsD qwjg".

El sistema reemplaza la variable y este es el resultado:

1
IF DsD qwjg == h goto Help

Y no lo sabe interpretar.

Ahora bien, si ponemos unas comillas el resultado es otro:

1
IF "DsD qwjg" == "h" goto Help

La cadena1 es, comillas incluidas "DsD qwjg"
La cadena2 es, comillas incluidas "h"


Y si cuando entra un campo vacío o espacios el resultado es:

1
2
3
IF     ==  h  goto Help       REM  -- Esto da un error
IF ""  == "h" goto Help       REM  -- Esto funciona bien
IF " " == "h" goto Help       REM  -- Esto funciona bien

Revisa las líneas 29, 32, 35, 41 y 44

Saludos
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar