duda comandos batch

Iniciado por 7emiliosk8, 1 Marzo 2017, 01:26 AM

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

7emiliosk8

hola tengo el siguiente codigo y tengo una duda en estas linas
agradeceria si alguien me pudiera explicar brevemente que estan haciendo, saludos


Código (bash) [Seleccionar]
setlocal enabledelayedexpansion

Código (bash) [Seleccionar]
set cadena1=%1

Código (bash) [Seleccionar]
if "!cadena:~%contador%,1!" neq "" set /a "contador+=1" & call :CreaLetra !cadena:~%contador%,1! & goto ciclo

Código (bash) [Seleccionar]
set palabra1=
se supone que set es para declarar una varaible, pero ahi a palabra1 no se le asigna nada

Código (bash) [Seleccionar]
set palabra1=%palabra1% ^ ######  



Código (bash) [Seleccionar]


@echo off
rem Realizado por morenochico
rem distribuido bajo la licencia creative commons con los atributos Attribution y rem NonCommercial

setlocal enabledelayedexpansion
set "contador=0"
set cadena1=%1
set cadena=%cadena1:~0,7%

rem esto es para ver las palabras en chico echo %cadena%

set enviado=
set palabra1=
set palabra2=
set palabra3=
set palabra4=
set palabra5=
set palabra6=
set enviado=

:ciclo
if "!cadena:~%contador%,1!" neq "" set /a "contador+=1" & call :CreaLetra !cadena:~%contador%,1! & goto ciclo
goto imprime
goto:eof

:CreaLetra
if "%1" == "a" call :Letra_a
if "%1" == "b" call :Letra_b
if "%1" == "c" call :Letra_c
if "%1" == "d" call :Letra_d
if "%1" == "e" call :Letra_e
if "%1" == "f" call :Letra_f
if "%1" == "g" call :Letra_g
if "%1" == "h" call :Letra_h
if "%1" == "i" call :Letra_i
if "%1" == "j" call :Letra_j
if "%1" == "k" call :Letra_k
if "%1" == "l" call :Letra_l
if "%1" == "m" call :Letra_m
if "%1" == "n" call :Letra_n
if "%1" == "o" call :Letra_o
if "%1" == "p" call :Letra_p
if "%1" == "q" call :Letra_q
if "%1" == "r" call :Letra_r
if "%1" == "s" call :Letra_s
if "%1" == "t" call :Letra_t
if "%1" == "u" call :Letra_u
if "%1" == "v" call :Letra_v
if "%1" == "w" call :Letra_w
if "%1" == "x" call :Letra_x
if "%1" == "y" call :Letra_y
if "%1" == "z" call :Letra_z
if "%1" == "" call :espacio
goto:EOF
:Letra_a  
set palabra1=%palabra1% ^   ##    
set palabra2=%palabra2% ^  #  #  
set palabra3=%palabra3% ^ #    #  
set palabra4=%palabra4% ^ ######  
set palabra5=%palabra5% ^ #    #  
set palabra6=%palabra6% ^ #    #  
goto:EOF  
:Letra_b  
set palabra1=%palabra1% ^ #####  
set palabra2=%palabra2% ^ #    #  
set palabra3=%palabra3% ^ #####  
set palabra4=%palabra4% ^ #    #  
set palabra5=%palabra5% ^ #    #  
set palabra6=%palabra6% ^ #####  
goto:EOF  
:Letra_c
set palabra1=%palabra1% ^ #####  
set palabra2=%palabra2% ^ #      
set palabra3=%palabra3% ^ #      
set palabra4=%palabra4% ^ #      
set palabra5=%palabra5% ^ #      
set palabra6=%palabra6% ^ #####  
goto:EOF  
:Letra_d  
set palabra1=%palabra1% ^ #####  
set palabra2=%palabra2% ^ #    #  
set palabra3=%palabra3% ^ #    #  
set palabra4=%palabra4% ^ #    #  
set palabra5=%palabra5% ^ #    #  
set palabra6=%palabra6% ^ #####  
goto:EOF  
:Letra_e  
set palabra1=%palabra1% ^ ######  
set palabra2=%palabra2% ^ #      
set palabra3=%palabra3% ^ #####  
set palabra4=%palabra4% ^ #      
set palabra5=%palabra5% ^ #      
set palabra6=%palabra6% ^ ######  
goto:EOF  
:Letra_f  
set palabra1=%palabra1% ^ ######  
set palabra2=%palabra2% ^ #      
set palabra3=%palabra3% ^ #####  
set palabra4=%palabra4% ^ #      
set palabra5=%palabra5% ^ #      
set palabra6=%palabra6% ^ #      
goto:EOF  
:Letra_g  
set palabra1=%palabra1% ^ ####    
set palabra2=%palabra2% ^ #    #  
set palabra3=%palabra3% ^ #      
set palabra4=%palabra4% ^ #  ###  
set palabra5=%palabra5% ^ #    #  
set palabra6=%palabra6% ^ ####    
goto:EOF  
:Letra_h  
set palabra1=%palabra1% ^ #    #  
set palabra2=%palabra2% ^ #    #  
set palabra3=%palabra3% ^ ######  
set palabra4=%palabra4% ^ #    #  
set palabra5=%palabra5% ^ #    #  
set palabra6=%palabra6% ^ #    #  
goto:EOF  
:Letra_i  
set palabra1=%palabra1% ^   #    
set palabra2=%palabra2% ^   #    
set palabra3=%palabra3% ^   #    
set palabra4=%palabra4% ^   #    
set palabra5=%palabra5% ^   #    
set palabra6=%palabra6% ^   #    
goto:EOF  
:Letra_j  
set palabra1=%palabra1% ^      #  
set palabra2=%palabra2% ^      #  
set palabra3=%palabra3% ^      #  
set palabra4=%palabra4% ^      #  
set palabra5=%palabra5% ^ #    #  
set palabra6=%palabra6% ^ ####    
goto:EOF  
:Letra_k  
set palabra1=%palabra1% ^ #    #  
set palabra2=%palabra2% ^ #   #  
set palabra3=%palabra3% ^ ####    
set palabra4=%palabra4% ^ #  #    
set palabra5=%palabra5% ^ #   #  
set palabra6=%palabra6% ^ #    #  
goto:EOF  
:Letra_l  
set palabra1=%palabra1% ^ #      
set palabra2=%palabra2% ^ #      
set palabra3=%palabra3% ^ #      
set palabra4=%palabra4% ^ #      
set palabra5=%palabra5% ^ #      
set palabra6=%palabra6% ^ ######  
goto:EOF  
:Letra_m  
set palabra1=%palabra1% ^ #    #  
set palabra2=%palabra2% ^ ##  ##  
set palabra3=%palabra3% ^ # ## #  
set palabra4=%palabra4% ^ #    #  
set palabra5=%palabra5% ^ #    #  
set palabra6=%palabra6% ^ #    #  
goto:EOF  
:Letra_n  
set palabra1=%palabra1% ^ #    #  
set palabra2=%palabra2% ^ ##   #  
set palabra3=%palabra3% ^ # #  #  
set palabra4=%palabra4% ^ #  # #  
set palabra5=%palabra5% ^ #   ##  
set palabra6=%palabra6% ^ #    #  
goto:EOF  
:Letra_o  
set palabra1=%palabra1% ^  ####  
set palabra2=%palabra2% ^ #    #  
set palabra3=%palabra3% ^ #    #  
set palabra4=%palabra4% ^ #    #  
set palabra5=%palabra5% ^ #    #  
set palabra6=%palabra6% ^  ####  
goto:EOF  
:Letra_p  
set palabra1=%palabra1% ^ #####  
set palabra2=%palabra2% ^ #    #  
set palabra3=%palabra3% ^ #    #  
set palabra4=%palabra4% ^ #####  
set palabra5=%palabra5% ^ #      
set palabra6=%palabra6% ^ #      
goto:EOF  
:Letra_q  
set palabra1=%palabra1% ^  ####  
set palabra2=%palabra2% ^ #    #  
set palabra3=%palabra3% ^ #    #  
set palabra4=%palabra4% ^ #  # #  
set palabra5=%palabra5% ^ #   #  
set palabra6=%palabra6% ^  ### #  
goto:EOF  
:Letra_r  
set palabra1=%palabra1% ^ #####  
set palabra2=%palabra2% ^ #    #  
set palabra3=%palabra3% ^ #    #  
set palabra4=%palabra4% ^ #####  
set palabra5=%palabra5% ^ #   #  
set palabra6=%palabra6% ^ #    #  
goto:EOF  
:Letra_s  
set palabra1=%palabra1% ^  ####  
set palabra2=%palabra2% ^ #      
set palabra3=%palabra3% ^  ####  
set palabra4=%palabra4% ^      #  
set palabra5=%palabra5% ^ #    #  
set palabra6=%palabra6% ^  ####  
goto:EOF  
:Letra_t  
set palabra1=%palabra1% ^ #####  
set palabra2=%palabra2% ^   #    
set palabra3=%palabra3% ^   #    
set palabra4=%palabra4% ^   #    
set palabra5=%palabra5% ^   #    
set palabra6=%palabra6% ^   #    
goto:EOF  
:Letra_u  
set palabra1=%palabra1% ^ #    #  
set palabra2=%palabra2% ^ #    #  
set palabra3=%palabra3% ^ #    #  
set palabra4=%palabra4% ^ #    #  
set palabra5=%palabra5% ^ #    #  
set palabra6=%palabra6% ^  ####  
goto:EOF  
:Letra_v  
set palabra1=%palabra1% ^ #    #  
set palabra2=%palabra2% ^ #    #  
set palabra3=%palabra3% ^ #    #  
set palabra4=%palabra4% ^ #    #  
set palabra5=%palabra5% ^  #  #  
set palabra6=%palabra6% ^   ##    
goto:EOF  
:Letra_w  
set palabra1=%palabra1% ^ #    #  
set palabra2=%palabra2% ^ #    #  
set palabra3=%palabra3% ^ #    #  
set palabra4=%palabra4% ^ # ## #  
set palabra5=%palabra5% ^ ##  ##  
set palabra6=%palabra6% ^ #    #  
goto:EOF  
:Letra_x  
set palabra1=%palabra1% ^ #    #  
set palabra2=%palabra2% ^  #  #  
set palabra3=%palabra3% ^   ##    
set palabra4=%palabra4% ^   ##    
set palabra5=%palabra5% ^  #  #  
set palabra6=%palabra6% ^ #    #  
goto:EOF  
:Letra_y  
set palabra1=%palabra1% ^ #   #  
set palabra2=%palabra2% ^  # #    
set palabra3=%palabra3% ^   #    
set palabra4=%palabra4% ^   #    
set palabra5=%palabra5% ^   #    
set palabra6=%palabra6% ^   #    
goto:EOF  
:Letra_z  
set palabra1=%palabra1% ^ ######  
set palabra2=%palabra2% ^     #  
set palabra3=%palabra3% ^    #    
set palabra4=%palabra4% ^   #    
set palabra5=%palabra5% ^  #      
set palabra6=%palabra6% ^ ######  
goto:EOF  

:espacio
set palabra1=%palabra1% ^    
set palabra2=%palabra2% ^    
set palabra3=%palabra3% ^    
set palabra4=%palabra4% ^    
set palabra5=%palabra5% ^    
set palabra6=%palabra6% ^    
goto:EOF
:imprime
color 02
echo %palabra1%
echo %palabra2%
echo %palabra3%
echo %palabra4%
echo %palabra5%
echo %palabra6%
echo.
goto:EOF

Eleкtro

#1
Citarsetlocal enabledelayedexpansion

Sirve para habilitar la expansión de variables en tiempo de ejecución.





Citarset cadena1=%1

A la variable "cadena1" se le asigna como valor el argumento nº1 que se le haya enviado al script por linea de comandos.

Ejemplo:
Start /B "" "Script.cmd" "Argumento 1" "Argumento 2"





Citarif "!cadena:~%contador%,1!" neq "" set /a "contador+=1" & call :CreaLetra !cadena:~%contador%,1! & goto ciclo

La sintaxis de esa condicional es penosa, no la tomes como un buen ejemplo a seguir. Debes asegurarte de utilizar los símbolos de apertura y de cierre de grupos de comandos ( ).


Código (bash) [Seleccionar]
If "!cadena:~%contador%,1!" NEQ "" (
set /a "contador+=1"
call :CreaLetra !cadena:~%contador%,1!
goto ciclo
)


Si tu le pasas el argumento "vaca" al script, la variable "%contador%" se usa para realizar un substring en la cadena de texto "vaca" con el que iterar cada caracterer por individual {"v", "a", "c", "a"} y seguidamente llama a la subrutina "CreaLetra" para construir la letra ASCII del caracter correspondiente.




Citarset palabra1=
se supone que set es para declarar una varaible, pero ahi a palabra1 no se le asigna nada

En ciertos lenguajes de programación, el programador puede decidir si desea declarar en la "cabecera" del código todas las variables que se vayan a usar en su código, de esta manera estará siguiendo una guía de diseño para denotar la existencia de esas variables, y eso hará que el código sea más comprensible a la hora de analizarlo. La asignación vacía de variables en Batch se suele utilizar para el mismo fin. No se si me he explicado del todo bien. En otras palabras: simplemente es una forma de organizar el código.

También sirve para eliminar un valor que se haya asignado previamente a esa variable, pero este no es el caso.




Citarset palabra1=%palabra1% ^ ######

Las palabras se forman mediante 6 variables (%palabra1% a %palabra6%) cada una de ellas corresponden a los caracteres que se mostrarán en cada linea por invididual para construir el código ASCII. La variable "palabra1" contiene el código ASCII de la primera linea de los caracteres que se hallan procesado.

Si por ejemplo le pasas el argumento "ba" al script, esto sería el valor de la variable %palabra1% en la primera asignación de la letra "A":

:Letra_a  
set palabra1=  #####    ^   ##


Y con respecto al operador "^" pues sencillamente es algo innecesario para el funcionamiento del algoritmo, no realiza ninguna función en ese código, literálmente no hace nada... ya que no está escapando ningún caracter. Quizás lo ha puesto ahí simplemente para denotar el inicio de cada conjunto de caracteres de almohadillas (#), por que queda "bonito" y ya.

¡Saludos!