![]() |
|
|
#1 | |||||||||||||||||
|
Recien llegado
![]() Fecha de Ingreso: febrero-2008
Amigos 0
Mensajes: 24
Gracias: 0
Agradecido 7 veces en 1 mensaje
|
Tutorial Programación Batch
Tutorial Programación Batch - Completo - by
Attribution-NonCommercial-ShareAlike 3.0 Unported License ·Apéndice El apéndice está sujeto a modificaciones. 1 · Introducción. 2 · Recomendaciones. 3 · ¿Cómo empezar?. 4 · Comandos Batch. 5 · Comandos If y Set. 5.1. - Variables de entorno. 5.2. - Trabajando con variables. 5.3. - Operaciones aritméticas. 5.4. - Criptografía. 5.5. - Polimetría 6 · Bucles. 7 · Trabajando con archivos. 8 · Comando For. 1. Introducción ·¿Qué es batch? Cita:
___________________________________________ ___________________________________________ ___________________________________________ 2. Recomendaciones ·¿Cómo aprendo Batch? 1. Lee una/varias vez/ces atentamente cada punto (apéndice) y ponlo en prática programando (por ti mismo y realizando los ejercicios propuestos por mí). 2. No avances muy rápidamente: Trabaja cada punto (apéndice) hasta alcanzar el conocimiento óptimo. 3. Nunca te tomes BATCH como otro trabajo más de clase, si no, como un entretenimiento más (aunque requiera concentración). 4. Nunca te des por vencido al no lograr cualquier cosa. Siempre estamos los usuarios del foro para ayudarte. ___________________________________________ ___________________________________________ ___________________________________________ 3. ¿Cómo empezar? ·¿Cómo empiezo en Batch? ·Necesitamos 2 programas para trabajar en batch: notepad.exe (se recomienda notepad++) y cmd.exe ·Vamos a copiar el siguiente código y a pegarlo en notepad.exe Código:
@echo off echo hello world pause>nul exit ![]() ![]() ![]() · Finalmente veremos una ventana negra que nos devuelve hello world. Se abría cerrado muy rápidamente la ventana, si no hubiéramos usado el comando pause (que veremos más adelante). ___________________________________________ ___________________________________________ ___________________________________________ 4. Comandos Batch · ¿Qué comandos existen en batch? Existen los comandos internos y los comandos externos: ·Comandos internos. Son los comandos que vienen en el ordenador (comandos por default). ·Comandos externos. Son los comandos que descargamos y guardamos en nuestro ordenador (en la carpeta system32). Lista de comandos internos y su función Hay más comandos internos ocultos Cita:
Explicación de algunos comandos. Echo ·Echo - Echo off / @echo off (Echo activado por default) Echo: Activa el eco. Muestra la ruta dónde se ejecutan los comandos. Echo off / @echo off: Desactiva el eco. Oculta la ruta dónde se ejecutan los comandos. Cls Borra la pantalla. Goto Sirve para dirigirte a una etiqueta*. Cita:
Muestra los comandos de la consola (internos predeterminados). Pause El archivo por lotes se para hasta que se presione una tecla para continuar. Title Inserta un título al archivo .bat Comando /? Los signos /? detrás de un comando, hacen que se muestre la información de dicho comando. ___________________________________________ ___________________________________________ ___________________________________________ 5. Comandos If y Set · Comenzaremos definiendo los comandos If y Set. IF: "Ejecuta procesos condicionales en programas por lotes." Es decir, Establece condiciones entre variables. Set: "Muestra, establece o elimina variables de entorno de Windows." Es decir, que con el comando set podemos ver, crear o borrar variables en Batch. *Además Set, con el modificador /a puede realizar operaciones aritméticas. Véase el siguiente código Código:
@echo off set variable=Batch set variable2=scripting echo %variable% es un lenguaje %variable2% pause>nul goto eof Código:
Batch es un lenguaje scripting ·Con el modificador /p, damos la opción al usuario a que inserte un/os dato/s que se guardan en una variable. Véase el siguiente código Código:
set /p nombre= set /p edad= echo Su nombre es %nombre% y su edad es de %edad% pause>nul Código:
Su nombre es Pedro y su edad es de 19 Véase el siguiente código Código:
set saludo=hola if %saludo%==hola echo La variable es igual a hola if %saludo%==adios echo La variable es igual a adios pause>nul 2. Damos 2 condiciones. Si la variable 'saludo' es igual a hola, se ejecuta el comando echo y muestra "La variable es igual a hola", en cambio, si la variable 'saludo' es igual a adios, se ejecuta el comando echo y muestra "La variable es igual a adios. *Al principio igualamos la variable 'saludo' a la palabra hola, asique el resultado es: Código:
La variable es igual a hola Código:
La variable es igual a adios #Parámetros de If Los siguientes parametros solamente funcionan con dígitos numéricos Cita:
Código:
set numero=10 if %numero% EQU 10 (echo El numero es igual a 10) pause>nul Código:
El numero es igual a 10 If exist / If not exist Véase el siguiente código Código:
if exist "C:\file.bat" (echo El archivo file.bat existe en la ruta C:\) Código:
El archivo file.bat existe en la ruta C:\ Véase el siguiente código Código:
if not exist "C:\file.bat" (echo El archivo file.bat no existe en la ruta C:\) Código:
El archivo file.bat no existe en la ruta C:\ Véase el siguiente código Código:
set var=pasqui if %var%==Manoel (echo La variable es Manoel) else (echo La variable no es Manoel) pause>nul Código:
La variable es Manoel Código:
La variable no es Manoel Comprobación de variable: if + set Véase el siguiente código Código:
set /p variable= if [%variable%]==[] (echo usted no ha ingresando nada en la variable) else (echo usted si ha ingresado algo en la variable) pause>nul *Podemos utilizar cualquier símbolo, letra o número para comprobar esto. Véase el siguiente código Código:
set /p variable= if a%variable%a==aa (echo usted no ha ingresando nada en la variable) else (echo usted si ha ingresado algo en la variable) pause>nul If %errorlevel% Cita:
Código:
Xcopy "C:\file.txt" "C:\archivos de programa\file.txt" if errorlevel 0 echo Los ficheros fueron copiados sin error. if errorlevel 1 echo No se encontraron ficheros para copiar. if errorlevel 2 echo El usuario presionó Ctrl+Pausa para suspender el proceso de Xcopy. if errorlevel 3 echo Ocurrió un error de inicio. No hay suficiente memoria o espacio en el disco, se introdujo un nombre de unidad no válida o se utilizó una sintaxis incorrecta en la línea de órdenes. if errorlevel 4 echo Ocurrió un error de escritura de disco. pause>nul ___________________________________________ ___________________________________________ ___________________________________________ 5.1. Variables de entorno Las variables de entorno disponibles son las siguientes: Cita:
·Vamos a definir estas variables: %time%: Muestra la hora almacenada en la bios %random%: Muestra un número al azar. Véase el siguiente código Código:
set tiempo=%time% echo %time% set numero=%random% echo %numero% pause>nul ___________________________________________ ___________________________________________ ___________________________________________ 5.2. Trabajando con variables. ·Sustitución de carácteres. Véase el siguiente código Código:
set var=Manoel set sustituir=%var:o=u% echo %sustituir% pause>nul Véase el siguiente código Código:
set var=Manuel tiene 12 pelotas set var=%var:12=39% echo %var% pause>nul ·Extraer carácteres de una variable. *Para realizar la extración de carácteres debemos realizar esto: Cita:
var: La variable a la que vayamos a extraerle carácteres. a: posición donde empezamos a extraer carácteres b: cantidad de carácteres a extraer. Ejemplo: Véase el siguiente código Código:
set var=12/11/2010 echo %var:~3,2% pause>nul ___________________________________________ ___________________________________________ ___________________________________________ 5.3. Operaciones aritméticas. ·Lo primero que debo decir, que BATCH NO TRABAJA CON DECIMALES. Véase el siguiente código Código:
Set /a set /a var=5+3 echo %var% pause>nul -Las operaciones básicas disponibles son: Cita:
___________________________________________ ___________________________________________ 5.4. Criptografía. Primero vamos a definir el término criptografía. Cita:
Código:
set variable=valor Código:
set pass=Introduzca el password: if %pass%==texto (echo correcto) else (echo incorrecto) Los métodos que vamos a utilizar son: Extracción de carácteres, sustitución de carácteres y parámetros. [size=8pt](Los métodos de sustitución y extracción de carácteres los hemos visto en el apartado 5.2.)[/size] ·Párametros El signo % seguido de un número (del 1 al 9) son las parámetros que se pasan al llamar a un archivo bat o a una etiqueta con el comando call. Por ejemplo si tenemos un archivo llamado help.bat con la línea Código:
echo Hola %1 %0 representa el nombre del archivo bat en ejecución y %# representa todos los parámetros que se le pasan. [size=8pt](# perteneciente al intervalo [1-9])[/size] Clarifiquemos esta teoría con un ejemplo: Código:
@echo off call :function Aprender batch es una tarea gratificante :function echo %3 %4 %5 %6 %1 %2 Como vemos nosotros decidimos que parámetros pasar antes o después. Código:
@echo off call :function Aprender batch es una tarea gratificante :function echo %3 %4 %5 %6 %1 %2 Cita:
Código #1 Código:
@echo off set var=hola set var=%var:o=0% set var=%var:a=4% set /p enter=Password: if %enter%==%var% (echo correcto) else (echo incorrecto) Código #2 Código:
@echo off set var=hola set var=%var:o=0% set var=%var:a=4% set /p enter=Password: if %enter%==%var:~0,2%%var:~-1% (echo correcto) else (echo incorrecto) Código #3 Código:
@echo off set conv=set function set pyxolo=pyxolo set /p pass="Password: " call :method %pyxolo% if "%pass%"=="%function%" (echo correcto) else (echo incorrecto) pause>nul exit :method %conv%=%1 %conv%=%function:y=1% %conv%=%function:o=0% Pues con estos tres métodos y alguno más podremos crear un 'crypter', hacer crackme's... Todo depende de nuestra mente :P ___________________________________________ ___________________________________________ ___________________________________________ 5.5. Polimetría. · La polimetría, en batch, es la combinación de dos o más variables entre si. Veamos un simple ejemplo (el mío por excelencia) Código:
setlocal enabledelayedexpansion set "function=variable" set /p n=Indique el numero de carácteres a extraer: set function=!function:~1,%n%! echo %function% Veamos otro ejemplo para afianzar conocimientos: Código:
@echo off setlocal enabledelayedexpansion set "function=pyxolo" for /l %%a in (1,1,6) do ( echo !function:~0,%%a! ) pause>nul Cita:
___________________________________________ ___________________________________________ 6. Bucles. · Los bucles, en batch, son trozos de códigos que se repiten a lo largo de la ejecución del archivo batch. ¿Cómo se hacen los bucles? Código:
:etiqueta echo hola, esto es un bucle infinito goto etiqueta ·Bucles infinitos: Son bucles que se ejecutan indefinidamente ·Bucles finitos: Son bucles con un cierto número de ejecuciones que las podemos delimitar a nuestra necesidad. Veamos un ejemplo de bucle finito: Código:
@echo off set /a cuenta=0 :bucle set /a cuenta=%cuenta%+1 echo pyxolo if %cuenta%==10 (exit) else (goto :bucle) Cita:
¡Ahora está todo en vuestras manos y vuestra mente! ___________________________________________ ___________________________________________ ___________________________________________ 7. Trabajando con archivos. Estos son los comandos principales para el manejo de archivos y directorios: Cita:
[size=12pt]CD[/size] Código:
cd directorio Código:
cd "%homepath%\desktop" [size=12pt]MD[/size] Código:
md directorio Código:
cd carpeta [size=12pt]PUSHD[/size] Código:
pushd directorio Código:
pushd directorio popd [size=12pt]DEL[/size] Código:
del /parámetros "rutadelarchivo" Código:
del /f /q /s "%homepath%\desktop\file.exe" Código:
del /f /q /s "%homepath%\desktop\pyxolo\*.txt" Código:
del /f /q /s "%homepath%\desktop\pyxolo\*.*" Código:
attrib +-parámetro archivo" Código:
attrib +h "%homepath%\desktop\pyxolo\*.txt" Código:
attrib -h "%homepath%\desktop\pyxolo\*.txt" [size=12pt]REN[/size] Código:
ren "archivo_a_renombrar" "archivo_nombrado Código:
ren "%windir%\file.bat" "%windir%\pyxolo.bat Código:
XCOPY origen destino Código:
XCOPY "archivo.txt" "%programfiles%\ayuda.txt" ___________________________________________ ___________________________________________ 8. Comando FOR. ·Definición del comando for: "Ejecuta el comando para cada uno de los archivos especificados en el conjunto de archivos." ·Sintaxis del comando (FOR) : Código:
FOR %%var IN (conjunto) DO (acciones) %%var=nombre de la variable...siempre tiene que estar precedido de dos %% 'porcentajes' (ejemplo: %%3 %%num) IN=Incluye al conjunto (conjunto)=archivos o dígitos con los que queremos trabajar DO=ejecuta las (acciones) (acciones)=Un comando con el ke keremos ejecutar todo el conjunto.El comando puede llevar sus variantes (ejemplo: ...DO (echo %%var, ...DO del /f /q %%var...) Ejemplo: Código:
FOR %%x IN (archivo1.txt archivo2.exe archivo3.ini) DO del /f /q %%x En el conjunto cogemos a archivo1.txt, a archivo2.exe y a archivo3.ini. Para llamar al conjunto entero usaremos la variable %%a. Luego con el comando del /f /q (%%a) borramos cada parte del conjunto que contiene la variable %%a ___________________________________________ Código:
FOR %%var IN (d*) DO echo %%var ___________________________________________ El modificador /L : Código:
For /L %%x in (1,3,30) Do echo %%x El conjunto es una sucesión de números que va desde inicio hasta fin y que aumenta (o disminuye) en función de lo especificado en el paso. Así (0, 2, 10) generará la sucesión 0 2 4 6 8 10 y (10, -1, 5) generará la sucesión 10 9 8 7 6 5 ___________________________________________ El modificador /D : Código:
FOR /D %%dirx in (m*) DO echo %%dirx ___________________________________________ Otro modificador /F (más complejo) #[size=11pt] El conjunto puede contener[/size] ·Conjunto de archivos ·> sin comillas ·Cadena de caracteres ·> con comillas dobles [ " " ] ·Comando ·> con comilla simple [ ' ' ] OPCIONES Cita:
Ejemplo: Código:
FOR /F "tokens=1,2-4,8,9,10*" %%a IN ("RockoX quiere tontear correr y solo quiere salvarse de la muerte que le ofrece satan") DO echo %%a %%b %%d %%e %%f %%g %%h
RockoX quiere correr salvarse de la muerte que le ofrece satán ___________________________________________ [size=16pt]Algunos scripts de ejemplo[/size] Saber las líneas de un archivo Código:
::Saber las líneas de un archivo by PyXOLo @echo off :contador set /p archivo=RUTA= set cuenta=0 for /f %%x in (%archivo%) do set /a cuenta=1+cuenta set funcion=%cuenta% echo %funcion% pause>nul Código:
::Extraer la IP privada de tu computadora en una variable por PyXOLo
@echo off
For /f "tokens=14 skip=5" %%x IN ('ipconfig') Do set ip=%%x
echo %ip%
pause>nul
goto EOF
Código:
@echo off
rem Sacando la ruta de un ejecutable activo.
(cd %homedrive%\)
:Code
(cls)
(set /p proceso=Nombre de proceso : )
(if not defined proceso (goto:Code))
for /f "tokens=*" %%x in ('wmic process get executablepath ^| find /i "%proceso%"') do (set ruta=%%x)
(echo %ruta%)
(pause>nul)
(goto:eof)
___________________________________________ ___________________________________________ Bueno esto ha sido todo, espero que les haya gustado y, sobre todo, que hayan aprendido mucho. Este tutorial está sujeto a la
[size=17pt]Un saludo a todos, pyxolo.[/size]
__________________
Última edición por GUN$; 03-jul-2010 a las 21:15 |
|||||||||||||||||
|
|
|
| Los Siguientes 7 Usuarios Agradecieron a GUN$ por Este Mensaje: | eristoff (23-nov-2012), Fernando Sierra Eleuterio (27-dic-2011), fifinio (05-may-2012), Joeni (04-dic-2011), novagolf2007 (20-abr-2011), sabatinodonato (01-jul-2012), SAC8 (24-ago-2011) |
|
|
#2 |
|
Miembro
![]() Fecha de Ingreso: agosto-2006
Amigos 3
Mensajes: 129
Gracias: 1
Agradecido 10 veces en 7 mensajes.
|
Wauuuu! muy buen aporte Gun$!!
|
|
|
|
| Los Siguientes 2 Usuarios Agradecieron a COMANDOSOFT por Este Mensaje: | cimetria214 (24-ago-2012), DarStar (22-oct-2010) |
|
|
#3 |
|
Habitual
Fecha de Ingreso: octubre-2009
Amigos 0
Mensajes: 172
Gracias: 7
Agradecido 6 veces en 5 mensajes.
|
Grandisimo aporte gun$,enhorabuena te quedo bien explicadito.
|
|
|
|
|
|
#4 |
|
Colaborador
![]() Fecha de Ingreso: agosto-2011
Ubicación: Chile, Valparaiso
Amigos 6
Mensajes: 416
Gracias: 51
Agradecido 76 veces en 63 mensajes.
|
Por mas tutoriales que vea nunca logro aprender For ni Tokens pero en esta ocacion logre entender lo que es %errorlevel% y para que sirve %1 y %2 etc... hacique gracias
|
|
|
|
|
|
#5 |
|
Miembro
![]() Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Amigos 2
Mensajes: 50
Gracias: 11
Agradecido 2 veces en 2 mensajes.
|
Muy buen tuto, estoy iniciando y la verdad que es muy útil que publiquen este tipo de cosas pensando en nosotros!
|
|
|
|
|
|
#6 |
|
Habitual
![]() Fecha de Ingreso: marzo-2011
Ubicación: encarnacion, paraguay
Amigos 11
Mensajes: 198
Gracias: 34
Agradecido 38 veces en 35 mensajes.
|
exelente aporte gun$ !!! me sirvio de repaso xd.
edito: me acabo de dar cuenta que este post era del 2010 0_0 .
Última edición por diegox64; 07-dic-2011 a las 16:38 |
|
|
|
![]() |
| Herramientas | |
| Desplegado | |
|
|
