[BATCH] ¿Como puedo meter variables dentro de variables?

Iniciado por Meine programmen, 24 Marzo 2012, 13:48 PM

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

Meine programmen

Estoy haciendo un programa que te de todas las combinaciones posibles de los caracteres que le metas (En este caso, 37). Pero me ha surgido un problema. El codigo que llevo escrito del programa es mas o menos esto:

@ECHO OFF
setlocal enabledelayedexpansion
set /A CARACTERES=37+1
set /A CONTADOR=1
set /A CONTADOR2=1
:0
set CLAVE=
IF CONTADOR==1 (goto 1) else goto 3
:1
set CLAVE=
set CLAVE=%CLAVE%%CONTADOR2%
SET CLAVE=%CLAVE:37=Z%
SET CLAVE=%CLAVE:36=Y%
SET CLAVE=%CLAVE:35=X%
SET CLAVE=%CLAVE:34=W%
SET CLAVE=%CLAVE:33=V%
SET CLAVE=%CLAVE:32=U%
SET CLAVE=%CLAVE:31=T%
SET CLAVE=%CLAVE:30=S%
SET CLAVE=%CLAVE:29=R%
SET CLAVE=%CLAVE:28=Q%
SET CLAVE=%CLAVE:27=P%
SET CLAVE=%CLAVE:26=O%
SET CLAVE=%CLAVE:25=Ñ%
SET CLAVE=%CLAVE:24=N%
SET CLAVE=%CLAVE:23=M%
SET CLAVE=%CLAVE:22=L%
SET CLAVE=%CLAVE:21=K%
SET CLAVE=%CLAVE:20=J%
SET CLAVE=%CLAVE:19=I%
SET CLAVE=%CLAVE:18=H%
SET CLAVE=%CLAVE:17=G%
SET CLAVE=%CLAVE:16=F%
SET CLAVE=%CLAVE:15=E%
SET CLAVE=%CLAVE:14=D%
SET CLAVE=%CLAVE:13=C%
SET CLAVE=%CLAVE:12=B%
SET CLAVE=%CLAVE:11=A%
SET CLAVE=%CLAVE:10=0%
SET CLAVE=%CLAVE:9=9%
SET CLAVE=%CLAVE:8=8%
SET CLAVE=%CLAVE:7=7%
SET CLAVE=%CLAVE:6=6%
SET CLAVE=%CLAVE:5=5%
SET CLAVE=%CLAVE:4=4%
SET CLAVE=%CLAVE:3=3%
SET CLAVE=%CLAVE:2=2%
SET CLAVE=%CLAVE:1=1%
echo %CLAVE%
pause >nul
SET /A CONTADOR2=%CONTADOR2%+1
IF %CONTADOR2%==%CARACTERES% (goto 2) else goto 1
:2
SET /A CONTADOR=%CONTADOR%+1
goto 0
:3
SET /A CONTADOR3=1
SET CLAVE=%CLAVE% 1
SET /A CONTADOR3=%CONTADOR3%+1
SET /A CONTADOR4=%CONTADOR%+1
IF %CONTADOR3%==%CONTADOR4% (goto 4) else goto 3
:4
SET CLAVE2=%CLAVE:37=Z%
SET CLAVE2=%CLAVE2:36=Y%
SET CLAVE2=%CLAVE2:35=X%
SET CLAVE2=%CLAVE2:34=W%
SET CLAVE2=%CLAVE2:33=V%
SET CLAVE2=%CLAVE2:32=U%
SET CLAVE2=%CLAVE2:31=T%
SET CLAVE2=%CLAVE2:30=S%
SET CLAVE2=%CLAVE2:29=R%
SET CLAVE2=%CLAVE2:28=Q%
SET CLAVE2=%CLAVE2:27=P%
SET CLAVE2=%CLAVE2:26=O%
SET CLAVE2=%CLAVE2:25=Ñ%
SET CLAVE2=%CLAVE2:24=N%
SET CLAVE2=%CLAVE2:23=M%
SET CLAVE2=%CLAVE2:22=L%
SET CLAVE2=%CLAVE2:21=K%
SET CLAVE2=%CLAVE2:20=J%
SET CLAVE2=%CLAVE2:19=I%
SET CLAVE2=%CLAVE2:18=H%
SET CLAVE2=%CLAVE2:17=G%
SET CLAVE2=%CLAVE2:16=F%
SET CLAVE2=%CLAVE2:15=E%
SET CLAVE2=%CLAVE2:14=D%
SET CLAVE2=%CLAVE2:13=C%
SET CLAVE2=%CLAVE2:12=B%
SET CLAVE2=%CLAVE2:11=A%
SET CLAVE2=%CLAVE2:10=0%
SET CLAVE2=%CLAVE2:9=9%
SET CLAVE2=%CLAVE2:8=8%
SET CLAVE2=%CLAVE2:7=7%
SET CLAVE2=%CLAVE2:6=6%
SET CLAVE2=%CLAVE2:5=5%
SET CLAVE2=%CLAVE2:4=4%
SET CLAVE2=%CLAVE2:3=3%
SET CLAVE2=%CLAVE2:2=2%
SET CLAVE2=%CLAVE2:1=1%
SET CLAVE2=%CLAVE2: =%
echo %CLAVE2%
pause >nul
goto 5

Y ahora viene el problema. Ahora mismo el programa solo podria sacar correctamente las combinaciones de 1 caracter y la primera de dos, 11. Entonces en :5 tendria que separar la variable clave (Que tiene los numeros separados con espacios de esta manera: 1 1, para que no haya problemas al cambiar de numeros a caracteres) en varias variables que tengan el numero y su espacio, para poder operar con cada cifra por separado, y despues tendria que juntar las variables de nuevo en la variable clave. Para ello pense en usar un contador a la que se le va sumando uno, y meter variables dentro de variables. De esta manera, el programa separaria el numero en variables con una palabra fija y el numero del contador en ese ciclo [ 1 1(CLAVE)→ 1(CLAVESEPARADA1) 1(CLAVESEPARADA2)] y asi podria llamar facilmente a todas las variables, ya operadas y para que volviesen a la misma variable, con otro contador y otro ciclo. Pues ahi esta el problema, no se como llamar a las variables que tienen dentro una variable. Si hay algun error en el codigo o en la idea, agradeceria que lo dijeseis.
P.D.: Perdon por el codigo spaghetti.
REMEMBER! Reality is an illusion, the universe is a hologram, BUY GOLD! BYE!!


Eleкtro

#1
Hola Meine programmen

En mi opinion:

Te estás liando demasiado, Incluso me lio yo analizando tu code:

  1º - Serías más productivo y cometerías menos fallos si le pusieras nombres intuitivos a las etiquetas, y no ":0" ":º", eso es un lio para luego correjirlo la verdad. (támpoco estaróa mal que indentases).
  2º - no hace falta crear mil variables a lo loco, no hay que complicar tanto un code, Busca alternativas.

Aparte de eso, Parece que uses cosas sin entender su propósito, Por esjemplo usas setlocal enabledelayedexpansion, Pero no expandes en ninguna parte de tu script. (Si lo crees necesario LEE más tutoriales)

PD: La Ñ es un caracter espacial, No te funcionará así, igual que la Ç trencada, etc....

Respecto a lo de meter variables dentro de variables:

Código (DOS) [Seleccionar]
Set var1=hola
Set var2=adios

Set var3=%var1% y %Var2%





- Si usas el buscador para documentarte verás que este tema se ha comentado mucho, Y encontrarás tanto información como scripts muy útiles.

[Batch] Aporte Generador Diccionario

[Batch] Ice Gen 1.0 (Generador de Wordlist,Combolist,WEP,WPA,Serial,Cookies,IP)

Generador de diccionarios para bruteforce


- Aparte de los scripts mios y de geormarsh que puedes encontrar en esos enlaces de arriba, Te he querido hacer un generador algo más pequeño con posiilidad de elegir longitud, es un generador de ejemplo para que lo entiendas, Solo funciona desde longitud "1" a "3" no he querido complicarme más.


@Echo OFF
setlocal enabledelayedexpansion
Set "caracteres=a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9"
set "shift=%caracteres%"
Set "Shift=%SHIFT: =%"
Set MINshift=0
Set MINchar=0

:Menu
Echo longitud?
Set /p longitud=
Echo "%Longitud%"| Findstr "[1-3]"
If not %errorlevel% EQU 0 (Goto :Menu)

:Generador
If "%shift%" EQU "" (Goto :FIN)
if "!shift:~%MINshift%,1!" EQU "" (Goto :FIN)

For %%a in (%Caracteres%) do (
If %Longitud% equ 1 (echo %%a)
If %Longitud% equ 2 (echo !Caracteres:~%MINchar%,1!%%a)
If %Longitud% equ 3 (echo !shift:~%MINshift%,1!!Caracteres:~%MINchar%,1!%%a)
)

If %Longitud% equ 1 (Goto :FIN)

if "!Caracteres:~%MINchar%,1!" EQU "%Caracteres:~-1,1%" (Set /A MINshift+=1& Set MINchar=0& Goto :Generador) ELSE (if "!shift:~%MINshift%,1!" EQU "" (Goto :FIN))
Set /A MINchar+=2
Goto :Generador

:FIN
echo FIN
pause



Salu2.