Aprendé Bach de 0 a 100% sin salir de éste post

En este tutorial vas a aprender a hacer un batch con comando basicos y efectivos de una manera rapida y simple!

Para que queres aprender batch:

Este lenguaje(aunque no es un lenguage propiamente dicho) se puede usar para crear divertidos programas y utiles aplicaciones muy facilmente, pero mucha gente busca conocimiento de este lenguaje para crear sigilosos y letales virus, aunque en mi opinion creo que este lenguaje puede ser usado para fines mas constructivos, aunque no niego haber hecho programas maliciosos y mandarlos a personas . Tambien uno cuando aprende un lenguaje, no se trata de leer la teoria un par de veces y hacer unos ejemplitos, se trata de continua practica y continuidad.

Este post fue 100% echo por mi, basado en anotaciones y apuntes de tutoriales y paginas que lei, hasta ahora es todo teorico, cuando termine de explicar la teoria vamos a ir a ejemplos concretos combinando todo en una re ensalada


INDICE DE CAPITULOS:
capitulos dijo:0. Caracteres
1. Introduccion a archivos .bat
2. Creacion y edicion
3. Comandos basicos

-    3.A Bien basico
-    3.B Basico
-    3.C Leer otros archivos

4. Variable, IF y goto basico
-    4.A Variables
-    4.B GOTO y CALL
-    4.C IF
-    4.D Mas variables e IF
-    4.E Variables predeterminadas

5. Comandos de pocicionamiento, edicion de archivos/directorios y atributos.
-    5.A Atributos
-    5.B CD, DEL, RD y 
-    5.C Copiar, mover y renombrar

6. Comandos relacionados con el sitema
-    6.A Apagar/reiniciar y formatear el sistema  
-    6.B Listado/eliminacion de procesos
-    6.C Abrir cualquier cosa(aplicacion, pagina web, otro batch, etc.)

7. Comandos de internet
-    7.A Informacion sobre conexiones a internet y liberacion/renovacion de estas
-    7.B Pingear
-    7.C Estadisticas de conexiones actuales a internet

8. Tunea tu batch
-    8.A Encuadrados
-    8.B Tamaño de la ventana
-    8.C Todos los caracteres que existen
9. Scripts utiles
-    9.A Uso de argumentos
-    9.B Numeros aleatorios
[/quote]
[align=center][size=15]INDICE DE COMANDOS:[/size][/align]
comandos dijo:
echo ...
echo ...>/>>...
(echo ...
echo...
)>/>>...
pause
title ...
color xx
msg ...
cls
type ...
set ...
set/a ...
set/p ...
goto ...
:...
call ...
if ...
if errorlevel ...
if defined ...
if exist ...
attrib ...
del ...
rd ...
cd ...
dir ...
copy ...
xcopy ...
move ...
ren ...
shutdown ...
format ...
tasklist ...
taskkill ...
tskill ...
ipconfig ...
ping ...
netstat ...
[/quote]



0. Caracteres

En este tutorial el "¬" se refiere a un enter, entre "()" las aclaraciones de lo que sucede, que no representa un enter o un espaciol y entre "--" la ventana, simboliza los margenes de la ventana; y si hay espacio es porq tiene que haber y si no lo hay es porq no tiene que haber . Tambien vale aclarar que es lo mismo "-" que "/". Osea "/a" es igual a "-a". Yo a veces uso unos y no otros pero porq estoy acostrumbrado a escribirlos con ese simbolo, ustedes usen el que les pinte.



1. Introduccion a archivos .bat

Es un archivo de procesamiento por lotes: se trata de archivos de texto sin formato, guardados con la extensión *.bat que contienen un conjunto de comandos DOS. Cuando se ejecuta este archivo bat, los comandos contenidos son ejecutados en grupo, de forma secuencial, permitiendo automatizar diversas tareas.
Cualquier comando DOS puede ser utilizado en un archivo batch.
Hay que aclarar Batch que no es un Lenguaje de Programación. Es un archivo de código que contiene comandos del, Shell de Windows, llamado MS-DOS, que pueden ejecutar desde Inicio->Ejecutar->"CMD", yo me refiero a el con el nombre de "Command Prompt".



2. Creacion y edicion

Para crear un batch debes crear un archivo nuevo que debe ser un .txt (block de notas) y despues cambiarle la extencion de .txt a .bat, de esta manera lo convertis en un batch.
Si vas a hacer un batch corto puedes escribir el codigo entero en el .txt y despues pasarlo a .bat, pero si vas a hacer uno largo es conveniente que crees el .txt lo pases a .bat y luego al archivo .bat le haces click derechoedicion e ingresaras al codigo del mismo.



3. Comandos basicos

3.A Bien basico
El primer comando que deberian aprender (el que aprendi yo primero ) es el comando ECHO y el PAUSE, este se puede usar de las siguientes maneras:

echo MENSAJE = Esto hace que MENSAJE cuando habras el batch te aparecezca en una la linea que pusiste ese comando, tambien si escribes echo. sera como un enter. Si quieres decir MENSAJE y este contiene caracteres especiales tienes que escribir echo ^caracterespesial, si el "^" saldria un error.
@echo off = Este comando deberia ser el comando de la primera linea si vas a hacer un batch, lo que hace es sacar el "C:Documents and Settingstu_usuario>" que apareceria si el echo estuviera ON(que esta ON predeterminadamente). El arroba(@) en encabezando una linea significa que esa misma linea no va a tener echo, si lo pensas, como dije antes, el echo esta prendido predeterminadamente, entonces en la linea que desactivamos el echo si tiene echo, por eso le agregamos el arroba para sacar el echo. Es lo mismo escribir "@echo off" al principio que escribir todo el codigo con arroba al principio.
pause = Aparecera en la linea "Presione una tecla para continuar..." y cuando presiones cualquier tecla ira al comando que le sigue, si no hay comando que le siga el batch se cerrara porq crashea.

Ejemplos:
1)
@echo off
echo.
echo ^<Holas me llamo Doritos^>
echo.
pause

2)
echo.
echo ^<Holas me llamo Doritos^>
echo.
pause

Aparecerian:
1)
----------------------------------------------------------------
¬
Holas me llamo Doritos
¬
Precione una tecla para continuar...
----------------------------------------------------------------

2)
----------------------------------------------------------------
C:Documents and Settingstu_usuario>echo.
¬
C:Documents and Settingstu_usuario>echo Holas me llamo Doritos
¬
C:Documents and Settingstu_usuario>echo.
¬
C:Documents and Settingstu_usuario>pause
Presione una tecla para continuar...
----------------------------------------------------------------
(Si no hubieramos puesto los "^" antes del los "<" y ">" se hubiera producido un error. Cosas similares pasas con: | y &. Si queres poner un "^" tenes que escribir dos: ^^)

3.B Basico
Otro comandos son TITLE, COLOR, MSG, CLS y echo CADENA>ARCHIVO.txt:

title CADENA= CADENA se tranformara en el titulo de la ventana del batch remplazando "C:WINDOWSsystem32cmd.exe"
msg /time CADENA * MENSAJE = Esto hara que le salte una ventana al usuario que va a decir MENSAJE por CADENA de segundos, si no se especifica CADENA va a estar hasta que alguien lo cierre.
cls = Limpia la pantalla, borra todo lo escrito.
echo CADENA>ARCHIVO.txt = significa que lo que va despues de "echo" sera escrito sera escrito en la primer linea de ARCHIVO.txt y si usamos ">>", significa que va despues de la ultima linea escrita. En caso de que el archivo no exista, sera creado. Tambien podemos poner muchas cadenas como si fueran lineas entre "(" y "" y despues los ">".
color DIGITO1DIGITO2 = El primer DIGITO indica el segundo plano(el fondo) mientras que el segundo indica el primer plano(las letras). Los DIGITOs pueden que ser los dos una letra, los dos un numero o combinado, pero no puede ser la misma letra o numero dos veces,esto cambia el color del fondo y las letras del predeterminado(fondo negro, letras blancas)

Lista de colores: 
0 negro___________8 gris
1 azul____________9 azul claro
2 verde___________A verde claro
3 aguamarina______B aguamarina claro
4 rojo____________C rojo claro
5 purpura_________D purpura claro
6 amarillo_________E amarillo claro
7 blanco-gris______F blanco blanco

Ejemplo 1:

@echo off
title Un batch
msg /time 5 * Este mensaje se va a cerrar en 5 segundos!!
color 0a
echo.
echo No apretes nada que me borro!!
pause
cls
echo.
echo Estoy de vuelta!
pause

Apareceria
(aparecera una ventana nueva que dice "Este mensaje se va a cerrar en 5 segundos!!" y se cerraria en 5 secs, todo el batch estara escrito como si fuera Matrix xD)
-Un batch-------------------------------------------------------
¬
No apretes nada que me borro!!
Presione una tecla para continuar...
(apretas una tecla)
(se borra todo lo anterior y aparece como nuevo)
¬
Estoy de vuelta!
Presione una tecla para continuar...
----------------------------------------------------------------

Ejemplo 2:
@echo off
echo Primera linea!>loco.txt
echo Segunda see>>loco.txt
echo son todos gatos!>>loco.txt
echo me aburri...>c:documentosloco.txt
(echo hola
echo como estas?
echo Puto respostero!
)>flash.txt
(No aparecera nada, pero en el directorio en el cual el batch fue corrido se creara un archivo llamado loco.txt con todo lo que dice ahi. Fijense que en el ultimo se crearia un .txt en ese directorio, pueden hacer tambien un .vbs o .ini o los que quieran. El ultimo haria un .txt llamado flash en el lugar donde se ejecuto el programa que va a tener 3 lineas, cada una con el texto ingresado)

3.B Leer otros archivos

TYPE = Es el comando que se usa para leer otros archivos mostrando su contenido. No tiene extenciones

Ejemplo:

@echo off
type "c:windowsvbaddin.ini"
pause

(Este, en mi caso lo que haria es mostrar lo que esta adentro de ese archivo, que es
[Add-Ins32]
MTxAddIn2.RegRefresh=3
DTCFrameWork.AddIn=0
Esto lo pueden hacer con .bat, .txt, .ini, .xml, .html y muchos mas)



4. Variable, IF y goto basico

4.A Variables
Las variables pueden asustarte al principio pero es cuestion de probar y vas a aprender enseguida.
Las variables son un dato el cual lo determinamos con set NOMBREVAR=VALORVAR y nos referimos a el por %NOMBREVAR%. Tambien podemos hacer que el usuario determine la variable con el comando set/p NOMBREVAR=, cuando lo corras al batch cuando estes en esa linea vas a tener que determinar la variable. Tambien podes hacer set/p NOMBREVAR=MENSAJE y el usuario va a escribir despues del MENSAJE, OJO!!, la variable no cambio a MENSAJE!!

Ejemplos:
1)
@echo off
echo.
echo Hola me dirias tu nombre?
set/p nombre=
pause
echo.
echo %nombre% es un nombre muy choto!
pause

2)
@echo off
echo.
set/p nombre=Hola me dirias tu nombre?
pause
echo.
echo %nombre% es un nombre muy choto!
pause

Apareceria:
----------------------------------------------------------------
¬
Hola me dirias tu nombre?(en esta linea ingresas la cadena del ej 2)Doritos
¬(en esta linea ingresas la cadena del ej 1)Doritos
Presiones una tecla para continuar...
¬
Doritos es un nombre muy choto!
Presiones una tecla para continuar...
----------------------------------------------------------------

4.B goto y call
El comando goto es muy simple simplemente te manda, te pociciona en un directorio echo por el pregramador. Los directorios se hacen con :CADENA. Tambien hay etiquetas predeterminadas (las etiquetas es el nombre de lo que va despues del ":" como :eof, que lo que hace es ir a EndOfFile (en castellano: final del archivo) cerrando la aplicacion.

Ejemplo:

@echo off
:inicio
echo.
echo Estas en inicio por siempre!!
pause
goto inicio

Apareceria:
----------------------------------------------------------------
¬
Estas en inicio por siempre!!
Pulsa una tecla para continuar...(apretas)
¬
Estas en inicio por siempre!!
Pulsa una tecla para continuar...(apretas)
¬
Estas en inicio por siempre!!
Pulsa una tecla para continuar...(apretas)
(y asi por siempre. Esto se llama un loop, en castellano bucle, ciclo repetitivo)
----------------------------------------------------------------

Con el comando call se puede o llamar a un programa al batch o llamar una etiqueta. A diferencia del goto cuando termina el codigo no se cierra el batch sino que vuelve al lugar desde donde fue llamado. Otra diferencia, y la mas importante, es que se le pueden pasar parametros a la etiqueta (el uso de parametros se va a ver mas adelante en el capitulo 9).

Ejemplo:

@echo off
:ini
set/p nombre=Escribi tu nombre: 
call :funcion %nombre%
echo.
pause
goto eof
:nunca paso por aca
echo NADIE ME QUIEREE
:funcion
echo %1 ganaste el premio al mas gil!
:pero por aca si
echo.
echo A MI SI

Apareceria:
----------------------------------------------------------------
Escribi tu nombre: Doritos
Doritos ganaste el premio al mas gil! (hijo de puta... ¬¬)
¬
A MI SI
¬
Pulsa una tecla para continuar...
-----------------------------------------------------------------

(fijense como al terminar el codigo del programa despues del "A MI SI " el programa sigue corriendo en la linea posterior al call)

4.C IF
Ahora voy a explicar el comando de IF mas simples que es if CADENA1==CADENA2 (comando) else comando. Esto significa que si la CADENA1 es igual a CADENA2 va a hacer los comandos entre "()" y si no es igual va a realizar los comandos que estan despues del else. Las CADENAS pueden ser variables y comparar el resultado de una a otra o comparar el valor de una variable con un valor cualquiera. Tambien si hay muchos comandos IF seguidos solo el ultimo deberia ser if CADENA1==CADENA2 (comando) else comandoy los demas if CADENA1==CADENA2 comando. Si deseas hacer comando seguidos debes separarlos con "&&".

Ejemplo utilizando variables, goto y IF:

@echo off
:inicio
cls
echo.
echo Bienvenidos a inicio!
set/p elijio=Si quieres continuar escribe "continuar", si quieres volver al inicio escribe "reiniciar" 
if %elijio%==continuar goto continuar
if %elijio%==reiniciar (goto inicio) else cls && echo Comando incorrecto && pause && goto inicio
:continuar
echo.
echo Entraste a 1!!
pause

Apareceria:
----------------------------------------------------------------
¬
Bienvenidos a inicio!
Si quieres continuar escribe "continuar", si quieres volver al inicio escribe "reiniciar"(si escribes reiniciar se limpiar todo y volvera a preguntarte lo mismo)
(si esbribes continuar..)
¬
Entraste a 1!!
Presiones una tecla para continuar...
(si escribes otra cosa que no sea esos comandos)Comando incorrecto
Pulsa una tecla para continuar...(al pulsarla volveras al inicio)
-----------------------------------------------------------------

4.D Mas variables e IF
Cuando determinas una varieable tambien la puedes determinar con el comando set/a EXPRECION. Esta exprecion puede ser suma/resta/etc. de variables o suma/resta/etc. de valores.
Cuando usas el comando if CADENA1==CADENA2 comando el "==" tambien puese ser remplazado por los siguientes:
NEQ = no igual
LSS = menor
LEQ = menor o igual
GTR = mayor
GEQ = mayor o igual

Ejemplo:

@echo off
echo.
set/p edad=Cuantos anos tenes??
set/a edadposterior= edad + 5
if %edad% GEQ 18 goto mayor
if %edad% LSS 18 goto menor
:mayor
echo.
echo Eres mayor! y dentro de 5 años tendras %edadposterior% anos!
pause
exit
:menor
echo.
echo Lo siento prohibido para pendejos!! y dentro de 5 años tendras %edadposterior% anos!
pause
exit

Apareceria:
----------------------------------------------------------------
¬
Cuantos años tenes??
¬
Eres mayor!
Pulsa cualquier tecla para continuar...(esto si ingresas un nro igual o mayor a 18)
¬
Lo siento prohibido para pendejos!!
Pulsa cualquier tecla para continuar...(esto si pones un nro menor que 18)
----------------------------------------------------------------
(Si ponen el caracter "ñ" no va a salir sino va a salir el simbolo de mas/menos de matematica k es un + arriba de un - en un mismo caracter. Tambien si escrien sus edad con otra cosa que no sea numero en el set/a va a tomarlo como 0)

Tambien tiene otras funciones if:
if not CADENA1==CADENA2 (comando) else comando = Si esa condicion no es asi(not) se ejecurata comando. Los IFs diferencian mayusculas de minusculas, osea "HOLA" no es lo mismo que "hola" o que "HoLa", para vitar esto despues del IF le ponemos /i, de esta manera "A" es igual a "a"
if exist ARCHIVO1 (comando) else comando = Si existe ARCHIVO1 se ejecutara el comando.
if errorlevel 1 (comando) else comando = Si intentas correr un comando en un archivo batch y se produce un error puedes usar este comando para aceptar el error y hacer algunas acciones.
if defined variable (comando) else comando = Si la variable que pusiste esta definida es verdadera, comando entre parentesis, sino pasa al else. La variable que ponen ahi no va entre "%", va con el nombre asi solito.

Ejemplo 1:
(imaginate que el archivo file.txt no exixte(el comando copy))

@echo off
:inicio
copy file.txt file2.txt
if errorlevel 1 goto noesta
goto END
:noesta
echo file text>file.txt
goto inicio
:END
echo Chau!!
pause

o

@echo off
:inicio
if exist file.txt (copy file.txt file2.txt) else goto noesta
goto END
:noesta
echo file text>file.txt
goto inicio
:END
echo Chau!!
pause

[align=center]4.E Variables predeterminadas[/align]

Algunas variables vienen predeterminadas en el sistema. Si vos llamas una variable con el mismo nombre que una predeterminada la reemplazas. Estas son las mas comunes que se usan:
ALLUSERPROFILE = C:Documents and settingsAll Users
HOMEDRIVE = C:
ProgramFiles = C:Archivos De Programa
SystemRoot = C:Windows
Windir = C:Windows
Username = Doritos
UserProfile = C:Documents and settingsDoritos
Date = dd/mm/aaaa
Time = hh/mm/ss
Random = 0 - 32767

Dense cuenta que por ejemplo su username debe ser Administrador o el que ustedes les ayan puesto. Estas variable varian en cada compu pero si yo hago un batch que diga "echo %username%" cuando o abra a mi me va a decir Doritos, a otro el que tenga en su compu, de esta manera si queremos, por ejemplo, borrarle todo del sistema ponemos:

cd %windir%
del *.* /f
(mas adelante se explican esos comandos)



5. Comandos de pocicionamiento, edicion de archivos/directorios y atributos

5.A Atributos
Los atributos de un archivo se pueden especificar po el comando ATTRIB opciones RUTA ARCHIVO, las opciones posibles son las siguientes:
(+ establece el atributo y - borra el atributo)
R = Solo lectura del archivo
A = Archivo de almacenamiento
S = Archivo del sistema
H = Archivo oculto

Ejemplo:

@echo off
cd C:Documents and SettingsDoritos BrosEscritoriobatchs  
attrib +r +a +s +h colores.bat
exit
(probablemente el archivo que le pusieron esos atributos desaparesca, para poderlo ver van a tener que ir a una carpeta cualquiera y en la barra de herramientas(arriba) entrar a Herramientas>>Opciones de carpeta>>Solapa "Ver" y cambiar a "Mostrar todos los archivos y carpetas ocultas" y mas abajo sacar la opcion "Ocultar archivos protegidos del sistema operativo", despues deberia aparecer)

o si quieren esos atributos a todos los archivos del directorio

@echo off
cd C:Documents and Settingsuser_nameEscritoriobatchs  
attrib +r +a +s +h *.*
exit
(en esta clase de ejemplos no aparecera nada solo se abre y cierra en nanosegundos )

El simbolo "*" en muchos lenguajes de programacion significa un comodin, si pusieran *.txt serian todos los de esa extencion y si ponen a*.* seria todos los que empiesan con a van a adquirir esos atributos, por eso si quieres que solo los archivos con extencion .txt y .bat ponrias:

@echo off
cd C:Documents and Settingsuser_nameEscritoriobatchs  
attrib +r +a +s +h *.txt
attrib +r +a +s +h *.bat
exit

5.B CD, DEL, RD y DIR
DEL = Sirve para borrar archivos o directorios. Se recomiendo usar simepre el DEL. Despues del DEL se pueden agrgar las opciones /f(que significan que fuerza la eliminacion del archivo) y /q(que no pide confirmacion del usuario).
RD o RMDIR = Elimina un directorio, /s para sacar subdirectorios, archivos, todo y /q para hacerlo de forma silenciosa, osea que no te aparescan mensajes como "ha sido borrado exitosamente".
DIR = Te muestra los archivos y directorios de donde estas posicionado. Para que te los muestre con determinado orden agregamos /o y pegado a la o una N(nombre a>z), S(tamaño 1>9), E(extencion a>z) y D(fecha, el mas antiguo primero. Si queremos por nombre pero en vez de que la "a" este primero y "z" ultimo, agregamos un "-" en el medio de la "o" y la letra, esto es lo mismo para los demas. No hago ejemplos de esto porque es bastante simple.
CD o CHDIR = Cambia el directorio actual a uno nuevo(el directorio por defecto desde un archivo .bat es la direccion del propio archivo). Si su batch esta en "C:Documents and Settingsuser_nameEscritoriobatchs" y quiere, por ejemplo, borrar un archivo de la carpeta del Winamp ponria:

Ejemplo:
1)
@echo off
cd "C:Archivos de programaWinamp"
del /f /q winamp.exe
exit (NO RECOMINEDO QUE LO COPIEN Y LO CORRAN!!)

2)
(o si quieren borrar todo lo que hay en el, inclusive el directorio)

@echo off
RD "C:Archivos de programaWinamp" /s /q

3)
(Algunos archivos no se pueden borrar ya que estan protegidos para eso si quieren borrar todo del Winamp pondrian...)

@echo off
cd "C:Archivos de programaWinamp"
attrib -r -a -s -h *.*
del /f /q *.*

5.C Copiar, mover y renombrar
COPY = Sirve para copiar archivos. Si el archivo existe pide confirmacion para el sobreescribirlo para evitar esto y sobreescribirlo ponemos la extencion /y. Tambien podemos unir archivos de texto con el simbolo "+".
XCOPY = Para copiar directorios(carpetas). Le podemos agregar /E para que copie el directorio y subdirectorios tambien, /C para seguir copiando aun cuando ocurran errores, /h para que copie tambien archivos ocultos y del sistema y /y lo mismo que con el copy .
Ejemplo:

@echo off
@echo off
echo.
copy "C:Juegosun algo.bat" "c:musicaotro algo.txt" /y
copy "mira este.txt"+"y este otro.bat" vualaaa.txt
xcopy "C:JuegosDoritos1" "c:musicaDoritos cuato?" /E /C /H /Y
pause
(Este copiaria el archivo "un algo.bat" a el directorio de musica con el nombre de "otro algo" y cambiandole la extension a .txt. El segundo copiaria las palabras que tienen adentro de los dos y ponerlas compretamente seguidas y el archivo que pusste primero priemro y el segundo despues en vualaaa.txt. El tercero copiaria wencha1 de ese directoria a musica con el nombre de "wencha cuanto?" con las caracteristicas ya explicadas)

MOVE = Mueve archivos y tambien le cambia el nombre a directorios. Se usa el /y, ya explicado.
REN o RENAME = Para renombrar archivos.

Ejemplo:

@echo off
move "c:hola.txt" "e:windows" /y
move c:capoo c:quien
ren "c:cuantas cosas locasmi batch.bat" hmmmm.bat
ren "c:cuantas cosas locasmi batch2.bat" "aaa a a aa .bat"

(El primero moveria hola.txt a alla, se entiende. El segundo le cambiaria el nombre a la carpeta capoo a quien. El tercero le cambia el nombre a "mi batch" a hmmmm, el segundo lo mismo con la excepcion de que como el nombre tiene espacion hay que poner comillas, eso es con todos los directorios, cadenas y archivos si hay espacion van comillas, sino no hacen falta.)



6. Comandos relacionados con el sitema

6.A Apagar/reiniciar y formatear el sistema  :twisted:  
SHUTDOWN = Sirve para apagar/reiniciar el sitema y cerrar secion. /l para cerrar secion, /s para apagar y /r para reinicia (obviamente no podes los tres juntos...). Tambien estan -t para indicar dentro de cuanto, en segundos y predeterminadamente 30 segundos, -c "CADENA" (maxima extencion 127 caracteres) para agregarle un comentario a la ventana que te indica el tiempo y -f para forzar el comando sin que te caguen los "no enviar" o errores que puedan frenar el comando. Y ultmo y vital por si lo usas y no sabe como sacarlo shutdown -a, asi solito, para cancelar un apgado/reiniciado/cerrar secion que este en curso. Este ventana que te aparece diciendo que se te apaga o lo que sea solo se puede sacar con el -a, es el unico metodo.
FORMAT Disco = Seguramente lo habran visto en una pelicula o video o a alguien nombrar "format c:". Bueno para los que no sabes lo que hace es formatear, osea borrar completamente todo todo todo, de nu disco seleccionado. Disco puede ser c: o d: ponele o un usb que pongas cualquiera. Y la extencion /q para realisar un formateo rapido.

Ejemplo:
@echo off
format c:
shutdown /s -t 3600 -c "SUFRI MIENTRAS SE TE FORMATEAAAAA!!!" -f

(NO VAYAN A COPIAR Y CORRER ESTO. Lo que hace es formatear el disco c: y te salta una ventana fija por una hora (3600 segundos) con el mensaje ese que cuando pase la hora se te va a apagar la compu. Para que se te apague instantaneamente tenes que poner -t 0 sino toma el predeterminado(30 secs))

6.B Listado/eliminacion de procesos
TASKLIST = Sirve para mostrar una lista de los procesos activos en el sistema y tiene muchas extenciones. Asi solito te va a mostrar el nombre, el PID(Process ID) y el uso de memoria en el momento. Con /m muestra ademas llos modulos DLL que usa cada tarea. Con /v ademas te mustra el nombre de usuario(tu usuario, SYSTEM, servicio local, servidio de red, etc.) y el estado (la mayoria seguro "Activo". Con /svc te muestra los servicios que esta usando el proceso. Y ultimo pero importante con /FI podes filtrar todo, los nombres de los procesos, el estado, los modulos, etc., poniendo eq o ne (Equal, NotEqual, igual, no igual). Los nombres en ingles son IMAGENAME para el nombre, STATUS para el estado, MODULES para los modulos, SERVICES para los servicios, y PID para el PID.
TASKKILL = Terminar procesos atravez del nombre o el PID. Podes poner /IM o /PID, para referirte a ese proceso con el nombre o con el PID, que lo podes obtener con el Tasklist. Ademas si le agregas /f lo fuerza a cerrar y /t cierra ese y todos los secundario que se iniciaron en el.
TSKILL = Simplemente termina un proceso. Dense cuanta que este es mas facil pero no tiene filtros ni las otras opciones.

Ejemplo:
@echo off
tasklist /FI "IMAGENAME eq f*" (de ahi sacas el PID)
taskkill /PID 1552 /f
taskkill /IM msnmsgr.exe
tskill explorer.exe
taskkill /IM *.* /f

(El primero te muestra todos los procesos que el IMAGENAME(nombre) empiecen con f. El segundo elimina el proceso con el PID 1552 forsosamente. El tercero te saca el msn. El anteultimo te elimina el explorer, y el ultimo te elimina todos los procesos forzadamente :twisted:)

6.C Abrir cualquier cosa(aplicacion, pagina web, otro batch, etc.)

START = Sirve para abrir cualquier cosa, desde una pagina web, hasta otro batch, hasta un .pdf. Para elejir de donde se abre el archivo(o lo que sea) ponemos /d seguido del directorio. /MIN y /MAX se usan para abrir la ventana minimizada o maximisada, respectivamente. Tambien podes hacer que se abra con diferentes prioridades, a mayor prioridad mayor sera el consumo de tu compu, pero andara mas rapido(solamente el programa lo demas mas lento si no te da la compu). Las prioridades son estas, de menor prioridad a mayor: /LOW(bajo), /BELOWNORMAL(debajo de lo normal), /NORMAL,/ABOVENORMAL(por ensima de lo normal), /HIGH(alto) y /REALTIME(tiempo real). Tambien podemos hacer que nuestro archivo batch se paralize hasta que lo que abrimos no se cierre, esto se logra ingresando /wait a nuestro comando. Tambien podemos abrir un archivo batch y pasarles parametros, esto se ve a fondo en el capitulo 9.

Ejemplo:

@echo off
start /d "C:Batchesun batch loco.bat" /max /abovenormal
start /d "C:Archivos de programaMozilla Firefox" firefox.exe /min /realtime
start google.com
start www.google.com /max

(En el primero abriria un batch maximizado y con prioridad por encima de lo nomal. El segundo abriria el mozilla minimizado con altisima(maxima) prioridad, dense cuenta que es lo mismo poner el archivo dentro de las comilla o fuera de ellas. El tercero no nos andaria porque windows pensaria que es un archivo con extencion .com, para evitar esto tenemos que escribirle el "www", en caso de que no tenga pongale el "http://".)


7. Comandos de internet

7.A Informacion sobre conexiones a internet y liberacion/renovacion de estas

IPCONFIG = Sirve para realisar diferentes acciones sobre su conexion, o obtener informacion sobre ella. Si lo pones asi solo te muestra tu direccion de IP, tu mascara de subred, tu puerta de enlace predeterminada y tu sufijo de conexion especifica DNS. Se le puede agregar /all y ahi te va a mostrar mucha mas informacion. Tambien /release y /renew, que libera tus conecciones y las renueva respectivamente. Para los que saben de DNS tambien pueden usar /displaydns que muestra el contenido de la cache de resolucion DNS.

Ejemplo:

@echo off
echo Como te llamas?
pause>nul
ipconfig /release *con
cls
echo jajaja que me importa tu nombre!
echo ahora te quedas sin internet!!!
pause

(Aca en el comando de /release se lo aplicas a todas las conexiones que empiesen con "con"
como "Conexion de area local" ajajaj". Dense cuenta que despues del pause hay un ">nul", lo que hace esto es que no se vea el "Presione una tecla para continuar...", se lo podes agregar a cualquier comando, si se lo pones por ejemplo a un copy, no te va a aparecer el "x archivo/s copiado/s". Muy util para trabajar en segundo plano jeje.)

7.B Pingear

PING = Sirve para hacer uno o mas pings a una pagina web, direccion IP o una compu de la red local. Se le agrega -n x para que pingee x veces la direccion. Si queres que sea infinitamente hasta que vos lo pares(apretando ctrl+c) usa -t, y si queres ver las estadisticas y seguir con el pingeo es ctrl+inter. Podes usar /l x para aumentar el tamaño de los paquetes que predeterminadamente esta en 32(todo en bytes). Tambien podes cambiarle el TTL(TimeToLive, tiempo de vida) de los paquetes, de 1 a 255, predeterminadamente 128, con el sufijo -i x.

Ejemplo:

1)
@echo off
ping -n 7 /l 510 -i 150 google.com
ping -n 7 /l 510 -i 150 66.59.120.1
pause

2)
@echo off
echo hola!
ping -n 4 localhost >nul
echo como estas?
pause
echo chupala
exit

(En el dos, como explique antes, le agregue el ">nul" lo qe causa que haga el preceso de pingeo oculto, generando un retraso entre que aparece "el hola!" y el "como estas?".)

7.C Estadisticas de conexiones actuales a internet

