Arquivos de Procesamento por lotes - BAT

De Manuais Informática - IES San Clemente.
Ir a la navegación Ir a la búsqueda

Trátase dun tipo de arquivo de texto, formado por ordes de DOS, coa extensión BAT chamado arquivo de procesamento por lotes ou, simplemente, arquivo por lotes. Un exemplo ben coñecido deste tipo de arquivos é AUTOEXEC.BAT, cuias órdenes contidas nel executábanse cada vez que se iniciaban os Sistemas Operativos baseados en DOS (ate Windows Me).

As ordes poden executarse nunha fiestra de comandos en modo interactivo. Neste modo, a orden escríbese no indicador e se executa de maneira inmediata, quedando o sistema operativo á espera de que se introduza outra orden. Cando as órdenes se executan en grupo fálase de modo batch ou procesamento por lotes.

Comandos e Utilidades do Símbolo de Sistema

Comandos e Utilidades de uso xeral

Pequeno resumo dos comandos a ter en conta para o traballo con Windows:

Comando Definición
? Substitúe un carácter
* Substitúe unha cadea de caracteres
Assoc Mostra ou modifica as asociacións das extensións de arquivos
At Planifica comandos e programas para executarse nun equipo
Attrib Mostra ou cambia os atributos dos arquivos
Call Chama a un programa por lotes dende outro
Chdir- Cd Mostra o nome do directorio actual ou cambia a outro directorio
Cls Borra a pantalla
Cmd Inicia unha nova instancia do intérprete de comandos de Windows
Color Establece as cores de primeiro plano e fondo predeterminados da consola
Comp Compara o contido de dous arquivos ou un conxunto de arquivos
Compact Mostra ou cambia o estado de compresión de arquivos en particións NTFS
Convert Convirte volumes FAT a volumes NTFS. Non pode converter a unidade actual
Copy Copia un ou mais arquivos a outro lugar
Date Mostra ou establece a data
Del - Erase Elimina un ou mais arquivos
Dir Mostra unha lista de arquivos e subdirectorios nun directorio
Doskey Edita liñas de comandos, recupera comandos de Windows 2000 e crea macros
Echo Mostra mensaxes e activa e desactiva o eco
Exit Sae do programa cmd.exe
Fc Compara dous arquivos ou conxunto de arquivos e devolve as diferencias entre eles
Find Busca unha cadea de texto nun ou mais arquivos
Help Proporciona axuda para os comandos de Windows
Mkdir - Md Crea un directorio
More Mostra a información pantalla a pantalla
Move Move arquivos e cambia o nome a arquivos e directorios
Path Mostra ou establece unha ruta de procura para arquivos executables
Prompt Cambia el símbolo del sistema
Rename - Ren Cambia o nome de un ou mais arquivos
Rmdir - Rd Borra carpetas ou directorios. RMDIR /s, faise un borrado recursivo
Set Mostra, establece ou quita as variables de contorno
Sort Ordena texto
Start Abrir un arquivo coa aplicación configurada por defecto
Time Permite cambiar a hora do sistema
Tree Mostra de forma gráfica a estrutura de carpetas dunha unidade ou ruta
Type Mostra o contido dun ou mais arquivos de texto
Ver Mostra a versión de Windows XP
Verify Solicita a MS-DOS que verifique se os arquivos escribíronse en disco correctamente
Xcacls Mostra ou modifica as listas de control de acceso (ACLs) de arquivos
Xcopy Copia árbores de arquivos e directorios

Copiar todo G: en Z: (incluso los ocultos): > xcopy a: b: /s /e /h

> Operador redirección de saída
>> Operador redirección de saída que "engade" a un texto existente
< Operador redirección de entrada
¦ Tubería que enlaza a saída dun comando coa entrada do seguinte
Enlaces interesantes:

Comandos e Utilidades para a Xestión de Discos

Pequeno resumo dos comandos a ter en conta para a Xestión de Discos con Windows:

Comando Definición
Chkdsk Comproba un disco e mostra un informe do seu estado
Defrag Defragmenta unha unidade
Diskpart Crea particións, convirte discos en dinámicos e crea volumes
Diskcomp Compara dous disquetes
Diskcopy Realiza a copia dun disquete a outro
Diskraid Ferramenta coa que se pode configurar e administrar volumes RAID
Format Instala un sistema de arquivos determinado nunha partición
Iscsicli Inicia iSCSI
Label Pon a etiqueta (nome) a un volume ou partición
Vol Mostra a etiqueta do volume do disco e o número de serie, se existen
Enlaces interesantes:

Comandos e Utilidades para a Configuración de Permisos NTFS

Pequeno resumo dos comandos a ter en conta para a Xestión das Listas de Acceso a Arquivos e Directorios:

Comando Definición
Cacls Mostra ou modifica as listas de control de acceso (ACLs) de arquivos
Icacls Mostra ou modifica as listas de control de acceso (ACLs) de arquivos
Xcacls Mostra ou modifica as listas de control de acceso (ACLs) de arquivos

Comandos e Utilidades para a Xestión da Rede

Pequeno resumo dos comandos a ter en conta para a Xestión da Rede en Windows:

Comando Definición
Arp Mostra e modifica as táboas de conversión de direccións IP a direccións MAC
Finger Mostra información sobre un usuario nun sistema específico empregando o servizo FINGER
Hostname Mostra o nome do equipo actual
Ipconfig Mostra os valores de configuración de rede TCP/IP actuais e actualiza a configuración DHCP e DNS
Nbtstat Mostra as estadísticas do protocolo e as conexións actuais de TCP/IP usando NBT (NetBIOS sobre TCP/IP)
Net accounts Actualiza a base de datos de contas de usuario e modifica os requisitos de contrasinal e inicio de sesión para todas as contas
Net computer Agrega ou elimina equipos da base de datos dun dominio.
Net config Mostra os servizos configurables que están en execución, ou mostra e modifica a configuración dun servizo
Net continue Volve a activar un servizo interrompido
Net file Mostra os nomes de todos os arquivos compartidos abertos nun servidor e o número de bloqueos de arquivo (se existe algún) en cada un deles. Este comando tamén pecha arquivos individuais e quita bloqueos de arquivo
Net group Agrega, mostra ou modifica grupos globais en dominios.
Net help Proporciona unha lista de comandos de rede e temas acerca dos que pode obter Axuda, ou proporciona información acerca dun comando
Net helpmsg Proporciona axuda referente a unha mensaxe de erro de Windows.
Net localgroup Agrega, mostra ou modifica grupos locais.
Net name Agrega ou elimina un nome para mensaxes (as veces chamado alias), ou mostra a lista de nomes para os que o equipo aceptará mensaxes. Para poder usar net name, el servizo de Mensaxería debe estar en execución.
Net pause Interrompe os servizos en execución.
Net print Mostra información acerca dunha cola de impresión ou un traballo de impresión especificados, ou controla un determinado traballo de impresión.
Net send Envía mensajes a otros usuarios, equipos, grupos o nombres para mensajes en la red. El servicio Mensajería debe estar en ejecución para poder recibir mensajes.
Net session Muestra la lista o desconecta las sesiones entre un equipo local y los clientes conectados a él.
Net share Crea, elimina o muestra recursos compartidos.
Net start Inicia un servicio. Utilizado sin parámetros, net start muestra una lista de los servicios que se están ejecutando.
Net statistics Muestra el registro de estadísticas del servicio local Estación de trabajo o Servidor.
Net stop Detiene un servicio que se está ejecutando.
Net time Sincroniza el reloj del equipo con el de otro equipo o dominio. Cuando se usa sin parámetros, net time muestra la hora de otro equipo o dominio.
Net use Conecta o desconecta un equipo de un recurso compartido o muestra información acerca de las conexiones del equipo. También controla las conexiones de red persistentes. Si se utiliza sin parámetros, net use recupera una lista de conexiones de red.
Net user Agrega o modifica cuentas de usuario o muestra información acerca de ellas.
Net view Muestra una lista de dominios, una lista de equipos o los recursos compartidos en el equipo especificado.
Netsh Ferramenta que configura e supervisa a rede
Netstat Mostra estadísticas do protocolo e conexións TCP/IP actuais
Nslookup Mostra información que se pode empregar para diagnosticar a infraestrutura DNS
Pathping Ferramenta que proporciona información que é combinación dos resultados obtidos coas ferramentas ping e tracert
Ping Comproba o estado da conexión con un ou varios equipos remotos
Route Manipula táboas de enrutamento de rede
Tracert - Traceroute Ferramenta de diagnose de redes que permite seguir a pista dos paquetes que van dende un host a outro
Whois Protocolo TCP baseado en petición/resposta que se utiliza para efectuar consultas nunha base de datos que permite determinar o propietario dun nome de dominio ou unha dirección IP en Internet
Enlaces interesantes:

Outros comandos de Administración

Pequeno resumo de algúns comandos mais de administración dos sistemas operativos Windows:

Comando Definición
Auditpol Configuración das políticas de auditoría
Bcdedit Editor da configuración de Inicio
Change Configura os modos de inicio de Terminal Server
Chglogon Controla o inicio de sesións
Chgport Controla o mapeo de portos COM para compatibilidade con DOS
Chgusr Cambia o modo de instalación de aplicacións
Choice Permite elixir unha opción dunha lista, por defecto [Y:N], moi empregada na creación de scripts
Clip Empregado para redirixir a saída dun comando cara o portapapeis
Cmdkey Controla usuarios e contrasinais almacenados
Dispdiag Comando empregado para mostrar diagnósticos
Forfiles Comando empregado para seleccionar un arquivo ou varios para executar un comando
Mklink Crea links simbólicos
Muiunattend Controla accións desatendidas con interfaces de usuario múltiples
Netcfg Instalador da Rede para Windows PE (WinPE)
Ocsetup Instalador de componentes opcionais
Pkgmgr Administrador de Paquetes Windows
Pnpunattend Instalador de drivers online de xeito desatendido
Pnputil Utilidad de Administración dos drivers
Quser Mostra información sobre usuarios logueados no sistema por Terminal.
Robocopy Aplicación avanzada de copia de arquivos.
Rpcping Confirma a conectividade Remote Procedure Call (RPC) entre un servidor e un cliente.
setx Controla variables de contorno tanto para user como para system.
sxstrace Utilidade de Tracing para Winsxs
takeown Controla o Ownership do arquivo.
timeout Emprégase como tempo de espera para arquivos batch.
tracerpt Emprégase para reportes de trace.
waitfor Emprégase para enviar ou esperar unha sinal do sistema.
wbadmin Controla backups e restores.
wceutil Controla o colector de eventos de Windows.
wevtutil Podemos administrar os eventos do equipo dende un comando.
where Emprégase para ubicar arquivos segundo un criterio de busca.
whoami Trae información detallada do usuario có que se iniciou a sesión.
winrm Controla o Windows Remote Management.
winrs Executa Windows Remote Shell.
winsat Executa a ferramenta de auditoría.

Variables de contorno Locais e do Sistema en Windows

As principais variables de contorno locais e do sistema para Windows son as seguintes:

Variable de contorno Definición
%ALLUSERSPROFILE%

(Local)

Devolve a localización do perfil de todos os usuarios.
%APPDATA%

(Local)

Devolve a localización na que as aplicacións gardan os datos de forma predeterminada.
%CD%

(Local)

Devolve a cadea do directorio actual.
%CMDCMDLINE%

(Local)

Devolve a liña de comandos exacta empregada para iniciar o Cmd.exe actual.
%CMDEXTVERSION%

(Sistema)

Devolve o número de versión de extensións do procesador de comandos actual.
%COMPUTERNAME%

(Sistema)

Devolve o nome do equipo.
%COMSPEC%

(Sistema)

Devolve a ruta de acceso exacta ao executable do shell de comandos.
%DATE%

(Sistema)

Devolve a data actual.
%ERRORLEVEL%

(Sistema)

Devolve o código de erro do último comando utilizado. Usualmente, os valores distintos de cero indican que se producíu un erro.
%HOMEDRIVE%

(Sistema)

Devolve a letra de unidade da estación de traballo local do usuario conectada ao directorio particular do usuario. Establécese segundo o valor do directorio particular. O directorio particular do usuario especifícase en Usuarios e grupos locais.
%HOMEPATH%

(Sistema)

Devolve a ruta de acceso completa do directorio particular do usuario. Establécese segundo o valor do directorio particular. O directorio particular do usuario especifícase en Usuarios e grupos locais.
%HOMESHARE%

(Sistema)

Devolve a ruta de acceso de rede do directorio particular compartido do usuario. Establécese segundo o valor do directorio particular. O directorio particular do usuario especifícase en Usuarios e grupos locais.
%LOGONSERVER%

(Local)

Devolve o nome do controlador de dominio que validou a sesión actual.
%NUMBER_OF_PROCESSORS%

(Sistema)

Especifica o número de procesadores instalados no equipo.
%OS%

(Sistema)

Devolve o nombre de sistema operativo. Windows 2003 e Windows XP mostra o sistema operativo como Windows_NT.
%PATH%

(Sistema)

Especifica a ruta de acceso de busca para os arquivos executables.
%PATHEXT%

(Sistema)

Devolve unha lista de extensións de arquivo que o sistema operativo considera como executables.
%PROCESSOR_ARCHITECTURE%

(Sistema)

Devolve a arquitectura de chip do procesador. Valores: x86 ou IA64 (baseado en Itanium).
%PROCESSOR_IDENTIFIER%

(Sistema)

Devolve unha descrición do procesador.
%PROCESSOR_LEVEL%

(Sistema)

Devolve o número de modelo do procesador instalado no equipo.
%PROCESSOR_REVISION%

(Sistema)

Devolve o número de revisión do procesador.
%PROMPT%

(Local)

Devolve a configuración do símbolo do sistema do intérprete actual. Xerado por Cmd.exe.
%RANDOM%

(Sistema)

Devolve un número decimal aleatorio entre 0 e 32767. Xerado por Cmd.exe.
%SYSTEMDRIVE%

(Sistema)

Devolve a unidade que contén o directorio raíz do Windows (é dicir, a raíz do sistema).
%SYSTEMROOT%

(Sistema)

Devolve a ubicación do directorio raíz do Windows.
%TEMP% y %TMP%

(Sistema e Usuario)

Devolve os directorios temporais predeterminados que utilizan as aplicacións dispoñibles para os usuarios conectados actualmente. Algunhas aplicacións requiren TEMP e outras requiren TMP.
%TIME%

(Sistema)

Devolve a hora actual.
%USERDOMAIN%

(Local)

Devolve o nome do dominio que contén a conta de usuario.
%USERNAME%

(Local)

Devolve o nome de usuario que iniciou a sesión actual.
%USERPROFILE%

(Local)

Devolve a ubicación do perfil de usuario actual.
%WINDIR%

(Sistema)

Devolve a ubicación do directorio do sistema operativo.

Configurar as variables de contorno - Set

Utilice o comando Set para crear, cambiar, eliminar ou mostrar variables de contorno. O comando set altera variables só no contorno de shell actual.

Para ver unha variable, débese escribir no símbolo do sistema:

set nomeDeVariable

Para agregar unha variable, escriba no símbolo do sistema:

set nomeDeVariable=valor

Para eliminar unha variable, escriba no símbolo do sistema:

set nomeDeVariable=

Pode usar a maior parte dos caracteres como valores de variables, incluído o espazo en branco.

Se utiliza os caracteres especiais <, >, |, &, o ^, deberán ir precedidos do carácter de escape (^) ou de comiñas.

Se utiliza comiñas, inclúense como parte do valor debido a que todo o que segue ao signo igual tómase como un valor.

Ter en conta os seguintes exemplos:

  • Para crear o valor da variable novo&nome, escribir:
set nomeDaVariable=novo^&nome
  • Para crear o valor da variable "novo&nome", escribir:
set nomeDaVariable="novo&nome"
  • Escribindo no símbolo do sistema:
set nomeDaVariable=novo&nome

aparecerá unha mensaxe de erro similar ao seguinte: "nome non se recoñece coma comando interno ou externo, un programa o un arquivo por lotes executable."

Os nomes de variables non distinguen entre maiúsculas e minúsculas. Sen embargo, set mostra a variable exactamente como se escribiu. Pódense combinar letras en maiúsculas e minúsculas nos nomes de variables para que o código sexa máis lexible (por exemplo, NomeUsuario).

Nota: O tamaño máximo dunha variable de contorno individual é de 8192 bytes. O tamaño máximo total para todas as variables de contorno, incluídos os nomes de variable e o signo igual, é de 65.536 KB.

Substituír valores de variables de contorno

Para habilitar a substitución de valores de variables na liña de comandos ou en secuencias de comandos, hai que poñer signos de porcentaxe ao redor do nome da variable (por exemplo, %nomeDeVariable%).

