elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  (Tema bloqueado hasta finalizar el tuto) Tutorial extendido de aprendizaje Batch
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: (Tema bloqueado hasta finalizar el tuto) Tutorial extendido de aprendizaje Batch  (Leído 24,639 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Tutorial extendido de aprendizaje Batch
« Respuesta #20 en: 4 Noviembre 2012, 17:17 pm »

6. VARIABLES



Existen 4 tipos de variables en Batch,

Las variables especiales: %0
Lass variables standard: %VARIABLE%
Las variables expandidas: !VARIABLE!
Las variables de FOR: %%a

Las 4 tipos de variables solamente pueden almacenar datos alfabéticos, numéricos o alfanuméricos.


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Tutorial extendido de aprendizaje Batch
« Respuesta #21 en: 4 Noviembre 2012, 17:17 pm »

  • 6.1 Variables especiales (o Variables de parámetro) (o Variables de argumentos)


Las variables especiales son un tipo de variables predefinidas que pueden cambiar su valor constantemente,
Estas son todas las variables especiales:

%0  %1  %2  %3  %4  %5  %6  %7  %8  %9   %*

En ellas se guarda el orden de los argumentos que le pasemos a nuestro script.

Un argumento es una cadena de caracteres delimitados por un espacio o por comillas dobles, esto quiere decir que una cadena encerrada entre comillas cuenta como un argumento
Código:
"Esto es un argumento"    "Y esto otro argumento"

Pero si no usamos comillas, los argumentos se separan por espacios:
Código:
Esto son cuatro argumentos
1       2     3         4

La variable %0 no la consideraremos realmente un argumento, porque en ella se guarda la ruta de nuestro script.
Código:
@Echo OFF
Echo %0
Pause >NUL



Si usamos una subrutina, el argumento %0 pasa a ser el nombre de la etiqueta de la subrutina, y será el siguiente número de variable (%1) el que realmente empezará a guardar el primer argumento que le pasemos:
Código:
@Echo OFF
call :subrutina "argumento 1"
:subrutina
Echo %0
Echo %1
Pause >NUL



Podemos usar la variable especial con comodín %*, esta variable reune todos los argumentos que le pasemos al script:

Código:
@Echo OFF
call :subrutina arg1 arg2 arg3 arg4 arg5
:subrutina
Echo %*
Pause >NUL


(El argumento 0 se omite)



Habeis visto que solo existen 10 variables especiales con números, pero descontando la variable %0, nos quedan 9 variables, ¿que pasa si necesitamos usar más de 9 argumentos... si por ejemplo necesitamos usar el arhumento 10?

Bien, pues el valor de las variables especiales se puede desplazar hacia la izquierda son el comando SHIFT, consiguiendo que el valor que había por ejemplo en la variable %3 pase a la variable %2, y el valor de la imaginaria variable %10 pase a la variable %9, entonces ya podremos usar nuestro 10º argumento en la variable %9

Cita de: CMD
Código:
SHIFT /?

Cambia la posición de parámetros reemplazables

SHIFT [/n]

Si las extensiones de comando están habilitadas,
el comando SHIFT admitirá el modificador /n,
el cual informa al comando que empiece a cambiar en el argumento n, en donde n puede estar comprendido entre 0 y 8.

Por ejemplo:
    SHIFT /2

cambiará %3 a %2, %4 a %3, etc. y deja %0 y %1 sin modificar.

Ejemplo:
Código:
@Echo OFF
call :subrutina a b c d e

:subrutina
Echo Antes del "Left Shift":
Echo arg1 = %1
Echo arg2 = %2
Echo arg3 = %3
Echo arg4 = %4
Echo arg5 = %5

Echo+
SHIFT /1

Echo Despues del "Left Shift":
Echo arg1 = %1
Echo arg2 = %2
Echo arg3 = %3
Echo arg4 = %4
Echo arg5 = %5

Pause >NUL




NOTA: El comando SHIFT no afecta a la variable especial %*, esta variable no se puede desplazar.





  • Expansión de variables especiales (o Argumentos) y de variables de FOR

La gran ventaja de las variables especiales y variables de FOR es que pueden ser expandidas para mostrar únicamente los datos que nos interesen, como por ejemplo, el tamaño del argumento, la extensión del archivo, la fecha de modificación, etc.

Esto se realiza usando el operador ~ seguido de uno de los siguientes caracteres (los caracteres se pueden combinar).


 %~0         - expande %0 quitando las comillas (") que pudiera haber
 %~f0        - expande %0 a un nombre de ruta completo
 %~d0        - expande %0 solo a una letra de unidad
 %~p0        - expande %0 solo a una ruta
 %~n0        - expande %0 solo a un nombre de archivo
 %~x0        - expande %0 solo a una extension de archivo
 %~s0        - ruta expandida contiene solo nombres cortos
 %~a0        - expande %0 a atributos de archivos
 %~t0        - expande %0 a fecha/hora del archivo
 %~z0        - expande %0 a tamaño del archivo
 %~$PATH:0   - busca los directorios de la lista de la variable de entorno de PATH y expande %0 al nombre del primero que se encuentre.


Ejemplo:
Código:
@Echo OFF

Echo Argumento con comillas:
Echo %0
Echo.
Echo Argumento sin comillas:
Echo %~0
Echo.
Echo Ruta completa del argumento:
Echo %~f0
Echo.
Echo Letra de unidad del argumento:
Echo %~d0
Echo.
Echo Ruta del argumento:
Echo %~p0
Echo.
Echo nombre del argumento:
Echo %~n0
Echo.
Echo Extension del argumento:
Echo %~x0
Echo.
Echo Ruta de nombre corto del argumento:
Echo %~s0
Echo.
Echo Atributos del argumento:
Echo %~a0
Echo.
Echo Fecha/Hora dle argumento:
Echo %~t0
Echo.
Echo Tamanyo del argumento:
Echo %~z0

Pause >NUL




Código:
@Echo OFF

FOR %%a in (*) DO (

     Echo Ruta:      %%~fa
     Echo Letra:     %%~da
     Echo Carpeta:   %%~pa
     Echo Nombre:    %%~na
     Echo Extension: %%~xa
     Echo Atributos: %%~aa
     Echo Fecha/H.:  %%~ta
     Echo Tamanyo:   %%~za
     Echo+

)

Pause >NUL




« Última modificación: 4 Noviembre 2012, 17:29 pm por EleKtro H@cker » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Tutorial extendido de aprendizaje Batch
« Respuesta #22 en: 4 Noviembre 2012, 17:48 pm »

  • 6.2 Variable Standard


  • SET

Una variable standard es la más común en Batch, se puede mostrar usando el comando SET o el comando ECHO (Ojo, mostrar es algo muy distinto a USAR)

Código:
@Echo OFF
Set WINDIR
Echo %WINDIR%
Pause >NUL





Para usar una variable es suficiente con escribir su nombre:
(No nos olvidemos de encerrarla con comillas)

Código:
@Echo OFF
DIR "%WINDIR%"
Pause >NUL





Si una variable contiene una orden y usamos la variable, se procesará la orden:

Código:
@Echo OFF
Set "Variable=Dir /B"
%VARIABLE%
Pause >NUL





El nombre de las variables puede contener letras, números, espacios, y operadores, pero el nombre de una variable nunca debe empezar por un número, para que no entre en conflicto con las variables especiales.

Código:
@Echo OFF
Set 0Variable=Valor
Echo %0variable%
Pause >NUL


Para que el nombre de la variable no entre en conflicto, la encerraremos entre comillas (Pero siguiendo la regla de NO empezar el nombre de la variable con un número):
Código:
@Echo OFF
Set "V0a _ri &| #~able=Valor"
Echo "%V0a _ri &| #~able%"
Pause >NUL







  • SET /P

Con el parámetro /P (Prompt) del comando SET podemos crear una variable y esperar la respuesta del usuario, es decir, el valor de la variable será lo que el usuario escriba en la CMD.

Código:
@Echo OFF
SET /P "VARIABLE=Escriba su nombre >> "
Echo Ud. se llama %VARIABLE%
Pause >NUL







  • SET /A

Con el parámetro /A del comando SET podemos realizar operaciones matemáticas, y asignar valores numéricos a una variable.

Sin usar el parámetro /A también podemos asignar números a una variable, pero con el parámetro /A nos aseguramos de que el valor de la variable séa un número, sin excepciones.

Si la operación o asignación falla, Batch automáticamente le asignará el número más bajo a la variable (el 0)

Ejemplo:
Código:
@Echo OFF
SET /A NUMERO=abcde
Echo %NUMERO%
Pause >NUL



NOTA: Aquí tienes la explicación para realizar operaciones con SET /A - > 4.7 Operadores aritmétricos y de asignación
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Tutorial extendido de aprendizaje Batch
« Respuesta #23 en: 4 Noviembre 2012, 17:52 pm »

  • 6.3 Variables expandidas

Las variables expandidas son prácticamente igual que las variables standard, pero para poder usarlas se debe habilitar la expansión de las mismas con el comando SETLOCAL:
Código:
Setlocal enabledelayedexpansion

Ejemplo:
Código:
@Echo OFF
Setlocal enabledelayedexpansion
Set "VARIABLE=VALOR"
Echo !VARIABLE!
Pause >NUL



Esta técnica se usa comúnmente dentro de un FOR donde para poder mostrar variables tienen que estar expandidas.

Pero estas variables tienes sus inconvenientes, ya que al habilitar la expansión, solamente podremos usar el caracter ! como operador de variable, es decir, no podremos mostrar el caracter (Ni siquiera excluyendolo ni usando comillas).

Ejemplo:
Código:
@Echo OFF
Setlocal enabledelayedexpansion
Echo !Hola
Echo ^!Hola
Echo "!Hola"
Pause >NUL



NOTA: Siempre se puede evitar la expansión y su restricción de caracteres, eso lo explicaré cuando lleguemos a la temática FOR.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: (TEMA BLOQUEADO HASTA FINALIZAR EL TUTO) Tutorial extendido de aprendizaje Batch
« Respuesta #24 en: 4 Noviembre 2012, 19:31 pm »

  • 6.4 Variables de entorno


Las variables de entorno son variables predefinidas del sistema, y se puede acceder a su contenido desde cualquier lugar.

Las variables de entorno por defecto en Windows 7 son las siguientes:


VARIABLE                   CONTENIDO
________                   _________

%ALLUSERSPROFILE%          C:\ProgramData
%APPDATA%                  C:\Users\(Nombre de usuario)\AppData\Roaming
%COMMONPROGRAMFILES%       C:\Program Files\Common Files
%COMMONPROGRAMFILES(x86)%  C:\Program Files (x86)\Common Files
%COMPUTERNAME%             (NOMBRE DEL PC-PC)
%COMSPEC%                  C:\Windows\System32\cmd.exe
%DIR%                      (Directorio actual)
%HOMEDRIVE%                C:
%HOMEPATH%                 C:\Users\(Nombre de usuario)
%LOCALAPPDATA%             C:\Users\(Nombre de usuario)\AppData\Local
%LOGONSERVER%              \\{domain_logon_server}
%PATH%                     C:\Windows\System32\;C:\Windows\;C:\Windows\System32\Wbem;etc...  
%PATHEXT%                  .COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS ; .WSF; .WSH; .MSC
%PROCESSOR_ARCHITECTURE%   (AMD64) (x86)
%PROCESSOR_IDENTIFIER%     (Modelo del procesador)
%PROCESSOR_LEVEL%          (Número)
%PROCESSOR_REVISION%       (Número)
%PROGRAMDATA%              C:\ProgramData
%PROGRAMFILES%             C:\Program Files
%PROGRAMFILES(x86)%        C:\Program Files (x86)
%PROMPT%                   $P$G
%PSMODULEPATH%             C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
%PUBLIC%                   C:\Users\Public
%SYSTEMDRIVE%              C:
%SYSTEMROOT%               C:\Windows
%TEMP%                     C:\Users\{Username}\AppData\Local\Temp
%TMP%                      C:\Users\{Username}\AppData\Local\Temp
%USERDOMAIN%               (Nombre de dominio)
%USERNAME%                 (Nombre de usuario)
%USERPROFILE%              C:\Users\(Nombre de usuario)
%WINDIR%                   C:\Windows




  • Variables de entorno dinámicas


VARIABLE          CONTENIDO
________          _________

%CD%              (Directorio actual)
%DATE%            (Fecha actual)
%TIME%            (Hora actual)
%RANDOM%          (Número aleatorio entre 0 y 32767)
%ERRORLEVEL%      (Número de salida)
%CMDEXTVERSION%   (Número)
%CMDCMDLINE%      "cmd.exe"  (Parámetro)




NOTA: Las variables de entorno del usuario se almacenan en la clave de registro:  HKEY_CURRENT_USER\Environment

NOTA: Las variables de entorno del sistema se almacenan en la clave de registro: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: (TEMA BLOQUEADO HASTA FINALIZAR EL TUTO) Tutorial extendido de aprendizaje Batch
« Respuesta #25 en: 4 Noviembre 2012, 19:35 pm »

  • 6.5 Variables de FOR

Las variables de FOR son un tipo de variables que solamente se pueden usar con el comando FOR, así que por el momento no digo más, las explicaré en el apartado del comando FOR.

En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: (TEMA BLOQUEADO HASTA FINALIZAR EL TUTO) Tutorial extendido de aprendizaje Batch
« Respuesta #26 en: 4 Noviembre 2012, 19:40 pm »

7. Comparación condicional





Las comparaciones se efectuan con el comando IF.

El comando IF se puede usar para trés tipos de comparaciones.


1º - Para comparar un elemento:

Código:
IF "Elemento 1" EQU "Elemento 2" (
     REM Código si se cumple la condición
)

2º - Para comprobar si existe un elemento (archivo o carpeta)

Código:
If Exist "Elemento 1" (
     REM Código si se cumple la condición
)

3º - Para comprobar si existe una variable.

Código:
If DEFINED "Elemento 1" (
     REM Código si se cumple la condición
)

También se pueden realizar comparaciones con varias condiciones:

Código:
If "elemento 1" EQU "elemento 2" if "elemento 3" EQU "Elemento 4" (
     REM Código si se cumple la condición
)



El comando IF acepta estos parámetros y condiciones:

/I - No distingue entre mayúsculas y minúsculas

Ejemplo:
Código:
@Echo OFF
IF "A" EQU "a" (Echo correcto)
Pause >NUL
La condición no se cumple porque el primer elemento está en mayusculas, y el segundo en minúsculas.

Código:
@Echo OFF
IF /I "A" EQU "a" (Echo correcto)
Pause >NUL
La condición se cumple.



NOT

Código:
@Echo OFF
IF NOT "A" EQU "a" (Echo "A" no es igual que "a")
Pause >NUL

Código:
@Echo OFF
IF NOT EXIST "C:\fail.txt" (Echo El archivo "C:\Fail.txt" no existe)
Pause >NUL

Código:
@Echo OFF
IF NOT DEFINED VARI (Echo la variable "%%VARI%%" no existe)
Pause >NUL



ELSE

Se utiliza para ejecutar un código si la condición no se cumple.

Ejemplo:
Código:
@Echo OFF
IF EXIST "C:\Archivo.txt" (
     Echo El archivo "C:\Archivo.txt" ya existe.
) ELSE (
     Echo El archivo "C:\Archivo.txt" no existe.
     Echo Test > "C:\Archivo.txt"
     Echo El archivo "C:\Archivo.txt" ha sido creado...
)
Pause >NUL



En las comparaciones podemos usar los operadores condicionales que expliqué en el apartado de operadores... -> 4.5 Operadores de comparación (o Condicionales)

Ejemplo:
Código:
@Echo OFF
IF 1 LSS 2 (Echo 1 es menor que 2)
Pause >NUL

NOTA: Se puede usar el operador EQU o el operador ==

Código:
IF "A"=="A" (Echo A es igual que A)
« Última modificación: 4 Noviembre 2012, 19:42 pm por EleKtro H@cker » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: (TEMA BLOQUEADO HASTA FINALIZAR EL TUTO) Tutorial extendido de aprendizaje Batch
« Respuesta #27 en: 4 Noviembre 2012, 20:07 pm »


AÑADIRÉ MÁS INFORMACIÓN A ESTE APARTADO DE "FOR" DENTRO DE POCO...
ESTE APARTADO Y EL TUTORIAL, NO ESTÁN ACABADOS.






8. Búcles





Hay tres maneras de crear un búcle.

Una manera es usando el comando FOR, el cual ejecuta un comando o una serie de comandos repetidamente sobre varios archivos o datos.

Otra manera es usando el comando FORFILES,

Y la última manera de crear un búcle es usando etiquetas, y el comando GOTO.

Podemos crear un búcle infinito usando una etiqueta, y el comando GOTO, aunque este tipo de búcle es muy distinto y no tiene el mismo fín que un FOR.


Ejemplo de búcle infinito:
Código:
@ECHO OFF

SET VAR1=A
SET VAR2=B

:ETIQUETA
IF NOT "%VAR1%" EQU "%VAR2%" (
     Echo Los valores "%VAR1%" y "%VAR2%" no conciden.
     GOTO :ETIQUETA
) ELSE (
     Echo Los valores "%VAR1%" y "%VAR2%" coinciden.
     Pause&Exit
)




Hay varios tipos de FOR, por lo tanto varios tipos de búcles.





  • FOR


FOR es un tipo de búcle para archivos, o para una serie de expresiones.

Sintaxis:
FOR %%variable IN (archivo o expresión) DO (comandos)


Ejemplos:
Código:
@ECHO OFF
FOR %%A in (*.bat) DO (Echo %%A)
Pause&Exit



Código:
@ECHO OFF
SET "VARIABLE=a b c d e"
FOR %%A in (%VARIABLE%) DO (Echo %%A)
Pause&Exit







  • FOR /R
(FOR-Files-Rooted at Path)


FOR /R es un tipo de búcle recursivo para archivos.

Sintaxis:
FOR /R "RUTA" %%variable IN (archivos) DO (comandos)


Ejemplos:
Código:
@ECHO OFF
FOR /R "C:\" %%A in (*.dll) DO (Echo %%A)
Pause&Exit







  • FOR /D
(FOR-Directories)


FOR /D es un tipo de búcle para carpetas.

Sintaxis:
FOR /D "RUTA" %%variable IN (carpetas) DO (comandos)

NOTA: Se puede usar en combinación del parámetro "/R" para procesar directorios recursivamente.


Ejemplos:
Código:
@Echo OFF
FOR /D /R "C:\" %%A in (*system32) DO (Echo %%A)
Pause >NUL







  • FOR /L
(FOR-List of numbers)


FOR /L es un tipo de búcle para un rango de números.

Sintaxis:
FOR /L %%variable IN (Número inicial,Incremento,Número final) DO (comandos)


Ejemplos:
Código:
@ECHO OFF
FOR /L %%A IN (0,1,10) DO (Echo %%A)
Pause&Exit



Código:
@ECHO OFF
FOR /L %%A IN (5,5,25) DO (Echo Hola!)
Pause&Exit

Aquí vemos como el primer número del rango es "5", se va incrementando el número por "5" hasta llegar al "25", por lo tanto el bucle se efectúa 5 veces.







  • FOR /F
(FOR-File contents) (o FOR-Command Results)


FOR /F es un tipo de búcle para el contenido de un archivo, o para el resultado de un comando.

Sintaxis:
FOR /F "PARÁMETROS" %%variable IN ('Archivo o comando') DO (comandos)

Los comandos deben estar entre comillas ('comando')

Los parámetros de FOR /F son:


eol=X           - Añade un caracter de comentario a cada línea.

skip=X          - Especifica el número de líneas que hay que saltarse al principio del archivo.

delims=XXX      - Especifica un grupo de delimitadores.
                  Esto reemplaza al grupo de delimitadores predeterminados de espacio y tabulación.

usebackq        - Especifica que una cadena entre comillas inversas se ejecuta como un comando y una cadena con comillas simples es un comando de cadena literal,
                  y permite el uso deomillas dobles para entrecomillar los nombres de archivo en un conjunto de archivos.

tokens=x,y,m-n  - Especifica que símbolos de cada línea deben pasarse al cuerpo de la clausula "for" en cada iteración.
                  Esto causará que los nombres de variables adicionales sean asignados.
                  Si el último caracter en la cadena tokens= es un asterisco, se asigna una variable adicional que recibe el resto del texto en la línea posterior al último símbolo analizado.



Ejemplo skip:
Código:
@ECHO OFF
FOR /F "Skip=1" %%A IN ('Echo Linea1 ^& Echo linea2 ^& Echo Linea3') DO (Echo %%A)
Pause&Exit




Ejemplo delims:
Código:
@ECHO OFF
FOR /F "Delims=c" %%A IN ('Echo abcde') DO (Echo %%A)
Pause&Exit


En línea

Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Introducción a Final Render (Tutorial para Finalizar Render en 3ds Max)
Diseño Gráfico
Embusterillo de bolsillo 5 22,793 Último mensaje 17 Julio 2014, 20:33 pm
por xMt2
Tuto del batch
Scripting
Sai-To 7 4,606 Último mensaje 7 Marzo 2008, 22:37 pm
por Chop
tuto batch para principiante(en contruccion)
Scripting
krackwar 1 2,895 Último mensaje 15 Enero 2008, 03:16 am
por krackwar
Tema bloqueado??
Hacking Wireless
anaconda79 5 3,341 Último mensaje 7 Julio 2011, 09:40 am
por ChimoC
[Solucionado]Router bloqueado hasta acabar test? flasheo restaurar firmware
Hacking Wireless
Anonymous250 3 8,272 Último mensaje 2 Febrero 2012, 18:28 pm
por Anonymous250
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines