Manual de Comandos Batch: Desde lo básico hasta la creación de scripts

Comandos Batch

¿Qué comandos existen en batch?

Existen comandos internos y externos:

  • Comandos internos: Integrados en el sistema (comandos por defecto).
  • Comandos externos: Se descargan y guardan en el sistema (en la carpeta system32).

Lista de comandos internos y su función

Hay más comandos internos ocultos

ASSOC Muestra o modifica las asociaciones de las extensiones de archivos.
AT Planifica comandos y programas para ejecutarse en un equipo.
ATTRIB Muestra o cambia los atributos del archivo.
BREAK Establece o elimina la comprobación extendida de Ctrl+C.
CACLS Muestra o modifica las listas de control de acceso (ACLs) de archivos.
CALL Llama a un programa por lotes desde otro.
CD Muestra el nombre del directorio actual o cambia a otro directorio.
CHCP Muestra o establece el número de página de códigos activa.
CHDIR Muestra el nombre del directorio actual o cambia a otro directorio.
CHKDSK Comprueba un disco y muestra un informe de su estado.
CHKNTFS Muestra o modifica la comprobación de disco al iniciar.
CLS Borra la pantalla.
CMD Inicia una nueva instancia del intérprete de comandos de Windows.
COLOR Establece los colores de primer plano y fondo predeterminados de la consola.
COMP Compara el contenido de dos archivos o un conjunto de archivos.
COMPACT Muestra o cambia el estado de compresión de archivos en particiones NTFS.
CONVERT Convierte volúmenes FAT a volúmenes NTFS. No puede convertir la unidad actual.
COPY Copia uno o más archivos a otro lugar.
DATE Muestra o establece la fecha.
DEL Elimina uno o más archivos.
DIR Muestra una lista de archivos y subdirectorios en un directorio.
DISKCOMP Compara el contenido de dos disquetes.
DISKCOPY Copia el contenido de un disquete en otro.
DOSKEY Edita líneas de comando, memoriza comandos y crea macros.
ECHO Muestra mensajes, o activa y desactiva el eco.
ENDLOCAL Termina la búsqueda de variables de entorno del archivo por lotes.
ERASE Elimina uno o más archivos.
EXIT Sale del programa CMD.EXE (interfaz de comandos).
FC Compara dos archivos o conjunto de archivos y muestra las diferencias entre ellos.
FIND Busca una cadena de texto en uno o más archivos.
FINDSTR Busca cadenas de texto en archivos.
FOR Ejecuta un comando para cada archivo en un conjunto de archivos.
FORMAT Da formato a un disco para usarse con Windows.
FTYPE Muestra o modifica los tipos de archivo utilizados en una asociación de archivos.
GOTO Direcciona el intérprete de comandos de Windows a una línea en un programa por lotes.
GRAFTABL Permite a Windows mostrar un conjunto de caracteres extendidos en modo gráfico.
HELP Proporciona información de ayuda para los comandos de Windows.
IF Ejecuta procesos condicionales en programas por lotes.
LABEL Crea, cambia o elimina la etiqueta del volumen de un disco.
MD Crea un directorio.
MKDIR Crea un directorio.
MODE Configura un dispositivo de sistema.
MORE Muestra la información pantalla por pantalla.
MOVE Mueve uno o más archivos de un directorio a otro en la misma unidad.
PATH Muestra o establece una ruta de búsqueda para archivos ejecutables.
PAUSE Suspende el proceso de un archivo por lotes y muestra un mensaje.
POPD Restaura el valor anterior del directorio actual guardado por PUSHD.
PRINT Imprime un archivo de texto.
PROMPT Cambia el símbolo de comandos de Windows.
PUSHD Guarda el directorio actual y después lo cambia.
RD Elimina un directorio.
RECOVER Recupera la información legible de un disco dañado o defectuoso.
REM Graba comentarios en archivos por lotes o CONFIG.SYS.
REN Cambia el nombre de uno o más archivos.
RENAME Cambia el nombre de uno o más archivos.
REPLACE Reemplaza archivos.
RMDIR Elimina un directorio.
SET Muestra, establece o elimina variables de entorno de Windows.
SETLOCAL Inicia la localización de cambios del entorno en un archivo por lotes.
SHIFT Cambia posición de modificadores reemplazables en archivos por lotes.
SORT Ordena las entradas.
START Inicia otra ventana para ejecutar un programa o comando.
SUBST Asocia una ruta de acceso con una letra de unidad.
TIME Muestra o establece la hora del sistema.
TITLE Establece el título de la ventana de una sesión de CMD.EXE.
TREE Muestra gráficamente la estructura de directorios de una unidad o ruta de acceso.
TYPE Muestra el contenido de un archivo de texto.
VER Muestra la versión de Windows.
VERIFY Comunica a Windows si debe comprobar que los archivos se escriben de forma correcta en un disco.
VOL Muestra la etiqueta del volumen y el número de serie del disco.
XCOPY Copia archivos y árboles de directorios.

Explicación de algunos comandos

Comando Echo

  • echoecho off / @echo off (Echo activado por defecto)
    echo: Activa el eco. Muestra la ruta donde se ejecutan los comandos.
    echo off / @echo off: Desactiva el eco. Oculta la ruta donde se ejecutan los comandos.

Comando Cls

Borra la pantalla.

Comando Goto

Sirve para dirigirte a una etiqueta*.
*Una etiqueta es una palabra [seguida de ‘dos puntos’ ( : )] que identifica un menú.

Comando Help

Muestra los comandos de la consola (internos predeterminados).

Comando Pause

El archivo por lotes se para hasta que se presione una tecla para continuar.

Comando 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.

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.

Ejemplo de código

@echo off
set variable=Batch
set variable2=scripting
echo %variable% es un lenguaje %variable2%
pause>nul
goto eof

El resultado es:

Batch es un lenguaje scripting

Lo que hacemos con el comando set es identificar una cosa con otra, en este caso Batch con variable y scripting con variable2

Con el modificador /p, damos la opción al usuario a que inserte un/os dato/s que se guardan en una variable.

Ejemplo de código

set /p nombre=
set /p edad=
echo Su nombre es %nombre% y su edad es de %edad%
pause>nul

Si el usuario inserta Pedro de nombre y 19 de edad, el resultado será:

Su nombre es Pedro y su edad es de 19

Ahora vamos a aplicar condiciones

Ejemplo de 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
  1. Creamos una variable (‘saludo’) que contenga la palabra hola.
  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, así que el resultado es:

La variable es igual a hola

Si ‘saludo’ lo hubiéramos igualado a adios, el resultado sería así:

La variable es igual a adios

Si ‘saludo’ lo hubiéramos igualado a otra cosa diferente, el programa no mostraría nada porque ‘saludo’ no se iguala a ninguna de las dos condiciones.

Parámetros de If

Los siguientes parámetros solamente funcionan con dígitos numéricos

EQU – igual
NEQ – no igual
LSS – menor que
LEQ – menor que o igual
GTR – mayor que
GEQ – mayor que o igual

Ejemplo de código

set numero=10
if %numero% EQU 10 (echo El numero es igual a 10)
pause>nul

El resultado es:

El numero es igual a 10

El programa se cerraría si la variable ‘numero’ no fuera igual a 10.

If exist / If not exist

Ejemplo de código

if exist "C:\file.bat" (echo El archivo file.bat existe en la ruta C:\)

Vemos que SI existe el archivo que hemos propuesto, seguidamente nos muestra:

El archivo file.bat existe en la ruta C:\

De lo contrario…

Ejemplo de código

if not exist "C:\file.bat" (echo El archivo file.bat no existe en la ruta C:\)

Resultado:

El archivo file.bat no existe en la ruta C:\

If y else

Ejemplo de código

set var=pasqui
if %var%==Manoel (echo La variable es Manoel) else (echo La variable no es Manoel)
pause>nul

Como bien vemos, la variable ‘var’ posee la palabra pasqui, por lo tanto nuestra condición propone que si la variable ‘var’ es igual a Manoel muestra:

La variable es Manoel

y si la variable no es Manoel, muestra:

La variable no es Manoel

Por lo tanto, podemos decir del parámetro else, que significa » SI NO «. El comando que va después de else, se ejecuta siempre que la condición propuesta sea errónea.

Comprobación de variable: if + set

Ejemplo de 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

Con los corchetes comprobamos si el usuario ha insertado algún dato en la variable ‘variable’.
Podemos utilizar cualquier símbolo, letra o número para comprobar esto.

Ejemplo de 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

Con la letra a antes y después de la variable ‘%variable%’ también surtiría efecto.

If %errorlevel%

«Cada orden externa de ms-dos genera un código de salida a su término indicando si pudo realizarse satisfactoriamente.
Generalmente un código de salida 0 indica que no hubo ningún problema y un código de salida superior hace referencia a diferentes errores.
Muchos ficheros por lotes necesitan saber si la orden anterior cumplió su cometido correctamente: para ello utilizan la orden If errorlevel.
Es muy importante recordar que la orden se ejecutará si el código de salida es igual o superior al especificado detrás de ERRORLEVEL.

A modo de ejemplo tenemos a continuación los códigos de salida de Xcopy:
0 Los ficheros fueron copiados sin error.
1 No se encontraron ficheros para copiar.
2 El usuario presionó Ctrl+Pausa para suspender el proceso de Xcopy.
3 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.
4 Ocurrió un error de escritura de disco.»

Ejemplo de 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

Dependiendo la salida del comando, sale un mensaje u otro.

Variables de entorno

Las variables de entorno disponibles son las siguientes:

HOMEDRIVE=Disco local (habitualmente C) ALLUSERSPROFILE=C:\Documents and Settings\All Users APPDATA=%homedrive%\Documents and Settings\Usuario\Datos de programa CLIENTNAME=Console CommonProgramFiles=%homedrive%\Archivos de programa\Archivos comunes COMPUTERNAME=USUARIO-CB9E372C ComSpec=%homedrive%\WINDOWS\system32\cmd.exe FP_NO_HOST_CHECK=NO HOMEPATH=\Documents and Settings\Usuario LOGONSERVER=\\USUARIO-CB9E372C NUMBER_OF_PROCESSORS=2 OS=Windows_NT Path=%homedrive%\ruby\bin;%homedrive%\WINDOWS\syst em32;%homedrive%\WINDOWS;%homedrive%\WINDOWS\Syste m32\Wbem;%homedrive%\Archivos de programa\Archivos comunes\Adobe\AGL PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.RB;.RBW PROCESSOR_ARCHITECTURE=x86 PROCESSOR_IDENTIFIER=x86 Family 15 Model 4 Stepping 7, GenuineIntel PROCESSOR_LEVEL=15 PROCESSOR_REVISION=0407 ProgramFiles=%homedrive%\Archivos de programa PROMPT=$P$G RUBYOPT=-rubygems SESSIONNAME=Console TEMP=C:\DOCUME~1\Usuario\CONFIG~1\Temp TMP=C:\DOCUME~1\Usuario\CONFIG~1\Temp USERDOMAIN=USUARIO-CB9E372C USERNAME=Usuario USERPROFILE=%homedrive%\Documents and Settings\Usuario windir=%homedrive%\WINDOWS

Otras variables que también podemos utilizar son %time% y %random%… por ejemplo

Vamos a definir estas variables:
%time%: Muestra la hora almacenada en la bios.
%random%: Muestra un número al azar.

Ejemplo de código

set tiempo=%time%
echo %time%
set numero=%random%
echo %numero%
pause>nul

Se mostrarán la hora y el número al azar, secuencialmente.

Trabajando con variables

Sustitución de caracteres

Ejemplo de código

set var=Manoel
set sustituir=%var:o=u%
echo %sustituir%
pause>nul

Esto es sencillo. Como vemos he sustituido el carácter o por otro carácter u.

Ejemplo de código

set var=Manuel tiene 12 pelotas
set var=%var:12=39%
echo %var%
pause>nul

En este código se ve que modifiqué el número de pelotas que tenía Manuel.

Extraer caracteres de una variable

Para realizar la extracción de caracteres debemos realizar esto:

%var:~a,b%

donde:

  • var: La variable a la que vayamos a extraerle caracteres.
  • a: posición donde empezamos a extraer caracteres.
  • b: cantidad de caracteres a extraer.

Ejemplo

set var=12/11/2010
echo %var:~3,2%
pause>nul

El echo nos mostrará los 2(b) caracteres después del 3(a) carácter, por lo tanto, el echo nos mostrará el mes de la fecha guardada en la variable var.

Operaciones aritméticas

Lo primero que debo decir, que BATCH NO TRABAJA CON DECIMALES.

Ejemplo de código

Set /a
set /a var=5+3
echo %var%
pause>nul

Echo nos muestra 8, que es la suma de 5+3

Las operaciones básicas disponibles son:

+ Sumar
– Restar
/ Dividir
* Multiplicar
^ Elevar a un exponente

Criptografía

Primero vamos a definir el término criptografía.

Wikipedia dice: La criptografía (del griego κρυπτός kryptós, «oculto», y γράφειν graphein, «escribir», literalmente «escritura oculta») es el arte o ciencia de cifrar y descifrar información mediante técnicas especiales y se emplea frecuentemente para permitir un intercambio de mensajes que sólo puedan ser leídos por personas a las que van dirigidos y que poseen los medios para descifrarlos.

Cuando nosotros insertamos un valor en una variable (obviamente con set) lo que estamos haciendo es asignar un nombre (la variable) a un valor.

set variable=valor

Como podemos apreciar, nosotros «escondemos» ‘valor’ dentro de otro texto llamado «variable». Bien pues este es nuestro punto de partida. Veamos un simple código el cual nos pida una contraseña para acceder al archivo.

set pass=Introduzca el password:
if %pass%==texto (echo correcto) else (echo incorrecto)

Como vemos, cualquier persona iniciada en batch sabría cuál era la contraseña (obviamente, texto). Con lo cual vamos a utilizar 3 métodos para encriptar texto.

Los métodos que vamos a utilizar son: Extracción de caracteres, sustitución de caracteres y parámetros.
(Los métodos de sustitución y extracción de caracteres los hemos visto en el apartado Trabajando con variables.)

Parámetros

El signo % seguido de un número (del 1 al 9) son los 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

echo Hola %1

Si lo llamamos tecleando en la Consola de Windows «help.bat pyxolo» se mostrará en la pantalla «Hola pyxolo».
%0 representa el nombre del archivo bat en ejecución y %# representa todos los parámetros que se le pasan.
(# perteneciente al intervalo [1-9])

Clarifiquemos esta teoría con un ejemplo:

@echo off
call :function Aprender batch es una tarea gratificante
:function
echo %3 %4 %5 %6 %1 %2

Con call :function llamamos a la etiqueta :function. En la etiqueta :function vemos que se imprimen unos parámetros, pero como podemos observar el primer parámetro es el 3, luego el 4… más tarde el 1, luego el 2…

@echo off
call :function Aprender batch es una tarea gratificante
:function
echo %3 %4 %5 %6 %1 %2

El código nos muestra:

es una tarea gratificante Aprender batch

Ya con estos tres métodos en mente nos disponemos a estudiar algunos códigos que os propongo:

Código #1

@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)

(utilizamos el método de sustitución de caracteres para la encriptación. Password = h0l4)

Código #2

@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)

(Ahora lo complicamos un poquito más utilizando la extracción de caracteres. Password = h04)

Código #3

@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%

(Ahora hemos utilizado el método de sustitución de caracteres y hemos utilizado un parámetro. Password = p1x0l0)

Pues con estos tres métodos y alguno más podremos crear un ‘crypter’, hacer crackme’s… Todo depende de nuestra mente 😛

Polimetría

La polimetría, en batch, es la combinación de dos o más variables entre sí. Veamos un simple ejemplo (el mío por excelencia)

setlocal enabledelayedexpansion
set "function=variable"
set /p n=Indique el numero de carácteres a extraer:
set function=!function:~1,%n%!
echo %function%

Como podemos observar, he metido una variable (%n%) dentro de otra variable (%function%). En este caso la he utilizado para extraer un cierto número de caracteres definidos por el usuario. He utilizado el comando Setlocal + valor de enabledelayedexpansion para mandarle a mi archivo .bat que habilite la expansión de variables. Así que, cómo podemos ver, la polimetría consiste en insertar una variable dentro de otra. ¡Esto puede sernos realmente útil a la hora de programar!

Veamos otro ejemplo para afianzar conocimientos:

@echo off
setlocal enabledelayedexpansion
set "function=pyxolo"
for /l %%a in (1,1,6) do (
echo !function:~0,%%a!
)
pause>nul

En pantalla se imprimiría:

p
py
pyx
pyxo
pyxol
pyxolo

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?

:etiqueta
echo hola, esto es un bucle infinito
goto etiqueta

(Como vemos se muestra hola, esto es un bucle infinito indefinidamente)

  • 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:

@echo off
set /a cuenta=0
:bucle
set /a cuenta=%cuenta%+1
echo pyxolo
if %cuenta%==10 (exit) else (goto :bucle)

Como vemos ejecutará 10 veces ‘echo’ imprimiendo en pantalla:

pyxolo
pyxolo
pyxolo
pyxolo
pyxolo
pyxolo
pyxolo
pyxolo
pyxolo
pyxolo

y luego se cerrará.
¡Ahora está todo en vuestras manos y vuestra mente!

Trabajando con archivos

Estos son los comandos principales para el manejo de archivos y directorios:

ASSOC Muestra o modifica las asociaciones de las extensiones de archivos.
ATTRIB Muestra o cambia los atributos del archivo.
CACLS Muestra o modifica las listas de control de acceso (ACLs) de archivos.
CALL Llama a un programa por lotes desde otro.
CD Muestra el nombre del directorio actual o cambia a otro directorio.
COMP Compara el contenido de dos archivos o un conjunto de archivos.
DEL Elimina uno o más archivos.
DIR Muestra una lista de archivos y subdirectorios en un directorio.
FC Compara dos archivos o conjunto de archivos y muestra las diferencias entre ellos.
FIND Busca una cadena de texto en uno o más archivos.
FSUTIL Muestra o configura las propiedades de sistema de archivos.
FTYPE Muestra o modifica los tipos de archivo usados en una asociación de extensión de archivo.
ICACLS Muestra, modifica, hace copias de seguridad o restaura listas de control de acceso (ACL) para archivos y directorios.
MD Crea un directorio.
MOVE Mueve uno o más archivos de un directorio a otro en la misma unidad.
OPENFILES Muestra archivos compartidos abiertos por usuarios remotos.
PATH Muestra o establece una ruta de búsqueda para archivos ejecutables.
POPD Restaura el valor anterior del directorio actual guardado por PUSHD.
PRINT Imprime un archivo de texto.
PUSHD Guarda el directorio actual y después lo cambia.
RD Quita un directorio.
REN Cambia el nombre de uno o más archivos.
REPLACE Reemplaza archivos.
ROBOCOPY Utilidad avanzada para copiar árboles de archivos y directorios.
START Inicia otra ventana para ejecutar un programa o comando.
TREE Muestra gráficamente la estructura de directorios de una unidad o ruta de acceso.
TYPE Muestra el contenido de un archivo de texto.
VERIFY Comunica a Windows si debe comprobar que los archivos se escriben de forma correcta en un disco.
XCOPY Copia archivos y árboles de directorios.

¡Estudiemos los más importantes!

Comando CD

cd directorio

Con el comando cd nos movemos entre directorios.

cd "%homepath%\desktop"

Nos situamos en el escritorio.

Comando MD

md directorio

Crea un directorio

md carpeta

Crea el directorio/carpeta ‘carpeta’ en el directorio actual

Comando PUSHD

pushd directorio

Lo mismo que con cd pero con pushd guarda el directorio actual y así nos da la posibilidad de utilizar POPD para volver al directorio guardado.

pushd directorio
popd

Primero nos moveríamos al directorio ‘directorio’ y luego con popd volveríamos al directorio inicial.

Comando DEL

del /parámetros "rutadelarchivo"

Con del podemos borrar archivos y utilizando los parámetros decidiremos cómo lo/s borraremos.

del /f /q /s "%homepath%\desktop\file.exe"

Con el parámetro /f forzamos la eliminación de archivos de sólo lectura. Con el parámetro /q lo hacemos de manera silenciosa, es decir, no pide confirmación si utilizamos * (comodín global) para borrar todos los archivos de un directorio). Y, por último, con el parámetro /s eliminamos todos los archivos especificados de subdirectorios.

del /f /q /s "%homepath%\desktop\pyxolo\*.txt"

Borra todos los archivos .txt del directorio «%homepath%\desktop\pyxolo» y subdirectorios sin pedir confirmación. Si utilizamos también * (comodín global) en la extensión, entonces borraremos todos los archivos de dicho directorio.

del /f /q /s "%homepath%\desktop\pyxolo\*.*"

Comando ATTRIB

attrib +-parámetro archivo"

Con attrib establecemos o quitamos atributos a archivos.

attrib +h "%homepath%\desktop\pyxolo\*.txt"

Con este código establecemos el atributo de oculto a todos los archivos .txt del directorio «%homepath%\desktop\pyxolo»

attrib -h "%homepath%\desktop\pyxolo\*.txt"

Con este código quitamos el atributo de oculto a todos los archivos .txt del directorio «%homepath%\desktop\pyxolo»

Comando REN

ren "archivo_a_renombrar" "archivo_nombrado

Con ren podemos renombrar archivos.

ren "%windir%\file.bat" "%windir%\pyxolo.bat

Comando XCOPY

XCOPY origen destino

Con XCOPY podemos copiar archivos de un directorio a otro y, a su vez, renombrarlos.

XCOPY "archivo.txt" "%programfiles%\ayuda.txt"

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) :

FOR %%var IN (conjunto) DO (acciones)

La sintaxis es algo compleja pero muy eficaz. Analicémosla:

  • %%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 que queremos ejecutar todo el conjunto. El comando puede llevar sus variantes (ejemplo: …DO (echo %%var, …DO del /f /q %%var…)

Ejemplo

FOR %%x IN (archivo1.txt archivo2.exe archivo3.ini) DO del /f /q %%x

Lo que haríamos en esta línea sería lo siguiente:

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

FOR %%var IN (d*) DO echo %%var

Lo que hacemos con el for es que nos muestre todos los archivos que comiencen por la letra «d» en el directorio predeterminado o el especificado por cd\push o popd

Modificador /L

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

Modificador /D

FOR /D %%dirx in (m*) DO echo %%dirx

El modificador /D sirve para mostrar directorios… En la línea del anterior for nos muestra todos los directorios que comiencen por la letra «m».

Modificador /F (más complejo)

El conjunto puede contener

  • Conjunto de archivos -> sin comillas
  • Cadena de caracteres -> con comillas dobles [ » » ]
  • Comando -> con comilla simple [ ‘ ‘ ]

Opciones



Cita:

· eol -> Todo lo que esté despues de éste carácter (especificado con eol) será ignorado (para cada linea)

· skip -> Es el número de líneas a saltarse al principio de un archivo o comando.

· delims -> Delims nos sirver para separar strings, si no se coloca esta opción, se usarán como separadores «espacio» y «tab»

· tokens -> Con tokens especificamos qué segmentos, delimitados por «delims», serán pasados a las variables… por ejemplo:

1, 2, 3
Solo pasará los primeros 3 segmentos.

1,2*
Pasa 2 segmentos, el primero y todo lo que este despues (el * regresa todo el resto de la linea)

1,2,3-7.8.9-14,16*
Pasará los tres primeros segmentos, luego saltará al séptimo, seguirá has el noveno. Luego saltará al 14, salta al dieciseis hasta que se acaben los segmentos.

· usebackq ->Cambia la forma de interpretar si es string o comando


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
  

Esta linea dará como resultado lo siguiente:

RockoX quiere correr salvarse de la muerte que le ofrece satán



___________________________________________

[6pt]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
  

Extraer la IP privada de tu computadora en una variable

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
  

Sacar la ruta de un proceso (by RockoX)

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)
  

___________________________________________

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.