Ao utilizar signos de porcentaxe, asegúrase de que Cmd.exe fai referencia aos valores da variable en lugar de realizar unha comparación literal.

Tras definir os valores dun nome de variable, hai que escribir o nome da variable entre signos de porcentaxe. Cmd.exe busca todas as instancias do nome da variable e o substitúe polo valor de variable definido. Por exemplo, se crea unha secuencia de comandos que conteña diferentes valores (por exemplo, nomes de usuario) e desexa definir a variable de contorno NOMEUSUARIO para cada usuario con estes valores, pode escribir unha secuencia de comandos utilizando a variable NOMEUSUARIO entre signos de porcentaxe. Cando execute esta secuencia de comandos, Cmd.exe substitúe %NOMEUSUARIO% cós valores da variable e se elimina a necesidade de realizar esta tarefa manualmente para cada usuario.

A substitución de variables non é recursiva. Para realizala recursivamente débese empregar For ou Call.

Exemplos con Set

  • É interesante ver como empregar o comando set en Windows XP e posteriores como substituto do comando choice, agora xa non existente nestes sistemas operativos.
No seguinte exemplo escolleremos entre as opcións 1, 2 e 3 para escribir "Pedra", "Papel" e "Tisoira"
@ECHO off
cls
:inicio
ECHO.
ECHO 1. Print Pedra
ECHO 2. Print Papel
ECHO 3. Print Tisoira
set choice=
set /p choice=Escribe o número do texto a escribir.
if not '%choice%'=='' set choice=%choice:~0,1%
if '%choice%'=='1' goto pedra
if '%choice%'=='2' goto papel
if '%choice%'=='3' goto tisoira
ECHO "%choice%" non é unha opción válida, inténtao outra vez
ECHO.
goto inicio
:pedra
ECHO PEDRA
goto fin
:papel
ECHO PAPEL
goto fin
:tisoira
ECHO TISOIRA
goto fin
:fin

Creación dos arquivos por lotes

Os archivos por lotes créanse, como calquera archivo de texto, cun editor de texto como EDIT ou NOTEPAD. Tamén poden crearse con outros editores mais avanzados, sempre que os arquivos creados se garden como arquivos de texto "sen formato" (*.txt). Cada orden das que compoñen o arquivo escríbese nunha liña diferente:

MODE CON CODEPAGE PREPARE=((850,437) C:\WINDOWS\COMMAND\EGA.CPI)
KEYB SP, ,C:\WINDOWS\COMMAND\KEYBOARD.SYS
CHCP 850
C:\WINDOWS\COMMAND\MSCDEX.EXE /D:MSCD001

Unha vez escritas todas as órdenes, gárdase o arquivo asignándolle un nome válido e a extensión BAT.

Execución dos arquivos por lotes

Para executar un arquivo por lotes hai que escribir o nome do arquivo sen a extensión. A execución pódese parar en calquera momento premendo Ctrl+C ou Ctrl+PAUSA. A execución dun arquivo por lotes pódese facer liña a liña. Dese xeito, o DOS pregunta se ten que executar cada orden antes de facelo. A sintaxe para executar paso a paso é:

COMMAND /Y /C arquivo

Existe un conxunto de ordes e símbolos de DOS pensados especialmente para utilizalos nos arquivos por lotes, que podemos ver na seguinte táboa. Estas ordes e símbolos pódense clasificar en tres grupos: Xestión de mensaxes, Xestión de parámetros e Control del proceso de execución.

Variable de contorno Definición
@ Evita o eco (texto en pantalla) dunha orden.
Call Executa un arquivo de procesamento por lotes
Choice Permite ao usuario elexir unha opción
Echo Evita o eco (texto das ordes) dun arquivo de procesamento por lotes. Tamén serve para mostrar mensaxes en pantalla
For Repite un mismo proceso varias veces
Goto Indica que vaya a una línea identificada con una etiqueta (salto incondicional).
If Ejecuta la orden especificada si se cumple la condición
Pause Detiene temporalmente la ejecución.
Rem Permite incluir comentarios u observaciones internas.
SHIFT Cambia la posición de los parámetros.
:etiqueta Símbolo de etiqueta.
%número Parámetro sustituible.
%%letra Variable de la orden FOR.
Enlaces interesantes:

Xestión das mensaxes nun arquivo por lotes

Na creación e execución dun arquivo por lotes poden existir tres tipos diferentes de mensaxes:
  • Mensaxes internos: Son comentarios que introducimos dentro do texto do arquivo para destacar aspectos referentes ao seu funcionamento e o seu deseño.
  • Chamada a unha orden (echo): Os caracteres que se visualizan na pantalla cando se escribe unha orden coñécense como o eco da orden.
  • Saída dunha orden: É a mensaxe que visualizamos despois da execución dunha orden.
Para xestionar os diferentes tipos de mensaxes dispoñemos das ordes: REM, @ e ECHO.

REM

Serve para introducir comentarios internos, que non son outra cousa que mensaxes que facilitan a lectura e interpretación do arquivo. A sintaxe da orden é:

@ECHO OFF
REM COMENTARIO
::OUTRO XEITO DE POÑER UN COMENTARIO
CLS &::COMENTARIO NA MESMA LIÑA
ECHO HOLA

Esta orden tamén se utiliza moitas veces cando se está depurando un arquvio por lotes. Escribindo REM diante dunha orden do DOS, esta non se executa.

@

Evita que apareza en pantalla a mensaxe de chamada dunha orden. A sintaxe é:

@orden

No comentario anterior, para impedir que apareza en pantalla a mensaxe de chamada á orden habería que escribir:

@REM Este es el comienzo del archivo

ECHO

Con esta orden controlamos o eco das ordes e mostramos mensaxes en pantalla. Ten a seguinte sintaxe:

ECHO [ON | OFF]
ECHO [mensaxe]

Cando se escribe ECHO OFF nunha liña do arquivo por lotes, non se ve en pantalla o eco das ordes que veñen a continuación ata que non remata a execución do arquivo ou se volve a activar o eco escribindo ECHO ON. O habitual é executar todas as ordes sen eco. Para iso, colócase ó principio do arquivo a liña:

@ECHO OFF
@ evita o eco da propia orden.
Para mostrar unha mensaxe en pantalla, a secuencia de caracteres que se desexa mostrar escríbese despois da orden ECHO:
ECHO Introduza o USB

Para mostrar unha liña en blanco na pantalla ha que escribir a orden seguida dun punto (ECHO.) non deixando espacio entre medias. Os caracteres que o DOS recoñece como símbolos especias como '<', ‘>’ o ‘|’ deben ir encerrados entre dobles comillas cuando forman parte dunha mensaxe. No caso do símbolo '%', para que apareza nunha mensaxe hai que escriblo dúas veces.

Xestión dos parámetros

Igual que nunha orden do DOS se utilizan parámetros para a súa execución, os archivos por lotes pódense executar con parámetros. Os parámetros escríbense detrás do nome do arquivo por lotes, deixando un espacio en branco entre cada parámetro.

Dentro do arquivo por lotes os parámetros identifícanse có símbolo %número, onde número é un valor numérico comprendido entre 0 e 9. Dependendo do número do parámetro a interpretación do mesmo é diferente.

Parámetro Valor
%0 Traxectoria que o usuario escribe para executar o arquivo por lotes.
%1 ... %9 Parámetros que se escriben detrás do nome do arquivo por lotes.

Como exemplo, o arquivo NOMES.BAT recibe como parámetros os nomes de dous arquivos e presenta os seus nomes na pantalla xunto coa traxectoria de execución do archivo.

@ECHO OFF
REM		O arquivo por lotes NOMES.BAT
REM		recibe como parámetros dous arquivos
REM		e presenta os seus nomes en pantalla
REM
ECHO      O primeiro arquivo é: %1
ECHO      O segundo arquivo é: %2
ECHO      O Path de execución: %0

A execución e o seu resultado móstrase a continuación:

C:\Lotes>NOMES.BAT AN-247.PDF 8004.TXT
REM Resultado:
O primeiro arquivo é: AN-247.PDF
O segundo arquivo é: 8004.TXT
O Path de execución: C:\Lotes\NOMES.BAT

Cando se executa un arquivo por lotes e se introducen mais parámetros dos que se teñen en conta dentro do arquivo, os parámetros de mais son ignorados. Se se introducen parámetros de menos, o DOS asigna aos parámetros inexistentes un espazo en branco. Se o parámetro non introducido se emprega nunha orde que non funciona sen parámetros producirase un erro. Se o exemplo anterior se executase introducindo só un nome de arquivo, como o parámetro forma parte dunha mensaxe, visualizaríase un espazo en branco onde debería estar o segundo nome de arquivo.

A orde SHIFT

Anteriormente vimos que os arquivos por lotes poden recoñecer os 9 parámetros introducidos na orden de execución xunto có nome do arquivo (%1 a %9). Entón, que pasa se desexamos indicar un número maior de parámetros? A resposta é a orden SHIFT. Cando aparece esta orden nunha liña dun arquivo por lotes prodúcese un desprazamento da posición dos parámetros. Isto quere dicir que o valor de %0 pérdese, o valor de % 1 pasa ao parámetro %0 e así ata chegar ao parámetro %9. O valor de %9 pasa ao parámetro %8 e adquier o valor do décimo parámetro especificado na orde de execución. A cantidade de parámetros que se poden utilizar estará limitada polos 127 caracteres que como máximo pode ter a lonxitude dunha orde do DOS.

O proceso de execución dun arquivo por lotes

Se non se especifica o contrario, a execución dos arquivos por lotes é secuencial. A orde da primeira liña do arquivo execútase en primeiro lugar, logo a orde da segunda liña, e así ata completar a execución de todas as ordes contidas no archivo. A única forma de interrumpir o proceso de execución é premer Ctrl+C. Para variar a orde secuencial dun arquivo por lotes, o DOS dispón das seguintes ordes: PAUSE, GOTO, IF, CHOICE, FOR y CALL.

A orde PAUSE

Deten a execución do arquivo por lotes ata que se pulsa calquera tecla, mostrando a mensaxe Presione calquera tecla para continuar... A súa sintaxe é moi simple:

PAUSE
Como exemplo, vexamos o seguinte arquivo:
@ECHO OFF
ECHO A execución detívose
PAUSE

A súa execución fai que se mostre unha mensaxe e espera ata que se pulse carquera tecra para concluír:

A execución detívose
Presione calquera tecra para continuar . . .

Para evitar a aparición da mensaxe indicando que se pulse unha tecra, é suficiente cambiar a orde PAUSE para redireccioanr á saída cara o dispositivo NULL:

PAUSE > NUL

A orde GOTO

Desvía a secuencia de execución das ordes. A súa sintaxe é:

GOTO [:]etiqueta

O parámetro etiqueta é unha cadea de caracteres dos que só son tidos en conta os 8 primeiros caracteres. Cando nun arquivo por lotes aparece a orde GOTO:ETIQUETA (os dous puntos se poden omitir) a execución das ordes continúa a partires da liña onde se encontre escrito :ETIQUETA. O seguinte exemplo, mostra unha mensaxe na pantalla e espera a pulsación dunha tecla, repetíndose o proceso nun bucle ata que se interrompe a execución:

@ECHO OFF
ECHO Estou esperando a que premas nunha tecla
PAUSE > NUL
:BUCLE
ECHO Sigo esperando... 
ECHO.
PAUSE > NUL
GOTO BUCLE

A orde IF

Ten por obxecto estabrecer un desvío condicional no proceso de execución que dependa da avaliación dunha condición.

Se a condición é verdadeira, execútase a orde especificada detrás da condición.
En caso contrario, ignórase a orde especificada detrás da condición e se executa a orde da seguinte liña do arquivo por lotes.
A sintaxe desta orde ten tres formatos:
  • O primeiro formato da orde utilízase cando se quere avaliar a existencia dun arquivo. A súa sintaxe é:
IF [NOT] EXIST archivo orden
O seguinte exemplo, que lle podemos chamar Copiador v1.0, execútase escribindo o nome do arquivo por lotes seguido dun nome de arquivo. Se o arquivo existe, cópiase nun disquete. Se non existe, móstrase unha mensaxe indicando isto último:
@ECHO OFF
REM
REM Copiador v1.0
REM
IF NOT EXIST %1 GOTO ERRO
COPY %1 A:\
ECHO Misión cumprida.
GOTO FIN
:ERRO
ECHO Non se pode copiar
ECHO un arquivo que non existe.
:FIN
Mediante IF EXIST tamén se pode averiguar a existencia dun directorio ou unha unidade. Para isto, hai que indicar a traxectoria do directorio ou o directorio raíz (se se trata de comprobar a existencia da unidade) incluíndo na mesma o dispositivo ficticio NUL. O exemplo anterior pódese modificar para copiar o arquivo no directorio A:\COPIA. Se este directorio non existe, móstrase unha mensaxe e, despois de pulsar unha tecla, créase:
@ECHO OFF
REM
REM Copiador v2.0
REM
IF NOT EXIST %1 GOTO ERRO
IF EXIST A:\COPIA GOTO COPIAR
ECHO O directorio A:\COPIA non existe
ECHO Pulse unha tecra e crearase
ECHO xunto coa copia do arquivo.
PAUSE > NUL
MD A:\COPIA
:COPIAR
COPY %1 A:\COPIA\
ECHO Misión cumprida.
GOTO FIN
:ERRO
ECHO Non se pode copiar
ECHO un arquivo que non existe.
:FIN
  • O segundo formato da orde IF emprégase para comparar dúas cadeas de caracteres:
IF [NOT] cadea 1==cadea2 orde
Nas cadeas distínguese entre maiúsculas e minúsculas e, ademais, non se teñen en conta os espazos en branco. A principal aplicación da comparación de cadeas é saber se se introduciron parámetros xunto có nome do arquivo por lotes. O exemplo anterior (Copiador v2.0) funciona sempre que se introduza como parámetro un nome de arquivo (aínda que non exista), pero faia se non se introducen parámetros. Para solucionalo, hai que comprobar que o parámetro %1 non é un espazo en branco. O arquivo por lotes que nos servíu de exemplo ata o de agora quedaría do seguinte xeito:
@ECHO OFF
REM
REM Copiador v2.1
REM
IF "%1"== "" GOTO FALTA
IF NOT EXIST %1 GOTO ERRO
IF EXIST A:\COPIA GOTO COPIAR
ECHO O directorio COPIA non existe
ECHO Pulse una tecla e crearase
ECHO xunto coa copia do arquivo.
PAUSE > NUL
MD A:\COPIA
:COPIAR
COPY %1 A:\COPIA\
ECHO Misión cumplida.
GOTO FIN
:FALTA
ECHO E o arquivo?
GOTO FIN
:ERRO
ECHO Non se pode copiar
ECHO un arquivo que non existe.
:FIN
  • O terceiro formato de IF utiliza os códigos de erro que xeran algunhas ordes do DOS despois da súa execución. A súa sintaxe é:
IF [NOT] ERRORLEVEL número orde
O código de saída é un número que describe a causa que provocou a finalización da orde. O número 0 sempre indica unha finalización correcta. A condición IF ERRORLEVEL número é verdadeira se o código de saída xerado pola última orde do DOS executada é igual ou maior que número. Como exemplo, a continuación móstrase o listado dun arquivo por lotes (Buscador v1.0) que busca unha cadea de caracteres nun arquivo de texto. O archivo por lotes execútase con dous parámetros: o primeiro ten que ser un arquivo que se atope no directorio activo e o segundo parámetro, a cadea de caracteres que hai que buscar (sen dobres comiñas).
@ECHO OFF
REM
REM Buscador v1.0
REM
IF "%1"==” “ GOTO FALTA
IF "%2"==“ ” GOTO FALTA
IF NOT EXIST %1 GOTO ERRO
FIND "%2" %1 > NUL
IF ERRORLEVEL 2 GOTO ERRO
IF ERRORLEVEL 1 GOTO NONESTA
ECHO A cadea "%2" está
ECHO no arquivo %1.
GOTO FIN
:FALTA
ECHO Faltan parámetros.
GOTO FIN
:ERRO
ECHO Existiu un erro
ECHO durante a busca.
GOTO FIN
:NONESTA
ECHO Non se atopou 
ECHO a cadea "%2".
:FIN
Para presentar os diferentes mensaxes utilizáronse os códigos de saída da orde FIND (0 cadea atopada, 1 cadea non atopada e 2 erro na busca). Como detalles, destacar que os códigos de saída se avalían de maior a menor e que a orde FIND é redireccionada a un dispositivo NUL, evitando dese xeito a mensaxe de saída da orde.

A orde CHOICE

Esta orde realiza tres cousas cando aparece nun arquivo por lotes: mostra unha mensaxe na pantalla, espera que pulsemos una tecla e, por último, activa un código de saída que pode ser procesado có parámetro ERRORLEVEL. A sintaxe da orde é:

CHOICE /M [texto] [/C[:]teclas] [/N] [/S] [/T[:]tecla, segundos]
A forma mais simple de utilización da orde CHOICE é cando se desexa facer unha pregunta que ten que ser contestada con un SI o con un NON.
CHOICE /M texto
O parámetro texto é a cadea de caracteres que se mostra en pantalla mentres se espera a pulsación dunha tecla. Resulta recomendable encerrar a cadea entre dobres comiñas para poder así utilizar o carácter /. O arquivo por lotes anterior que realiza a busca dunha cadea (Buscador v1.0) pódese modificar para ofrecer a posibilidade de realizar a busca ignorando a distinción entre maiúsculas e minúsculas.
@ECHO OFF
REM
REM Buscador v2.0
REM
IF "%1"== "" GOTO FALTA
IF "%2"== "" GOTO FALTA
IF NOT EXIST %1 GOTO ERROR
CHOICE /M "¿Omitir mayúsculas/minúsculas?"
IF ERRORLEVEL 2 GOTO EXACTA
IF ERRORLEVEL 1 GOTO OMITIR
:EXACTA
FIND "%2" %1 > NUL
IF ERRORLEVEL 2 GOTO ERROR
IF ERRORLEVEL 1 GOTO NOESTA
GOTO ESTA
:OMITIR
FIND "%2" %1 /I > NUL
IF ERRORLEVEL 2 GOTO ERROR
IF ERRORLEVEL 1 GOTO NOESTA
:ESTA
ECHO La cadena "%2" está en
ECHO el archivo %1.
GOTO FIN
:FALTA
ECHO Faltan parámetros.
GOTO FIN
:ERROR
ECHO Ha habido un error
ECHO durante la búsqueda.
GOTO FIN
:NOESTA
ECHO No se ha encontrado
ECHO la cadena "%2".
:FIN
A orde CHOICE engade ao final do texto o grupo de teclas válidas por defecto: [S,N]. A variable ERRORLEVEL toma un valor que depende da tecla pulsada. A tecla S corresponde ao valor 1 e a tecla N corresponde ao valor 2. Se existira unha terceira tecla no grupo de teclas válidas corresponderíase cun valor de ERRORLEVEL igual a 3. Cando se quere incluír como opción un conxunto de teclas propio utilízase a sintaxe seguinte:
CHOICE [/M texto] [/C[:]teclas]
Có parámetro /C determínase que as teclas que veñen a continuación (os dous puntos son opcionais) son o grupo de teclas válidas. A orde CHOICE poderíase ter escrito para recoñecer as teclas [Y,N]:
CHOICE /M "Omitir maiúsculas/minúsculas?" /C:YN
Por defecto, non se distinguen as maiúsculas e as minúsculas. Se engadimos o parámetro /S, obrigamos ao usuario a que pulse exactamente unha das teclas definidas có parámetro /C.
Para evitar a aparición do grupo de teclas válidas xunto có texto, engádese o parámetro /N.
O último parámetro que se emprega xunto coa orde CHOICE é /T[:]tecla, segundos. Emprégase cando se desexa asumir por defecto unha das teclas válidas. O carácter tecla representa a tecla asumida cando transcorra o tempo especificado en segundos. Seguindo có exemplo do arquivo por lotes que busca unha cadea (Buscador v2.0), para realizar a busca sen distinguir maiúsculas e minúsculas (tecla S) despois de que pasen cinco segundos sen premer ningunha tecla válida, a orde CHOICE escribiríase do seguinte xeito:
CHOICE /M "¿Omitir mayúsculas/minúsculas?" /T 5 /D S

Exemplo: Arquivo de procesamento por lotes que permita elixir entre unha das aplicacións Office:

@echo off
cls
echo Imos traballar có Office
echo Que vas a facer?
echo.
echo 1. Un texto
echo 2. Unha base de datos
echo 3. Unha folla de calculo
echo.
choice /M "Elixe unha opcion (1,2,3): " /C:123 
if errorlevel 3 goto folla
if errorlevel 2 goto datos
if errorlevel 1 goto texto
:texto
C:\Archiv~1\Micros~1\Office\WINWORD.EXE
goto fin
:datos
C:\Archiv~1\Micros~1\Office\MSACCESS.EXE
goto fin
:folla
C:\Archiv~1\Micros~1\Office\EXCEL.EXE
:fin

A orde FOR

A orden FOR emprégase cando se quere repetir unha orden un número determinado de veces. A súa sintaxe é:

FOR %%letra IN (conxunto) DO orde

A orde repítese tantas veces como elementos existen no conxunto. Os elementos dun conxunto especifícanse separados por un espacio en branco. A variable %%letra vai tomando o valor de cada un dos elementos do conxunto. O seguinte arquivo por lotes é un exemplo do funcionamento da orden FOR.

@ECHO OFF
REM
REM Buscador 
REM
IF "%1"== " " GOTO FALTA
IF "%2"== " " GOTO FALTA
IF NOT EXIST %1 GOTO ERROR
FOR %%A IN (%1) DO FIND "%2" %%A >> OUT.LST
ECHO O resultado da busca
ECHO Está en OUT.LST
GOTO FIN
:FALTA
ECHO Faltan parámetros.
GOTO FIN
:ERROR
ECHO Ocorreu un erro
ECHO durante la busca.
:FIN