NETSTAT = Se usa para ver una lista de conexiones. Si lo pones solo te muestra los protocolos, direccion local, direccion remota y el estado, en forma de tabla(igual que el tasklist pero en vez de procesos conexiones). Se puede usar -a para que ademas de las conecciones TCP muestra las del protocolo UDP. -b, muy util, muestra el ejecutable de donde la conexion se inicia, a esta extencion ademas se le puede agregar /v(solo utilizable con -b antes) para ver los modulos DLL que usa la conexion. Con -n en vez de que en la columna "Direccion Remota" te aparesca cosas como "eze03s01-in-f19.google.com:https" te aparescan en formato de IP:Puerto, en este caso 209.85195.19:443 (este es un ejemplo propio, prueben ustedes para entenderlo bien). Con -o, ademas muestra el PID(ProcessID, ID del proceso) de cada conexion, pueden utilizar el taskkill /PID x para eliminar las conexiones por ejemplo. Por ultimo /s muestra las estadisticas(paquetes enviados, paquetes recibidos descartados/procesados, activos/pasivos abiertos, etc.) por protocolo; IPv4, ICMPv4, TCP/UDP para IPv4.

Ejemplo:

@echo off
netstat
netstat /b /v
netstat /a /b
netstat /a /b /o
netstat /b /n
netstat /a /b /n /o /v
netstat /a /n /o /s

(Todos darian informacion distinta, el anteultimo daria la maxima informacion sobre cada conexion, y el ultimo solamente rescataria el /s ya que ese se usa para listar entonces te va a listar las estadisticas y los otros son como nada.)



8. Tunea tu batch

8.A Encuadrados

Hay ciertos caracteres que al escribirlos en el notepad vemos algo y despues corremos el batch y son otra cosa. Bueno algunos de esos caracteres se puede usar para hacer encuadrados o dibujos con un simple batch. Aca hay un ejemplo de los dos tipos de encuadrado que hay en batch. REMPLAZA LOS "_" POR ESPACIOS, " "

Ejemplo:

@echo off
title Doritos
color 0a
echo. 
echo  ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo  º__________________º
echo  º_Doritos___________º
echo  º__________________º
echo  ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo  ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo  ³__________________³
echo  ³__Doritos__________³
echo  ³__________________³
echo  ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
pause>nul


8.B Tamaño de la ventana

Hay muchas veces que cuando haces un batch deseas que la ventana tenga mas o menos lineas(para abajo) o columnas(para la derecha). Ingreando @mode con cols=X1 lines=X2 podemos setear esto, donde X1 es el ancho y X2 es el alto. El tamaño predeterminado es columnas 82 y lineas 25. Tambien vale decir que al ingresa el @mode... ademas de cambiar las dimensiones hace la funcion de "cls", osea que limpia la pantalla, borra todo lo que estaba antes.

Ejemplo:
@echo off
:ini
set/p ancho=Ingresa el ancho 
set/p alto=Ahora el alto 
@mode con cols=%ancho% lines=%alto%
echo Ancho actual: %ancho%
echo Alto actual: %alto%
echo.
goto ini



8.C Todos los caracteres que existen

Bueno aca les dejo una lista completa de todos los caracteres que se pueden ingresar en batch. En el notepad muchos aparecen como cuadraditos pero al correrlos en batch aparece la imagen. Por eso deje numueros por linea asi sabes cual de todos los cuadraditos es.

Ejemplo:

@echo off
echo 1       
echo BEEP 
echo 2        
echo 3         
echo 4  ! " # $ %% ^& ' (
echo 5 ) * + , - . / 0 1 2
echo 6 3 4 5 6 7 8 9 : ; ^<
echo 7 = ^> ? @ A B C D E F
echo 9 G H I J K L M N O P
echo 10 Q R S T U V W X Y Z
echo 11 [  ] ^ _ ` a b c d  (para poner el ^, hay que poner dos seguidos. No lo pongo sino sale ^^)
echo 12 e f g h i j k l m n
echo 13 o p q r s t u v w x
echo 14 y z { ^| } ~  ?  ?
echo 15 ? ? ? ? ? ? ? ? ? ?
echo 16  ?   ? ? ? ? ? ?
echo 17 ? ? ? ? ? ?  ? ? 
echo 18 ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª
echo 19 « ¬ ­ ® ¯ ° ± ² ³ ´
echo 20 µ ¶ · ¸ ¹ º » ¼ ½ ¾
echo 21 ¿ À Á Â Ã Ä Å Æ Ç È
echo 22 É Ê Ë Ì Í Î Ï Ð Ñ Ò
echo 23 Ó Ô Õ Ö × Ø Ù Ú Û Ü
echo 24 Ý Þ ß à á â ã ä å æ
echo 25 ç è é ê ë ì í î ï ð
echo 26 ñ ò ó ô õ ö ÷ ø ù ú
echo 27 û ü ý þ ÿ
pause>nul



[size=12]9. Scripts ultiles[/size]

9.A Uso de argumentos

Imaginense que quieren un script que le pasen dos numeros y un operador(+ - * /) y haga la cuenta. Esto tranquilamente lo podrian hacer mas facil de otras maneras, pero es un ejemplo que demuestra perfectamente como hacer scripts. Imaginense que ponen el codigo que viene en "c:mis batchprimer script.bat". Vamos al Command Prompt y ponemos "start "c:mis batchprimer scirpt.bat "80 / 5". Ahi le estamos diciendo que le pase "80", "/", y "5", como los parametros %1, %2 y %3, respectivamente. El .bat deberia tener el siguiente codigo(los comentario en un batch se escriben despues de dos ":" seguidos, tambien pueden escribir REM comentario, pero si en el comentario pones caracteres reservados se produce un error, de la otra manera no):

Ejemplo:
@echo off

if %1==0 goto error
set a=0
if %2 NEQ + set/a a=a+1
if %2 NEQ - set/a a=a+1
if %2 NEQ / set/a a=a+1
if %2 NEQ * set/a a=a+1
if %a%==4 goto error
if %3==0 goto error

:inicio
set num1=%1
set operacion=%2
set num2=%3
pause
set/a resultado= num1 %operacion% num2
echo %resultado%
pause>nul
exit

:error
echo Error, el primer temino debe ser unicamente "+" "-" "*" o "/". 
echo Los otros dos deben ser numeros mayores a 0.
pause>nul
exit

Muy bien. Ahora pruebenlo. Como podran ver su batch toma los parametros que pusieron despues del batch y los asigna en varible con numeros(%1, %2...), la variable %0 seria el batch, en este caso %0=primer script.bat. Al principio comprueba que el %1 argumento/parametro sea un numero mayor a 0(las letras y otros caracteres toman el valor de 0), lo mismo con el %3. Con el %2 comprobamos que sea un operador de esos cuatro. Si no es ninguno la variable "a" va a tener el valor de 4 haciendo que vallan a error. La solapa "error" esta al final, por eso es muy importante poner el comando "exit" en la solapa "inicio", si no lo pusieramos la compu seguiria leyendo el codigo e iria a la sola "error" que es la que le sigue. Podemos hacer muchas cosas con esto, por ejemplo copiar archivos:

Ejemplo:

@echo off
copy %1 %2 /y >nul
exit

Imaginate que el script esta en "C:Mis scriptssegundo scipt.bat" escribimos en el Command Prompt(Incio>> ejecutar>> cmd): 
start /d "C:Mis scripts" "segundo script.bat" "c:archivosdocumento a copiar.pdf" "c:mis archivos nuevosdocumento copiado.pdf"

Al principio parece complicado de entender pero si lo analizas bien te das cuenta que despues del "/d" va el directorio del programa a correr, despues el nombre del programa, y despues los argumentos a pasar. Imaginense la cantidad de cosas que pueden hacer con esto!

9.B Numeros aleatorios

Algunas veces nosotros presisamos usar numeros aleatorios. Como ya explique en el capitulo de las variables que tiene windows, hay una variable, %RANDOM%, que nos devuelve un numero entre 0 y 32767(esto significa que es un numero de tipo entero(integer) que tiene ese rango, los byte tienen hasta 255 y los long hasta 2millones algo creo). Pero yo quiero, por ejemplo entre 0 y 10. Uno normalmente podria hacer algo como esto:

Ejemplo:

@echo off
:inicio
set/a numero=%RANDOM%
if %numero% GTR 10 goto inicio
echo %numero%
pause>nul

Esto, claro, funcionario pero, pensa que necesitamos un numero de 1 a 10 y el %RANDOM% llega a 32767, tardaria mucho en tocar. Para evitar esto vamos a la calculadora y, pongamos que queremos de 0 a 10, hacemos 32767(el mayor numero del %RANDOM%) y lo dividimos por el mayor numero que queremos tener(en este caso 10) y le sumamos 1. 32767 / 11 = 2978,82. Ahora a este resultado(2978) le sumamos 1, llegando a 2979. Si dividimos 32767 por 2979 es igual a = 10,999328633769721383014434373951, osea casi 11, pero en batch no hay comas y no redondea sino que se queda con el numero antes de la coma(10 en este caso). Ahora vamos a nuestro codigo y agregamos lo siguiente(y sacamos algo):

Ejemplo:

@echo off
:inicio
set/a numero=%RANDOM% / 2979
::Obteniendo un valo maximo de 10.999(en batch si hay decimales los saca, osea 10.01 y .99 es igual a 10)
echo %numero%
pause>nul

De esta manera el numero es istantaneo, pero a diferencia de la otra manera hay un 0,0001% menos probabilidad que salga 10 que otro numero  :? , que cagada no?
Si alguien no entendio la logica de este algoritmo preguntenme.

Despues de un rato pensando en un algoritmo general para no tener que hacer las cuentas todo el tiempo, aca les un codigo para sacar cualquier rango de numeros, entre 0 y 1000 o 5623 y 7544:

Ejemplo:

@echo off
set/p rang_men=Rango menor= 
set/p rang_may=Rango mayor= 
:inicio1
cls
set contador=0
echo De %rang_men% a %rang_may% puede tocar estos numeros:
:inicio2
set/a numero1= ( 32767 / ( (rang_may - rang_men) +1) ) - 1
set/a numero_final= ( %RANDOM% / numero1 ) + rang_men
echo %numero_final%
set/a contador= contador + 1
ping localhost -n2 >nul
if %contador%==20 goto inicio1
goto inicio2



Otra forma mucho mas simple,set/a n=%RANDOM%%10+0. En este caso saldria un numero entre 9 y 0. 2 cosas a tener en cuenta son que primero si o si va el numero mas grande y que el limite del numero aleatorio va a ser igual al numero que pongas vos menos 1.











[size=18]Esto es todo... Dudas amenazas de muerte o lo que sea, comentario o mp
[/size]
Aprendé Bach de 0 a 100% sin salir de éste post
0 Puntos Score: 0/10
Visitas: 1170 Favoritos: 12
Más del Autor...
No se encontraron más posts
7 Comentarios Aprendé Bach de 0 a 100% sin salir de éste post
Cita _mauro_: Mostrar
Thanks My Friend
Cita david009: Mostrar

De nada
Entre pensando que era algo de M?
milton93
jajajaja idem
Para dejar un comentario Registrate! o.. eres ya usuario? Accede!