Como parámetros deste arquivo por lotes hai que especificar un nome de arquivo ou una prantiña composta por caracteres comodíns e unha cadea de caracteres. Así, por exemplo, se especificamos como nome de arquivo *.TXT, a variable %%A tomará o valor do primeiro elemento do conxunto (o conxunto o formarán tódolos arquivos de texto do directorio de traballo) e se executará a orden FIND có primeiro arquivo de texto dese directorio de traballo. Luego pasará al segundo archivo de texto y se ejecutará de nuevo la orden FIND. Así, sucesivamente hasta completar la búsqueda de la cadena en todos los archivos de texto. Los mensajes de salida de la orden FIND se van almacenando en el archivo OUT.LST.

A orde FOR pódese empregar fora dun arquivo por lotes. Nese caso, a variable %%letra ten que escribirse como %letra. Como curiosidade, a seguinte orde FOR executada desde o indicador de ordes para buscar "cadea" en todos os arquivos de texto do directorio de traballo, daría o mesmo resultado que executar o arquivo por lotes para buscar a citada cadea:

FOR %A IN (*.TXT) DO FIND "cadena" %A >> OUT.LST

A orde CALL

Ata o de agora vimos que dentro dun arquivo por lotes pódese introducir calquera orde do DOS. Pois ben, tamén se pode incluir a orde para executar un arquivo por lotes. A sintaxe da orde é:

CALL arquivo [parámetros]

Cando nun arquivo por lotes aparece a orde CALL, execútase o arquivo por lotes indicado como parámetro na orde. Unha vez concluida a execución de todas as ordes do citado arquivo, continúa a execución da orde situada detrás de CALL. O arquivo por lotes Buscador v4.0 recibe como parámetros o nome do arquivo (ou a planilla) e a cadea de caracteres.

@ECHO OFF
REM
REM Buscador v4.0
REM
IF "%1"== " " GOTO FALTA
IF "%2"== " " GOTO FALTA
IF NOT EXIST %1 GOTO ERROR
ECHO 1. Omitir maiúsculas/minúsculas
ECHO 2. Buscar resultado exacto
ECHO.
CHOICE /M "ELIXE OPCIÓN (1 ou 2): " /N /C:12
IF ERRORLEVEL 2 CALL BUSCAR %1 %2 /I
IF ERRORLEVEL 1 CALL BUSCAR %1 %2
ECHO O resultado da busca
ECHO Está en OUT.LST
GOTO FIN
:FALTA
ECHO Faltan parámetros.
GOTO FIN
:ERROR
ECHO Ocorreu un erro
ECHO durante a busca.
:FIN

O menú de dous opcións ofrece a posibilidade de realizar a busca exacta ou omitir as diferencias entre maiúsculas e minúsculas. A orde de busca 'FIND atópase noutro arquivo por lotes chamado BUSCAR.BAT.

@ECHO OFF
REM
REM Buscador v4.0
REM (BUSCAR.BAT)
REM
FOR %%A IN (%1) DO FIND "%2" %%A %3 >> OUT.LST

Se na busca se consideran só as letras maiúsculas, a chamada realízase do seguinte xeito:

CALL BUSCAR %1 %2 /I
O parámetro %1 do arquivo por lotes dende onde se fai a chamada (que contén o nome do arquivo) tamén é o parámetro %1 de BUSCAR.BAT. Igualmente, o parámetro %2 (que contén a cadea) é o parámetro %2 de BUSCAR.BAT. O parámetro %3 de BUSCAR.BAT toma o valor /I na propia chamada. No caso de realizar unha busca exacta, a orde de chamada é:
CALL BUSCAR %1 %2

Como non se determina o terceiro parámetro, dentro de BUSCAR.BAT considérase que %3 é un espazo en branco.

Utilidades da liña de comandos

Whoami

Amosa información do usuario, grupo e privilexios para o usuario que está logeado actualmente no equipo local. Sen parámetros amosa o nome do equipo e o nome do usuario.

- Whoami en Technet

Comandos para a administración da rede

netsh

Netsh.exe é una ferramenta que un administrador pode empregar para configurar e supervisar equipos baseados en Windows dende o símbolo de sistema. Coa ferramenta Netsh.exe pódense facer as seguintes tarefas: Configurar interfaces.

  • Configurar protocolos de enrutamento.
  • Configurar filtros.
  • Configurar rutas.
  • Configurar o comportamento de acceso remoto para s enrutadores de acceso remoto baseados en Windows que executan o servizo Servidor de Enrutamento e acceso remoto (RRAS).
  • Mostrar a configuración dun enrutador que se está executando en calquera equipo.
  • Utilizar a característica de secuencias de comandos para executar unha colección de comandos en modo por lotes nun enrutador especificado.

No seguinte exemplo de arquivo de procesamento por lotes empregamos netsh.exe para configurar un equipo cunha IP fixa:

@ECHO OFF
REM Exemplo de configuración dunha rede estática calquera
REM ...
REM Substituír a palabra LAN polo nome da interfaz
REM de rede que queiras configurar
REM Exemplo con IP/MS: 192.168.1.30/255.255.255.0
REM Porta de Enlace: 192.168.1.1
REM DNS: 192.168.1.1
REM Métrica: 1
REM ...
netsh interface ip set address "LAN" static 192.168.1.30 255.255.255.0 192.168.1.1 1 > nul
netsh interface ip set dns "LAN" 192.168.1.1 > nul

No seguinte exemplo de arquivo de procesamento por lotes empregamos netsh.exe para configurar un equipo para que sexa cliente DHCP:

@ECHO OFF
REM Exemplo de configuración dunha rede cliente DHCP
REM ...
REM Substituir a palabra LAN polo nome da interfaz
REM ...
netsh interface ip set address "LAN" dhcp > nul
ipconfig /renew > nul

Enlaces Interesantes