Script por lotes - Guía rápida

Se incorpora Batch Script para automatizar secuencias de comandos que son repetitivas por naturaleza. La creación de scripts es una forma de aliviar esta necesidad mediante la automatización de estas secuencias de comandos para hacer la vida en el shell más fácil y productiva. En la mayoría de las organizaciones, Batch Script se incorpora de una forma u otra para automatizar cosas.

Algunas de las características de Batch Script son:

  • Puede leer las entradas de los usuarios para poder procesarlas más.

  • Tiene estructuras de control como for, if, while, switch para una mejor automatización y scripting.

  • Admite características avanzadas como funciones y matrices.

  • Admite expresiones regulares.

  • Puede incluir otros códigos de programación como Perl.

Algunos de los usos comunes de Batch Script son:

  • Configuración de servidores para diferentes propósitos.

  • Automatizar las actividades de limpieza, como eliminar archivos no deseados o archivos de registro.

  • Automatizar el despliegue de aplicaciones de un entorno a otro.

  • Instalar programas en varias máquinas a la vez.

Los scripts por lotes se almacenan en archivos de texto simples que contienen líneas con comandos que se ejecutan en secuencia, uno tras otro. Estos archivos tienen la extensión especial BAT o CMD. Los archivos de este tipo se reconocen y ejecutan a través de una interfaz (a veces llamada shell) proporcionada por un archivo del sistema llamado intérprete de comandos. En los sistemas Windows, este intérprete se conoce como cmd.exe.

Ejecutar un archivo por lotes es una simple cuestión de hacer clic en él. Los archivos por lotes también se pueden ejecutar en un símbolo del sistema o en la línea Inicio-Ejecutar. En tal caso, se debe utilizar el nombre completo de la ruta a menos que la ruta del archivo esté en el entorno de la ruta. A continuación se muestra un ejemplo sencillo de un script por lotes. Este script por lotes, cuando se ejecuta, elimina todos los archivos del directorio actual.

:: Deletes All files in the Current Directory With Prompts and Warnings
::(Hidden, System, and Read-Only Files are Not Affected)
:: @ECHO OFF
DEL . DR

Este capítulo explica el entorno relacionado con Batch Script.

Escribir y ejecutar

Normalmente, para crear un archivo por lotes, se utiliza el bloc de notas. Esta es la herramienta más sencilla para la creación de archivos por lotes. El siguiente es el entorno de ejecución de los scripts por lotes. En los sistemas Windows, esto se hace a través del símbolo del sistema o cmd.exe. Todos los archivos por lotes se ejecutan en este entorno.

A continuación se muestran las diferentes formas de iniciar cmd.exe:

Method 1 - Vaya a C: \ Windows \ System32 y haga doble clic en el archivo cmd.

Method 2 - Mediante el comando de ejecución: la siguiente instantánea muestra cómo encontrar el símbolo del sistema (cmd.exe) en Windows Server 2012.

Una vez que se inicia cmd.exe, se le presentará la siguiente pantalla. Este será su entorno para ejecutar sus scripts por lotes.

Variables de entorno

Para ejecutar archivos por lotes desde el símbolo del sistema, debe ir a la ubicación donde se almacena el archivo por lotes o, alternativamente, puede ingresar la ubicación del archivo en la variable de entorno de ruta. Por lo tanto, asumiendo que el archivo por lotes se almacena en la ubicación C:\Application\bin, deberá seguir estas instrucciones para la inclusión de la variable PATH.

SO Salida
Ventanas Agregue la cadena; C:\Application\binhasta el final de la variable de sistema PATH.

En este capítulo, veremos algunos de los comandos por lotes de uso frecuente.

S. No Comandos y descripción
1 VER

Este comando por lotes muestra la versión de MS-DOS que está utilizando.

2 ASSOC

Este es un comando por lotes que asocia una extensión con un tipo de archivo (FTYPE), muestra asociaciones existentes o elimina una asociación.

3 discos compactos

Este comando por lotes ayuda a realizar cambios en un directorio diferente o muestra el directorio actual.

4 CLS

Este comando por lotes borra la pantalla.

5 COPIAR

Este comando por lotes se utiliza para copiar archivos de una ubicación a otra.

6 DEL

Este comando por lotes elimina archivos y no directorios.

7 DIR

Este comando por lotes enumera el contenido de un directorio.

8 FECHA

Este comando por lotes ayuda a encontrar la fecha del sistema.

9 ECO

Este comando por lotes muestra mensajes o activa o desactiva el eco de comandos.

10 SALIDA

Este comando por lotes sale de la consola de DOS.

11 Maryland

Este comando por lotes crea un nuevo directorio en la ubicación actual.

12 MOVERSE

Este comando por lotes mueve archivos o directorios entre directorios.

13 CAMINO

Este comando por lotes muestra o establece la variable de ruta.

14 PAUSA

Este comando por lotes solicita al usuario y espera que se ingrese una línea de entrada.

15 RÁPIDO

Este comando por lotes se puede utilizar para cambiar o restablecer el indicador de cmd.exe.

dieciséis RD

Este comando por lotes elimina directorios, pero los directorios deben estar vacíos antes de poder eliminarlos.

17 REN

Cambia el nombre de archivos y directorios

18 movimiento rápido del ojo

Este comando por lotes se utiliza para comentarios en archivos por lotes, lo que evita que se ejecute el contenido del comentario.

19 COMIENZO

Este comando por lotes inicia un programa en una nueva ventana o abre un documento.

20 HORA

Este comando por lotes establece o muestra la hora.

21 TIPO

Este comando por lotes imprime el contenido de un archivo o archivos en la salida.

22 VOL

Este comando por lotes muestra las etiquetas de volumen.

23 ATTRIB

Muestra o establece los atributos de los archivos en el directorio actual

24 CHKDSK

Este comando por lotes comprueba el disco en busca de problemas.

25 ELECCIÓN

Este comando por lotes proporciona una lista de opciones al usuario.

26 CMD

Este comando por lotes invoca otra instancia del símbolo del sistema.

27 COMP

Este comando por lotes compara 2 archivos según el tamaño del archivo.

28 CONVERTIR

Este comando por lotes convierte un volumen del sistema de archivos FAT16 o FAT32 al sistema de archivos NTFS.

29 DRIVERQUERY

Este comando por lotes muestra todos los controladores de dispositivos instalados y sus propiedades.

30 EXPANDIR

Este comando por lotes extrae archivos de archivos contenedores .cab comprimidos.

31 ENCONTRAR

Este comando por lotes busca una cadena en archivos o entradas y genera líneas coincidentes.

32 FORMATO

Este comando por lotes formatea un disco para utilizar un sistema de archivos compatible con Windows, como FAT, FAT32 o NTFS, sobrescribiendo así el contenido anterior del disco.

33 AYUDA

Este comando por lotes muestra la lista de comandos proporcionados por Windows.

34 IPCONFIG

Este comando por lotes muestra la configuración IP de Windows. Muestra la configuración por conexión y el nombre de esa conexión.

35 ETIQUETA

Este comando por lotes agrega, establece o elimina una etiqueta de disco.

36 MÁS

Este comando por lotes muestra el contenido de un archivo o archivos, una pantalla a la vez.

37 RED

Proporciona varios servicios de red, según el comando utilizado.

38 SILBIDO

Este comando por lotes envía paquetes de "eco" ICMP / IP a través de la red a la dirección designada.

39 APAGAR

Este comando por lotes apaga una computadora o cierra la sesión del usuario actual.

40 ORDENAR

Este comando por lotes toma la entrada de un archivo fuente y ordena su contenido alfabéticamente, de la A a la Z o de la Z a la A. Imprime la salida en la consola.

41 SUBST

Este comando por lotes asigna una letra de unidad a una carpeta local, muestra las asignaciones actuales o elimina una asignación.

42 INFORMACIÓN DEL SISTEMA

Este comando por lotes muestra la configuración de una computadora y su sistema operativo.

43 TAREA

Este comando por lotes finaliza una o más tareas.

44 LISTA DE TAREAS

Este comando por lotes enumera las tareas, incluido el nombre de la tarea y la identificación del proceso (PID).

45 XCOPY

Este comando por lotes copia archivos y directorios de una manera más avanzada.

46 ÁRBOL

Este comando por lotes muestra un árbol de todos los subdirectorios del directorio actual en cualquier nivel de recursividad o profundidad.

47 FC

Este comando por lotes enumera las diferencias reales entre dos archivos.

48 DISKPART

Este comando por lotes muestra y configura las propiedades de las particiones del disco.

49 TÍTULO

Este comando por lotes establece el título que se muestra en la ventana de la consola.

50 CONJUNTO

Muestra la lista de variables de entorno en el sistema actual.

En este capítulo, aprenderemos cómo crear, guardar, ejecutar y modificar archivos por lotes.

Crear archivos por lotes

Los archivos por lotes se crean normalmente en el bloc de notas. Por tanto, la forma más sencilla es abrir el bloc de notas e introducir los comandos necesarios para el script. Para este ejercicio, abra el bloc de notas e ingrese las siguientes declaraciones.

:: Deletes All files in the Current Directory With Prompts and Warnings 
::(Hidden, System, and Read-Only Files are Not Affected) 
:: 
@ECHO OFF 
DEL . 
DR

Guardar archivos por lotes

Una vez creado el archivo por lotes, el siguiente paso es guardarlo. Los archivos por lotes tienen la extensión .bat o .cmd. Algunas reglas generales a tener en cuenta al nombrar archivos por lotes:

  • Trate de evitar espacios al nombrar archivos por lotes, a veces crea problemas cuando se llaman desde otros scripts.

  • No los nombre con el nombre de archivos por lotes comunes que están disponibles en el sistema, como ping.cmd.

La captura de pantalla anterior muestra cómo guardar el archivo por lotes. Al guardar su archivo por lotes, debe tener en cuenta algunos puntos.

  • Recuerde poner .bat o .cmd al final del nombre del archivo.
  • Elija la opción "Guardar como tipo" como "Todos los archivos".
  • Ponga el nombre completo del archivo entre comillas “”.

Ejecución de archivos por lotes

Los siguientes son los pasos para ejecutar un archivo por lotes:

  • Step 1 - Abra el símbolo del sistema (cmd.exe).

  • Step 2 - Vaya a la ubicación donde se almacena el archivo .bat o .cmd.

  • Step 3 - Escriba el nombre del archivo como se muestra en la siguiente imagen y presione el botón Enter para ejecutar el archivo por lotes.

Modificar archivos por lotes

A continuación se muestran los pasos para modificar un archivo por lotes existente.

  • Step 1 - Explorador de Windows abierto.

  • Step 2 - Vaya a la ubicación donde se almacena el archivo .bat o .cmd.

  • Step 3- Haga clic derecho en el archivo y elija la opción "Editar" del menú contextual. El archivo se abrirá en el Bloc de notas para su posterior edición.

Normalmente, la primera línea de un archivo por lotes suele constar del siguiente comando.

Comando ECHO

@echo off

De forma predeterminada, un archivo por lotes mostrará su comando mientras se ejecuta. El propósito de este primer comando es apagar esta pantalla. El comando "echo off" apaga la visualización de todo el script, excepto el comando "echo off" en sí. El signo "arroba" "@" al frente hace que el comando se aplique a sí mismo también.

Documentación

Muy a menudo, los archivos por lotes también contienen líneas que comienzan con el comando "Rem". Esta es una forma de ingresar comentarios y documentación. La computadora ignora cualquier cosa en una línea que sigue a Rem. Para archivos por lotes con una complejidad cada vez mayor, suele ser una buena idea tener comentarios.

Programa de secuencia de comandos del primer lote

Construyamos nuestro primer programa de secuencia de comandos por lotes simple. Abra el bloc de notas e ingrese las siguientes líneas de código. Guarde el archivo como "List.cmd".

El código hace lo siguiente:

  • Utiliza el comando echo off para garantizar que los comandos no se muestren cuando se ejecuta el código.

  • El comando Rem se usa para agregar un comentario para decir qué hace exactamente este archivo por lotes.

  • El comando dir se usa para tomar el contenido de la ubicación C: \ Archivos de programa.

  • El comando '>' se usa para redirigir la salida al archivo C: \ lists.txt.

  • Finalmente, el comando echo se usa para decirle al usuario que la operación está completa.

@echo off 
Rem This is for listing down all the files in the directory Program files 
dir "C:\Program Files" > C:\lists.txt 
echo "The program has completed"

Cuando se ejecuta el comando anterior, los nombres de los archivos en C: \ Archivos de programa se enviarán al archivo C: \ Lists.txt y en el símbolo del sistema se mostrará el mensaje "El programa se ha completado".

Hay dos tipos de variables en archivos por lotes. Uno es para los parámetros que se pueden pasar cuando se llama al archivo por lotes y el otro se realiza mediante el comando set.

Argumentos de la línea de comandos

Los scripts por lotes admiten el concepto de argumentos de línea de comandos en los que los argumentos se pueden pasar al archivo por lotes cuando se invocan. Los argumentos se pueden llamar desde los archivos por lotes a través de las variables% 1,% 2,% 3, etc.

El siguiente ejemplo muestra un archivo por lotes que acepta 3 argumentos de línea de comando y los envía a la pantalla de línea de comando.

@echo off 
echo %1 
echo %2 
echo %3

Si el script por lotes anterior se almacena en un archivo llamado test.bat y tuviéramos que ejecutar el lote como

Test.bat 1 2 3

A continuación se muestra una captura de pantalla de cómo se vería esto en el símbolo del sistema cuando se ejecuta el archivo por lotes.

El comando anterior produce la siguiente salida.

1 
2 
3

Si tuviéramos que ejecutar el lote como

Example 1 2 3 4

La salida seguirá siendo la misma que la anterior. Sin embargo, se ignoraría el cuarto parámetro.

Establecer comando

La otra forma en la que se pueden inicializar las variables es mediante el comando 'set'. A continuación se muestra la sintaxis del comando set.

Sintaxis

set /A variable-name=value

dónde,

  • variable-name es el nombre de la variable que desea establecer.

  • value es el valor que debe establecerse frente a la variable.

  • /A – Este conmutador se utiliza si el valor debe ser de naturaleza numérica.

El siguiente ejemplo muestra una forma sencilla de utilizar el comando set.

Ejemplo

@echo off 
set message=Hello World 
echo %message%
  • En el fragmento de código anterior, se define una variable llamada mensaje y se establece con el valor de "Hola mundo".

  • Para mostrar el valor de la variable, tenga en cuenta que la variable debe estar encerrada en el signo%.

Salida

El comando anterior produce la siguiente salida.

Hello World

Trabajar con valores numéricos

En el script por lotes, también es posible definir una variable para contener un valor numérico. Esto se puede hacer usando el modificador / A.

El siguiente código muestra una forma sencilla de configurar valores numéricos con el modificador / A.

@echo off 
SET /A a = 5 
SET /A b = 10 
SET /A c = %a% + %b% 
echo %c%
  • Primero establecemos el valor de 2 variables, ayb, a 5 y 10 respectivamente.

  • Añadimos esos valores y los almacenamos en la variable c.

  • Finalmente, mostramos el valor de la variable c.

La salida del programa anterior sería 15.

Todos los operadores aritméticos trabajan en archivos por lotes. El siguiente ejemplo muestra que los operadores aritméticos se pueden utilizar en archivos por lotes.

@echo off 
SET /A a = 5 
SET /A b = 10 
SET /A c = %a% + %b% 
echo %c% 
SET /A c = %a% - %b% 
echo %c% 
SET /A c = %b% / %a% 
echo %c% 
SET /A c = %b% * %a% 
echo %c%

El comando anterior produce la siguiente salida.

15 
-5 
2 
50

Variables locales vs globales

En cualquier lenguaje de programación, existe una opción para marcar las variables que tienen algún tipo de alcance, es decir, la sección de código en la que se puede acceder. Normalmente, se puede acceder a la variable que tiene un alcance global desde cualquier lugar desde un programa, mientras que las variables de alcance local tienen un límite definido en el que se puede acceder.

Las secuencias de comandos de DOS también tienen una definición para variables de ámbito local y global. De forma predeterminada, las variables son globales para toda la sesión del símbolo del sistema. Llame al comando SETLOCAL para hacer que las variables sean locales al alcance de su secuencia de comandos. Después de llamar a SETLOCAL, cualquier asignación de variable se revierte al llamar a ENDLOCAL, llamar a EXIT o cuando la ejecución llega al final del archivo (EOF) en su script. El siguiente ejemplo muestra la diferencia cuando se establecen variables locales y globales en el script.

Ejemplo

@echo off 
set globalvar = 5
SETLOCAL
set var = 13145
set /A var = %var% + 5
echo %var%
echo %globalvar%
ENDLOCAL

Algunas cosas clave a tener en cuenta sobre el programa anterior.

  • El 'globalvar' se define con un alcance global y está disponible en todo el script.

  • La variable 'var' se define en un ámbito local porque está encerrada entre un bloque 'SETLOCAL' y 'ENDLOCAL'. Por lo tanto, esta variable se destruirá tan pronto como se ejecute la instrucción 'ENDLOCAL'.

Salida

El comando anterior produce la siguiente salida.

13150
5

Notará que el comando echo% var% no producirá nada porque después de la instrucción ENDLOCAL, la variable 'var' ya no existirá.

Trabajar con variables de entorno

Si tiene variables que se usarían en archivos por lotes, siempre es preferible usar variables de entorno. Una vez definida la variable de entorno, se puede acceder a ella mediante el signo%. El siguiente ejemplo muestra cómo ver JAVA_HOME definido en un sistema. La variable JAVA_HOME es un componente clave que normalmente se utiliza en una amplia variedad de aplicaciones.

@echo off 
echo %JAVA_HOME%

La salida mostraría el directorio JAVA_HOME que dependería de un sistema a otro. A continuación se muestra un ejemplo de una salida.

C:\Atlassian\Bitbucket\4.0.1\jre

Siempre es una buena práctica agregar comentarios o documentación para los scripts que se crean. Esto es necesario para el mantenimiento de los scripts para comprender qué hace realmente el script.

Por ejemplo, considere el siguiente fragmento de código que no tiene forma de comentarios. Si cualquier persona promedio que no haya desarrollado el siguiente guión intenta entender el guión, le tomaría mucho tiempo a esa persona entender lo que realmente hace el guión.

ECHO OFF 
IF NOT "%OS%"=="Windows_NT" GOTO Syntax 
ECHO.%* | FIND "?" >NUL 
IF NOT ERRORLEVEL 1 GOTO Syntax 
IF NOT [%2]==[] GOTO Syntax 
SETLOCAL 
SET WSS= 
IF NOT [%1]==[] FOR /F "tokens = 1 delims = \ " %%A IN ('ECHO.%~1') DO SET WSS = %%A 
FOR /F "tokens = 1 delims = \ " %%a IN ('NET VIEW ^| FIND /I "\\%WSS%"') DO FOR /F 
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND /I /V "%%a" ^| FIND "<03>"') 
DO ECHO.%%a %%A 
ENDLOCAL 
GOTO:EOF 
ECHO Display logged on users and their workstations. 
ECHO Usage: ACTUSR [ filter ] 
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part 
of the computer name^(s^) to be displayed

Comentarios usando la instrucción Rem

Hay dos formas de crear comentarios en Batch Script; uno es a través del comando Rem. Cualquier texto que siga a la instrucción Rem se tratará como comentario y no se ejecutará. A continuación se muestra la sintaxis general de esta declaración.

Sintaxis

Rem Remarks

donde 'Comentarios' son los comentarios que deben agregarse.

El siguiente ejemplo muestra una forma sencilla de Rem se puede utilizar el comando.

Ejemplo

@echo off 
Rem This program just displays Hello World 
set message=Hello World 
echo %message%

Salida

El comando anterior produce la siguiente salida. Notará que la línea con la instrucción Rem no se ejecutará.

Hello World

Comentarios usando la declaración ::

La otra forma de crear comentarios en Batch Script es mediante el comando ::. Cualquier texto que siga a la instrucción :: se tratará como comentario y no se ejecutará. A continuación se muestra la sintaxis general de esta declaración.

Sintaxis

:: Remarks

donde 'Comentarios' es el comentario que debe agregarse.

El siguiente ejemplo muestra el uso del comando "::".

Ejemplo

@echo off 
:: This program just displays Hello World 
set message = Hello World 
echo %message%

Salida

El comando anterior produce la siguiente salida. Notará que la línea con la instrucción :: no se ejecutará.

Hello World

Note - Si tiene demasiadas líneas de Rem, podría ralentizar el código, porque al final cada línea de código en el archivo por lotes aún debe ejecutarse.

Veamos el ejemplo del script grande que vimos al principio de este tema y veamos cómo se ve cuando se le agrega documentación.

::===============================================================
:: The below example is used to find computer and logged on users
::
::===============================================================
ECHO OFF 
:: Windows version check 
IF NOT "%OS%"=="Windows_NT" GOTO Syntax 
ECHO.%* | FIND "?" >NUL 
:: Command line parameter check 
IF NOT ERRORLEVEL 1 GOTO Syntax
IF NOT [%2]==[] GOTO Syntax 
:: Keep variable local 
SETLOCAL 
:: Initialize variable 
SET WSS= 
:: Parse command line parameter 
IF NOT [%1]==[] FOR /F "tokens = 1 delims = \ " %%A IN ('ECHO.%~1') DO SET WSS = %%A 
:: Use NET VIEW and NBTSTAT to find computers and logged on users 
FOR /F "tokens = 1 delims = \ " %%a IN ('NET VIEW ^| FIND /I "\\%WSS%"') DO FOR /F 
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND /I /V "%%a" ^| FIND 
"<03>"') DO ECHO.%%a %%A 
:: Done 
ENDLOCAL
GOTO:EOF 
:Syntax 
ECHO Display logged on users and their workstations. 
ECHO Usage: ACTUSR [ filter ] 
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part of the 
computer name^(s^) to be displayed

Ahora puede ver que el código se ha vuelto más comprensible para los usuarios que no han desarrollado el código y, por lo tanto, es más fácil de mantener.

En DOS, una cadena es una colección ordenada de caracteres, como "¡Hola, mundo!".

S. No Cadenas y descripción
1 Crear cadena

Se puede crear una cadena en DOS de la siguiente manera.

2 Cuerda vacía

Cuerda vacía

3 Interpolación de cadenas

La interpolación de cadenas es una forma de construir un nuevo valor de cadena a partir de una combinación de constantes, variables, literales y expresiones al incluir sus valores dentro de una cadena literal.

4 Concatenación de cadenas

Puede utilizar el operador set para concatenar dos cadenas o una cadena y un carácter, o dos caracteres. A continuación se muestra un ejemplo simple que muestra cómo usar la concatenación de cadenas.

5 Longitud de la cuerda

En las secuencias de comandos de DOS, no hay una función de longitud definida para encontrar la longitud de una cadena. Hay funciones personalizadas que se pueden utilizar para lo mismo. A continuación, se muestra un ejemplo de una función personalizada para ver la longitud de una cadena.

6 toInt

Una variable que se ha establecido como cadena utilizando la variable set se puede convertir en un número entero utilizando el modificador / A que utiliza la variable set. El siguiente ejemplo muestra cómo se puede lograr esto.

7 Alinear a la derecha

Esto se usa para alinear el texto a la derecha, que normalmente se usa para mejorar la legibilidad de las columnas numéricas.

8 Cadena izquierda

Se utiliza para extraer caracteres del principio de una cadena.

9 Cadena media

Esto se usa para extraer una subcadena a través de la posición de los caracteres en la cadena.

10 Eliminar

La función de sustitución de cadenas también se puede utilizar para eliminar una subcadena de otra cadena.

11 Quitar ambos extremos

Se utiliza para eliminar el primer y último carácter de una cadena.

12 Eliminar todos los espacios

Esto se usa para eliminar todos los espacios en una cadena mediante sustitución.

13 Reemplazar una cadena

Para reemplazar una subcadena con otra cadena, utilice la función de sustitución de cadenas.

14 Cuerda derecha

Se utiliza para extraer caracteres del final de una cadena.

Las matrices no se definen específicamente como un tipo en Batch Script, pero se pueden implementar. Las siguientes cosas deben tenerse en cuenta cuando se implementan matrices en Batch Script.

  • Cada elemento de la matriz debe definirse con el comando set.
  • Se requeriría que el bucle 'for' iterara a través de los valores de la matriz.

Crear una matriz

Una matriz se crea usando el siguiente comando set.

set a[0]=1

Donde 0 es el índice de la matriz y 1 es el valor asignado al primer elemento de la matriz.

Otra forma de implementar matrices es definir una lista de valores e iterar a través de la lista de valores. El siguiente ejemplo muestra cómo se puede implementar.

Ejemplo

@echo off 
set list = 1 2 3 4 
(for %%a in (%list%) do ( 
   echo %%a 
))

Salida

El comando anterior produce la siguiente salida.

1
2
3
4

Acceso a matrices

Puede recuperar un valor de la matriz utilizando la sintaxis de subíndice, pasando el índice del valor que desea recuperar entre corchetes inmediatamente después del nombre de la matriz.

Ejemplo

@echo off 
set a[0]=1 
echo %a[0]%

En este ejemplo, el índice comienza desde 0, lo que significa que se puede acceder al primer elemento usando el índice como 0, se puede acceder al segundo elemento usando el índice como 1 y así sucesivamente. Veamos el siguiente ejemplo para crear, inicializar y acceder a matrices:

@echo off
set a[0] = 1 
set a[1] = 2 
set a[2] = 3 
echo The first element of the array is %a[0]% 
echo The second element of the array is %a[1]% 
echo The third element of the array is %a[2]%

El comando anterior produce la siguiente salida.

The first element of the array is 1 
The second element of the array is 2 
The third element of the array is 3

Modificar una matriz

Para agregar un elemento al final de la matriz, puede usar el elemento set junto con el último índice del elemento de la matriz.

Ejemplo

@echo off 
set a[0] = 1  
set a[1] = 2  
set a[2] = 3 
Rem Adding an element at the end of an array 
Set a[3] = 4 
echo The last element of the array is %a[3]%

El comando anterior produce la siguiente salida.

The last element of the array is 4

Puede modificar un elemento existente de una matriz asignando un nuevo valor a un índice determinado como se muestra en el siguiente ejemplo:

@echo off 
set a[0] = 1 
set a[1] = 2  
set a[2] = 3 
Rem Setting the new value for the second element of the array 
Set a[1] = 5 
echo The new value of the second element of the array is %a[1]%

El comando anterior produce la siguiente salida.

The new value of the second element of the array is 5

Iterando sobre una matriz

La iteración sobre una matriz se logra utilizando el ciclo 'for' y pasando por cada elemento de la matriz. El siguiente ejemplo muestra una forma sencilla de implementar una matriz.

@echo off 
setlocal enabledelayedexpansion 
set topic[0] = comments 
set topic[1] = variables 
set topic[2] = Arrays 
set topic[3] = Decision making 
set topic[4] = Time and date 
set topic[5] = Operators 

for /l %%n in (0,1,5) do ( 
   echo !topic[%%n]! 
)

Se deben tener en cuenta las siguientes cosas sobre el programa anterior:

  • Cada elemento de la matriz debe definirse específicamente mediante el comando set.

  • El ciclo 'for' con el parámetro / L para moverse a través de rangos se usa para iterar a través de la matriz.

Salida

El comando anterior produce la siguiente salida.

Comments 
variables 
Arrays 
Decision making 
Time and date 
Operators

Longitud de una matriz

La longitud de una matriz se realiza iterando sobre la lista de valores en la matriz, ya que no hay una función directa para determinar el número de elementos en una matriz.

@echo off 
set Arr[0] = 1 
set Arr[1] = 2 
set Arr[2] = 3 
set Arr[3] = 4 
set "x = 0" 
:SymLoop 

if defined Arr[%x%] ( 
   call echo %%Arr[%x%]%% 
   set /a "x+=1"
   GOTO :SymLoop 
)
echo "The length of the array is" %x%

Salida

Salida El comando anterior produce la siguiente salida.

The length of the array is 4

Crear estructuras en matrices

Las estructuras también se pueden implementar en archivos por lotes utilizando un poco de codificación adicional para la implementación. El siguiente ejemplo muestra cómo se puede lograr esto.

Ejemplo

@echo off 
set len = 3 
set obj[0].Name = Joe 
set obj[0].ID = 1 
set obj[1].Name = Mark 
set obj[1].ID = 2 
set obj[2].Name = Mohan 
set obj[2].ID = 3 
set i = 0 
:loop 

if %i% equ %len% goto :eof 
set cur.Name= 
set cur.ID=

for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do ( 
   set cur.%%k=%%l 
) 
echo Name = %cur.Name% 
echo Value = %cur.ID% 
set /a i = %i%+1 
goto loop

Se deben tener en cuenta las siguientes cosas clave sobre el código anterior.

  • Cada variable definida usando el comando set tiene 2 valores asociados con cada índice de la matriz.

  • La variable i se establece en 0 para que podamos recorrer la estructura con la longitud de la matriz, que es 3.

  • Siempre verificamos la condición de si el valor de i es igual al valor de len y si no, recorremos el código.

  • Podemos acceder a cada elemento de la estructura usando la notación obj [% i%].

Salida

El comando anterior produce la siguiente salida.

Name = Joe 
Value = 1 
Name = Mark 
Value = 2 
Name = Mohan 
Value = 3

Las estructuras de toma de decisiones requieren que el programador especifique una o más condiciones para ser evaluadas o probadas por el programa, junto con una declaración o declaraciones que se ejecutarán si se determina que la condición es truey, opcionalmente, otras sentencias que se ejecutarán si se determina que la condición es false.

S. No Cadenas y descripción
1 Si declaración

La primera declaración de toma de decisiones es la declaración "si".

2 Declaración If / else

La siguiente declaración de toma de decisiones es la declaración If / else. A continuación se muestra la forma general de esta declaración.

3 Declaraciones If anidadas

A veces, existe el requisito de tener varias declaraciones "si" incrustadas entre sí. A continuación se muestra la forma general de esta declaración.

Un operador es un símbolo que le dice al compilador que realice manipulaciones matemáticas o lógicas específicas.

En el script por lotes, son posibles los siguientes tipos de operadores.

  • Operadores aritméticos
  • Operadores relacionales
  • Operadores logicos
  • Operadores de Asignación
  • Operadores bit a bit

Operadores aritméticos

El lenguaje de secuencia de comandos por lotes admite los operadores aritméticos normales como cualquier idioma. A continuación se muestran los operadores aritméticos disponibles.

Mostrar ejemplo

Operador Descripción Ejemplo
+ Adición de dos operandos 1 + 2 dará 3
- Resta el segundo operando del primero 2-1 dará 1
* Multiplicación de ambos operandos 2 * 2 dará 4
/ División del numerador por el denominador 3/2 dará 1,5
% Operador de módulo y resto de después de una división entera / flotante 3% 2 dará 1

Operadores relacionales

Los operadores relacionales permiten la comparación de objetos. A continuación se muestran los operadores relacionales disponibles.

Mostrar ejemplo

Operador Descripción Ejemplo
EQU Prueba la igualdad entre dos objetos 2 EQU 2 dará verdadero
NEQ Prueba la diferencia entre dos objetos 3 NEQ 2 dará verdadero
LSS Comprueba si el objeto izquierdo es menor que el operando derecho 2 LSS 3 dará verdadero
LEQ Comprueba si el objeto izquierdo es menor o igual que el operando derecho 2 LEQ 3 dará verdadero
GTR Comprueba si el objeto izquierdo es mayor que el operando derecho 3 GTR 2 dará verdadero
GEQ Comprueba si el objeto izquierdo es mayor o igual que el operando derecho 3 GEQ 2 dará verdadero

Operadores logicos

Los operadores lógicos se utilizan para evaluar expresiones booleanas. A continuación se muestran los operadores lógicos disponibles.

El lenguaje por lotes está equipado con un conjunto completo de operadores lógicos booleanos como AND, OR, XOR, pero solo para números binarios. Tampoco hay valores para TRUE o FALSE. El único operador lógico disponible para las condiciones es el operador NOT.

Mostrar ejemplo

Operador Descripción
Y Este es el operador lógico "y"
O Este es el operador lógico "o"
NO Este es el operador lógico "no"

Operadores de Asignación

El lenguaje Batch Script también proporciona operadores de asignación. A continuación se muestran los operadores de asignación disponibles.

Mostrar ejemplo

Operador Descripción Ejemplo
+ = Esto agrega el operando derecho al operando izquierdo y asigna el resultado al operando izquierdo

Establecer / A a = 5

a + = 3

La salida será 8

- = Esto resta el operando derecho del operando izquierdo y asigna el resultado al operando izquierdo

Establecer / A a = 5

a - = 3

La salida será 2

* = Esto multiplica el operando derecho con el operando izquierdo y asigna el resultado al operando izquierdo

Establecer / A a = 5

a * = 3

La salida será 15

/ = Esto divide el operando izquierdo con el operando derecho y asigna el resultado al operando izquierdo

Establecer / A a = 6

a / = 3

La salida será 2

% = Esto toma el módulo usando dos operandos y asigna el resultado al operando izquierdo

Establecer / A a = 5

un% = 3

La salida será 2

Operadores bit a bit

Los operadores bit a bit también son posibles en secuencias de comandos por lotes. A continuación se muestran los operadores disponibles.

Mostrar ejemplo

Operador Descripción
Y Este es el operador "y" bit a bit
| Este es el operador "o" bit a bit
^ Este es el operador "xor" o exclusivo o bit a bit

A continuación se muestra la tabla de verdad que muestra estos operadores.

pags q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

La fecha y la hora en DOS Scripting tienen los siguientes dos comandos básicos para recuperar la fecha y la hora del sistema.

FECHA

Este comando obtiene la fecha del sistema.

Sintaxis

DATE

Ejemplo

@echo off 
echo %DATE%

Salida

La fecha actual se mostrará en el símbolo del sistema. Por ejemplo,

Mon 12/28/2015

HORA

Este comando establece o muestra la hora.

Sintaxis

TIME

Ejemplo

@echo off 
echo %TIME%

Salida

Se mostrará la hora actual del sistema. Por ejemplo,

22:06:52.87

A continuación se muestran algunas implementaciones que pueden usarse para obtener la fecha y la hora en diferentes formatos.

Fecha en formato año-mes-día

Ejemplo

@echo off 
echo/Today is: %year%-%month%-%day% 
goto :EOF 
setlocal ENABLEEXTENSIONS 
set t = 2&if "%date%z" LSS "A" set t = 1 

for /f "skip=1 tokens = 2-4 delims = (-)" %%a in ('echo/^|date') do ( 
   for /f "tokens = %t%-4 delims=.-/ " %%d in ('date/t') do ( 
      set %%a=%%d&set %%b=%%e&set %%c=%%f)) 
endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&goto :EOF

Salida

El comando anterior produce la siguiente salida.

Today is: 2015-12-30

Hay tres "archivos" universales para la entrada del teclado, la impresión de texto en la pantalla y los errores de impresión en la pantalla. El archivo "Entrada estándar", conocido comostdin, contiene la entrada al programa / script. El archivo "Salida estándar", conocido comostdout, se utiliza para escribir la salida y mostrarla en la pantalla. Por último, el archivo "Standard Err", conocido comostderr, contiene cualquier mensaje de error para mostrar en la pantalla.

Cada uno de estos tres archivos estándar, también conocidos como flujos estándar, se hace referencia con los números 0, 1 y 2. Stdin es el archivo 0, stdout es el archivo 1 y stderr es el archivo 2.

Redirigir la salida (Stdout y Stderr)

Una práctica común en los archivos por lotes es enviar la salida de un programa a un archivo de registro. El operador> envía, o redirige, stdout o stderr a otro archivo. El siguiente ejemplo muestra cómo se puede hacer esto.

Dir C:\ > list.txt

En el ejemplo anterior, el stdout del comando Dir C: \ se redirige al archivo list.txt.

Si agrega el número 2 al filtro de redirección, redirigirá el stderr al archivo lists.txt.

Dir C:\ 2> list.txt

Incluso se puede combinar el stdout y stderrflujos usando el número de archivo y el prefijo '&'. A continuación se muestra un ejemplo.

DIR C:\ > lists.txt 2>&1

Suprimir la salida del programa

El pseudo archivo NUL se utiliza para descartar cualquier salida de un programa. El siguiente ejemplo muestra que la salida del comando DIR se descarta enviando la salida a NUL.

Dir C:\ > NUL

Stdin

Para trabajar con Stdin, debe utilizar una solución alternativa para lograrlo. Esto se puede hacer redirigiendo el propio stdin del símbolo del sistema, llamado CON.

El siguiente ejemplo muestra cómo puede redirigir la salida a un archivo llamado lists.txt. Después de ejecutar el siguiente comando, el símbolo del sistema tomará toda la entrada ingresada por el usuario hasta que obtenga un carácter EOF. Posteriormente, envía toda la entrada al archivo lists.txt.

TYPE CON > lists.txt

De forma predeterminada, cuando se completa la ejecución de una línea de comando, debe devolver cero cuando la ejecución se realiza correctamente o un valor distinto de cero cuando la ejecución falla. Cuando un script por lotes devuelve un valor distinto de cero después de que falla la ejecución, el valor distinto de cero indicará cuál es el número de error. Luego usaremos el número de error para determinar de qué se trata el error y resolverlo en consecuencia.

A continuación se muestran el código de salida común y su descripción.

Código de error Descripción
0 Programa completado con éxito.
1 Función incorrecta. Indica que Action ha intentado ejecutar un comando no reconocido en el símbolo del sistema de Windows cmd.exe.
2 El sistema no puede encontrar el archivo especificado. Indica que el archivo no se puede encontrar en la ubicación especificada.
3 El sistema no puede encontrar la ruta especificada. Indica que no se puede encontrar la ruta especificada.
5 Acceso denegado. Indica que el usuario no tiene derechos de acceso al recurso especificado.

9009

0x2331

El programa no se reconoce como un comando interno o externo, programa operable o archivo por lotes. Indica que el comando, el nombre de la aplicación o la ruta se han escrito mal al configurar la Acción.

221225495

0xC0000017

-1073741801

No hay suficiente memoria virtual disponible.

Indica que Windows se ha quedado sin memoria.

3221225786

0xC000013A

-1073741510

La aplicación terminó como resultado de CTRL + C. Indica que la aplicación ha sido terminada por la entrada del teclado del usuario CTRL + C o CTRL + Break o cerrando la ventana del símbolo del sistema.

3221225794

0xC0000142

-1073741502

La aplicación falló en iniciar correctamente. Indica que la aplicación se ha lanzado en un escritorio al que el usuario actual no tiene derechos de acceso. Otra posible causa es que gdi32.dll o user32.dll no se hayan podido inicializar.

Nivel de error

La variable de entorno% ERRORLEVEL% contiene el código de retorno del último programa o script ejecutado.

De forma predeterminada, la forma de verificar el ERRORLEVEL es a través del siguiente código.

Sintaxis

IF %ERRORLEVEL% NEQ 0 ( 
   DO_Something 
)

Es común usar el comando EXIT / B% ERRORLEVEL% al final del archivo por lotes para devolver los códigos de error del archivo por lotes.

EXIT / B al final del archivo por lotes detendrá la ejecución de un archivo por lotes.

Utilice EXIT / B <códigos de salida> al final del archivo por lotes para devolver códigos de retorno personalizados.

La variable de entorno% ERRORLEVEL% contiene el último nivel de error en el archivo por lotes, que son los últimos códigos de error del último comando ejecutado. En el archivo por lotes, siempre es una buena práctica usar variables de entorno en lugar de valores constantes, ya que la misma variable se expande a diferentes valores en diferentes computadoras.

Veamos un ejemplo rápido sobre cómo buscar códigos de error en un archivo por lotes.

Ejemplo

Supongamos que tenemos un archivo por lotes llamado Find.cmd que tiene el siguiente código. En el código, hemos mencionado claramente que si no encontramos el archivo llamado lists.txt, entonces deberíamos establecer el nivel de error en 7. De manera similar, si vemos que la variable userprofile no está definida, deberíamos establecer el código de nivel de error en 9.

if not exist c:\lists.txt exit 7 
if not defined userprofile exit 9 
exit 0

Supongamos que tenemos otro archivo llamado App.cmd que llama a Find.cmd primero. Ahora, si Find.cmd devuelve un error en el que establece el nivel de error en mayor que 0, saldrá del programa. En el siguiente archivo por lotes, después de llamar a Find.cnd find, realmente comprueba si el nivel de error es mayor que 0.

Call Find.cmd

if errorlevel gtr 0 exit 
echo “Successful completion”

Salida

En el programa anterior, podemos tener los siguientes escenarios como salida:

  • Si el archivo c: \ lists.txt no existe, no se mostrará nada en la salida de la consola.

  • Si la variable userprofile no existe, no se mostrará nada en la salida de la consola.

  • Si se cumplen las dos condiciones anteriores, se mostrará la cadena "Finalización satisfactoria" en el símbolo del sistema.

Bucles

En el capítulo de toma de decisiones, hemos visto declaraciones que se han ejecutado una tras otra de manera secuencial. Además, las implementaciones también se pueden realizar en Batch Script para alterar el flujo de control en la lógica de un programa. Luego se clasifican en declaraciones de flujo de control.

S. No Bucles y descripción
1 Mientras que la implementación de la declaración

No hay una instrucción while directa disponible en Batch Script, pero podemos hacer una implementación de este ciclo muy fácilmente usando la instrucción if y las etiquetas.

2 Para instrucciones: implementaciones de listas

La construcción "FOR" ofrece capacidades de bucle para archivos por lotes. A continuación se muestra la construcción común de la declaración 'for' para trabajar con una lista de valores.

3 Bucle a través de rangos

La instrucción 'for' también tiene la capacidad de moverse a través de un rango de valores. A continuación se muestra la forma general de la declaración.

4 Clásico para implementación de bucle

A continuación se muestra la declaración clásica 'for' que está disponible en la mayoría de los lenguajes de programación.

Recorrer los argumentos de la línea de comandos

La instrucción 'for' también se puede usar para verificar los argumentos de la línea de comandos. El siguiente ejemplo muestra cómo se puede usar la instrucción 'for' para recorrer los argumentos de la línea de comandos.

Ejemplo

@ECHO OFF 
:Loop 

IF "%1"=="" GOTO completed 
FOR %%F IN (%1) DO echo %%F 
SHIFT 
GOTO Loop 
:completed

Salida

Supongamos que nuestro código anterior está almacenado en un archivo llamado Test.bat. El comando anterior producirá la siguiente salida si el archivo por lotes pasa los argumentos de la línea de comando de 1,2 y 3 como Test.bat 1 2 3.

1 
2 
3

S. No Bucles y descripción
1 Implementación de declaración de ruptura

La sentencia break se usa para alterar el flujo de control dentro de los bucles dentro de cualquier lenguaje de programación. La sentencia break se usa normalmente en construcciones de bucle y se usa para causar la terminación inmediata del bucle de cierre más interno.

Una función es un conjunto de declaraciones organizadas juntas para realizar una tarea específica. En los scripts por lotes, se adopta un enfoque similar para agrupar declaraciones lógicas para formar una función.

Como en cualquier otro idioma, las funciones en Batch Script siguen el mismo procedimiento:

  • Function Declaration - Le dice al compilador sobre el nombre de una función, el tipo de retorno y los parámetros.

  • Function Definition - Proporciona el cuerpo real de la función.

Definición de función

En Batch Script, una función se define utilizando la declaración de etiqueta. Cuando una función se define recientemente, puede tomar uno o varios valores como 'parámetros' de entrada a la función, procesar las funciones en el cuerpo principal y devolver los valores a las funciones como 'tipos de retorno' de salida.

Cada función tiene un nombre de función, que describe la tarea que realiza la función. Para usar una función, "llama" a esa función con su nombre y pasa sus valores de entrada (conocidos como argumentos) que coinciden con los tipos de parámetros de la función.

A continuación se muestra la sintaxis de una función simple.

:function_name 
Do_something 
EXIT /B 0
  • Function_name es el nombre dado a la función que debería tener algún significado para coincidir con lo que la función realmente hace.

  • La instrucción EXIT se utiliza para garantizar que la función finalice correctamente.

A continuación se muestra un ejemplo de una función simple.

Ejemplo

:Display 
SET /A index=2 
echo The value of index is %index% 
EXIT /B 0
S. No Funciones y descripción
1 Llamar a una función

Una función se llama en Batch Script mediante el comando de llamada.

2 Funciones con parámetros

Las funciones pueden trabajar con parámetros simplemente pasándolos cuando se realiza una llamada a la función.

3 Funciones con valores devueltos

Las funciones pueden trabajar con valores devueltos simplemente pasando nombres de variables

4 Variables locales en funciones

Las variables locales en las funciones se pueden utilizar para evitar conflictos de nombres y mantener los cambios de variables locales en la función.

5 Funciones recursivas

La capacidad de encapsular completamente el cuerpo de una función manteniendo los cambios de variable locales a la función e invisibles para la persona que llama.

6 E / S de archivos

En Batch Script, es posible realizar las operaciones normales de E / S de archivos que se esperarían en cualquier lenguaje de programación.

7 Crear archivos

La creación de un nuevo archivo se realiza con la ayuda del filtro de redirección>. Este filtro se puede utilizar para redirigir cualquier salida a un archivo.

8 Escribir en archivos

La escritura de contenido en archivos también se realiza con la ayuda del filtro de redirección>. Este filtro se puede utilizar para redirigir cualquier salida a un archivo.

9 Agregar a archivos

La escritura de contenido en archivos también se realiza con la ayuda del filtro de doble redirección >>. Este filtro se puede utilizar para agregar cualquier salida a un archivo.

10 Lectura de archivos

La lectura de archivos en un script por lotes se realiza mediante el comando de bucle FOR para recorrer cada línea que está definida en el archivo que debe leerse.

11 Eliminar archivos

Para eliminar archivos, Batch Script proporciona el comando DEL.

12 Cambio de nombre de archivos

Para cambiar el nombre de los archivos, Batch Script proporciona el comando REN o RENAME.

13 Mover archivos

Para mover archivos, Batch Script proporciona el comando MOVE.

14 Archivos por lotes: tuberías

El operador de tubería (|) toma la salida (por defecto, STDOUT) de un comando y la dirige a la entrada (por defecto, STDIN) de otro comando.

15 Archivos por lotes: entradas

Cuando se ejecuta un archivo por lotes, le da la opción de pasar parámetros de línea de comando que luego se pueden leer dentro del programa para su posterior procesamiento.

dieciséis Uso del operador SHIFT

Una de las limitaciones de los argumentos de la línea de comandos es que solo puede aceptar argumentos hasta% 9. Tomemos un ejemplo de esta limitación.

17 Carpetas

En Batch Script, es posible realizar las operaciones normales basadas en carpetas que se esperarían en cualquier lenguaje de programación.

18 Crear carpetas

La creación de una carpeta se realiza con la ayuda del comando MD (Crear directorio).

19 Listado del contenido de la carpeta

La lista del contenido de la carpeta se puede hacer con el comando dir. Este comando le permite ver los archivos y directorios disponibles en el directorio actual.

20 Eliminar carpetas

Para eliminar carpetas, Batch Scripting proporciona el comando DEL.

21 Cambio de nombre de carpetas

Para cambiar el nombre de las carpetas, Batch Script proporciona el comando REN o RENAME.

22 Mover carpetas

Para mover carpetas, Batch Script proporciona el comando MOVE.

En este capítulo, discutiremos los diversos procesos involucrados en Batch Script.

Ver la lista de procesos en ejecución

En Batch Script, el comando TASKLIST se puede utilizar para obtener la lista de procesos que se están ejecutando actualmente dentro de un sistema.

Sintaxis

TASKLIST [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [/FI filter]
[/FO format] [/NH]
S.No. Opciones y descripción
1.

/S system

Especifica el sistema remoto al que conectarse

2.

/U

[domain\]user

Especifica el contexto de usuario en el que se debe ejecutar el comando.

3.

/P [password]

Especifica la contraseña para el contexto de usuario dado. Solicita entrada si se omite.

4.

/M [module]

Enumera todas las tareas que actualmente usan el nombre exe / dll proporcionado. Si no se especifica el nombre del módulo, se muestran todos los módulos cargados.

5.

/SVC

Muestra los servicios alojados en cada proceso.

6.

/V

Muestra información detallada de la tarea.

7.

/FI filter

Muestra un conjunto de tareas que coinciden con un criterio determinado especificado por el filtro.

8.

/FO format

Especifica el formato de salida. Valores válidos: "TABLE", "LIST", "CSV".

9.

/NH

Especifica que el "Encabezado de columna" no debe mostrarse en la salida. Válido solo para los formatos "TABLE" y "CSV".

Ejemplos

TASKLIST

El comando anterior obtendrá la lista de todos los procesos que se ejecutan en su sistema local. A continuación se muestra una instantánea de la salida que se representa cuando el comando anterior se ejecuta tal cual. Como puede ver en el siguiente resultado, no solo obtiene los diversos procesos que se ejecutan en su sistema, sino que también obtiene el uso de memoria de cada proceso.

Image Name                    PID       Session Name       Session#     Mem Usage
========================= ========    ================ =========== ============
System Idle Process             0        Services            0              4 K
System                          4        Services            0            272 K
smss.exe                      344        Services            0          1,040 K
csrss.exe                     528        Services            0          3,892 K
csrss.exe                     612        Console             1         41,788 K
wininit.exe                   620        Services            0          3,528 K
winlogon.exe                  648        Console             1          5,884 K
services.exe                  712        Services            0          6,224 K
lsass.exe                     720        Services            0          9,712 K
svchost.exe                   788        Services            0         10,048 K
svchost.exe                   832        Services            0          7,696 K
dwm.exe                       916        Console             1        117,440 K
nvvsvc.exe                    932        Services            0          6,692 K
nvxdsync.exe                  968        Console             1         16,328 K
nvvsvc.exe                    976        Console             1         12,756 K
svchost.exe                  1012        Services            0         21,648 K
svchost.exe                   236        Services            0         33,864 K
svchost.exe                   480        Services            0         11,152 K
svchost.exe                  1028        Services            0         11,104 K
svchost.exe                  1048        Services            0         16,108 K
wlanext.exe                  1220        Services            0         12,560 K
conhost.exe                  1228        Services            0          2,588 K
svchost.exe                  1276        Services            0         13,888 K
svchost.exe                  1420        Services            0         13,488 K
spoolsv.exe                  1556        Services            0          9,340 K

tasklist > process.txt

El comando anterior toma la salida mostrada por la lista de tareas y la guarda en el archivo process.txt.

tasklist /fi "memusage gt 40000"

El comando anterior solo buscará aquellos procesos cuya memoria sea superior a 40 MB. A continuación se muestra una salida de muestra que se puede renderizar.

Image Name                    PID      Session Name     Session#     Mem Usage
=========================   ======== ================ =========== ============
dwm.exe                        916     Console             1        127,912 K
explorer.exe                  2904     Console             1        125,868 K
ServerManager.exe             1836     Console             1         59,796 K
WINWORD.EXE                   2456     Console             1        144,504 K
chrome.exe                    4892     Console             1        123,232 K
chrome.exe                    4976     Console             1         69,412 K
chrome.exe                    1724     Console             1         76,416 K
chrome.exe                    3992     Console             1         56,156 K
chrome.exe                    1168     Console             1        233,628 K
chrome.exe                     816     Console             1         66,808 K

Matar un proceso en particular

Permite a un usuario que ejecuta Microsoft Windows XP professional, Windows 2003 o posterior eliminar una tarea desde una línea de comandos de Windows por ID de proceso (PID) o nombre de imagen. El comando utilizado para este propósito es el comando TASKILL.

Sintaxis

TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] 
[/PID processid | /IM imagename] } [/T] [/F]
S.No. Opciones y descripción
1.

/S system

Especifica el sistema remoto al que conectarse

2.

/U

[domain\]user

Especifica el contexto de usuario en el que se debe ejecutar el comando.

3.

/P [password]

Especifica la contraseña para el contexto de usuario dado. Solicita entrada si se omite.

4.

/FI

FilterName

Aplica un filtro para seleccionar un conjunto de tareas. Permite utilizar "*". ex. imagename eq acme * Consulte los filtros a continuación para obtener información adicional y ejemplos.

5.

/PID

processID

Especifica el PID del proceso que se terminará. Utilice TaskList para obtener el PID.

6.

/IM

ImageName

Especifica el nombre de la imagen del proceso que se terminará. El comodín '*' se puede utilizar para especificar todas las tareas o nombres de imágenes.

7.

/T

Termina el proceso especificado y cualquier proceso hijo que haya iniciado.

8.

/F

Especifica la terminación forzosa de los procesos.

Ejemplos

taskkill /f /im notepad.exe

El comando anterior mata la tarea del bloc de notas abierto, si está abierto.

taskill /pid 9214

El comando anterior mata un proceso que tiene un proceso de 9214.

Iniciar un nuevo proceso

Las secuencias de comandos de DOS también tienen la disponibilidad para iniciar un nuevo proceso por completo. Esto se logra usando el comando START.

Sintaxis

START "title" [/D path] [options] "command" [parameters]

Donde

  • title - Texto para la barra de título de la ventana de CMD (obligatorio).

  • path - Directorio de inicio.

  • command - El comando, archivo por lotes o programa ejecutable que se ejecutará.

  • parameters - Los parámetros pasados ​​al comando.

S.No. Opciones y descripción
1.

/MIN

Ventana de inicio minimizada

2.

/MAX

Ventana de inicio maximizada.

3.

/LOW

Utilice la clase de prioridad IDLE.

4.

/NORMAL

Utilice la clase de prioridad NORMAL.

5.

/ABOVENORMAL

Utilice la clase de prioridad ABOVENORMAL.

6.

/BELOWNORMAL

Utilice la clase de prioridad BELOWNORMAL.

7.

/HIGH

Utilice la clase de ALTA prioridad.

8.

/REALTIME

Utilice la clase de prioridad REALTIME.

Ejemplos

START "Test Batch Script" /Min test.bat

El comando anterior ejecutará el script por lotes test.bat en una nueva ventana. Las ventanas se iniciarán en el modo minimizado y también tendrán el título de "Prueba de secuencia de comandos por lotes".

START "" "C:\Program Files\Microsoft Office\Winword.exe" "D:\test\TESTA.txt"

El comando anterior realmente ejecutará Microsoft Word en otro proceso y luego abrirá el archivo TESTA.txt en MS Word.

Alias ​​significa crear atajos o palabras clave para comandos existentes. Supongamos que quisiéramos ejecutar el siguiente comando, que no es más que el comando de lista de directorios con la opción / w para no mostrar todos los detalles necesarios en una lista de directorios.

Dir /w

Supongamos que creáramos un acceso directo a este comando de la siguiente manera.

dw = dir /w

Cuando queremos ejecutar el dir /w comando, simplemente podemos escribir la palabra dw. La palabra 'dw' ahora se ha convertido en un alias del comando Dir / w.

Crear un alias

Los alias se gestionan mediante el doskey mando.

Sintaxis

DOSKEY [options] [macroname=[text]]

Donde

  • macroname - Un nombre corto para la macro.

  • text - Los comandos que desea recuperar.

A continuación se muestra la descripción de las opciones que se pueden presentar al comando DOSKEY.

S.No. Opciones y descripción
1.

/REINSTALL

Instala una nueva copia de Doskey

2.

/LISTSIZE = size

Establece el tamaño del búfer del historial de comandos.

3.

/MACROS

Muestra todas las macros de Doskey.

4.

/MACROS:ALL

Muestra todas las macros de Doskey para todos los ejecutables que tienen macros de Doskey.

5.

/MACROS:exename

Muestra todas las macros de Doskey para el ejecutable dado.

6.

/HISTORY

Muestra todos los comandos almacenados en la memoria.

7.

/INSERT

Especifica que el texto nuevo que escribe se inserta en el texto antiguo.

8.

/OVERSTRIKE

Especifica que el texto nuevo sobrescribe el texto antiguo.

9.

/EXENAME = exename

Especifica el ejecutable.

10.

/MACROFILE = filename

Especifica un archivo de macros para instalar.

11.

macroname

Especifica un nombre para una macro que crea.

12.

text

Especifica los comandos que desea grabar.

Ejemplo

Cree un nuevo archivo llamado keys.bat e ingrese los siguientes comandos en el archivo. Los siguientes comandos crean dos alias, uno para el comando cd, que automáticamente va al directorio llamado test. Y el otro es para el comando dir.

@echo off
doskey cd = cd/test
doskey d = dir

Una vez que ejecute el comando, podrá ejecutar estos alias en el símbolo del sistema.

Salida

La siguiente captura de pantalla muestra que después de ejecutar el archivo por lotes creado anteriormente, puede ingresar libremente el comando 'd' y le dará la lista de directorios, lo que significa que su alias ha sido creado.

Eliminar un alias

Se puede eliminar un alias o una macro estableciendo el valor de la macro en NULL.

Ejemplo

@echo off
doskey cd = cd/test
doskey d = dir
d=

En el ejemplo anterior, primero configuramos la macro d ad = dir. Después de lo cual lo establecemos en NULL. Debido a que hemos establecido el valor de d en NULL, la macro d se eliminará.

Reemplazo de un alias

Un alias o macro se puede reemplazar estableciendo el valor de la macro en el nuevo valor deseado.

Ejemplo

@echo off
doskey cd = cd/test
doskey d = dir

d = dir /w

En el ejemplo anterior, primero configuramos la macro d ad = dir. Después de lo cual lo configuraremos en dir / w. Dado que hemos establecido el valor de d en un nuevo valor, el alias 'd' ahora tomará el nuevo valor.

Windows ahora tiene una biblioteca mejorada que se puede usar en Batch Script para trabajar con dispositivos conectados al sistema. Esto se conoce como la consola del dispositivo: DevCon.exe.

Los desarrolladores y evaluadores de controladores de Windows pueden usar DevCon para verificar que un controlador esté instalado y configurado correctamente, incluidos los archivos INF, la pila de controladores, los archivos de controladores y el paquete de controladores adecuados. También puede usar los comandos DevCon (habilitar, deshabilitar, instalar, iniciar, detener y continuar) en scripts para probar el controlador.DevCon es una herramienta de línea de comandos que realiza funciones de administración de dispositivos en computadoras locales y remotas.

Mostrar información de dispositivos y controladores DevCon puede mostrar las siguientes propiedades de controladores y dispositivos en computadoras locales y computadoras remotas (con Windows XP y versiones anteriores):

  • ID de hardware, ID compatibles e ID de instancia de dispositivo. Estos identificadores se describen en detalle en cadenas de identificación de dispositivos.

  • Clases de configuración de dispositivos.

  • Los dispositivos en una clase de configuración de dispositivos.

  • Archivos INF y archivos de controladores de dispositivo.

  • Detalles de los paquetes de controladores.

  • Recursos de hardware.

  • Estado del dispositivo.

  • Pila de controladores esperada.

  • Paquetes de controladores de terceros en la tienda de controladores.

  • Búsqueda de dispositivos DevCon puede buscar dispositivos instalados y desinstalados en una computadora local o remota por ID de hardware, ID de instancia de dispositivo o clase de configuración de dispositivo.

  • Cambiar la configuración del dispositivo DevCon puede cambiar el estado o la configuración de los dispositivos Plug and Play (PnP) en la computadora local de las siguientes maneras:

    • Habilita un dispositivo.

    • Desactiva un dispositivo.

    • Actualice los controladores (interactivos y no interactivos).

    • Instale un dispositivo (cree un devnode e instale software).

    • Elimine un dispositivo del árbol de dispositivos y elimine su pila de dispositivos.

    • Vuelva a buscar dispositivos Plug and Play.

    • Agregue, elimine y reordene las ID de hardware de los dispositivos enumerados como raíz.

    • Cambie los controladores de filtro superior e inferior para una clase de configuración de dispositivo.

    • Agregue y elimine paquetes de controladores de terceros del almacén de controladores.

DevCon (DevCon.exe) se incluye cuando instala WDK, Visual Studio y el SDK de Windows para aplicaciones de escritorio. El kit DevCon.exe está disponible en las siguientes ubicaciones cuando se instala.

%WindowsSdkDir%\tools\x64\devcon.exe
%WindowsSdkDir%\tools\x86\devcon.exe
%WindowsSdkDir%\tools\arm\devcon.exe

Sintaxis

devcon [/m:\\computer] [/r] command [arguments]

donde

  • /m:\\computer- Ejecuta el comando en la computadora remota especificada. Se requieren las barras invertidas.

  • /r- Reinicio condicional. Reinicia el sistema después de completar una operación solo si es necesario reiniciar para que el cambio sea efectivo.

  • command - Especifica un comando DevCon.

  • Para enumerar y mostrar información sobre dispositivos en la computadora, utilice los siguientes comandos:

    • DevCon HwID

    • Clases de DevCon

    • DevCon ListClass

    • DevCon DriverFiles

    • DevCon DriverNodes

    • Recursos de DevCon

    • Pila de DevCon

    • Estado de DevCon

    • DevCon Dp_enum

  • Para buscar información sobre dispositivos en la computadora, use los siguientes comandos:

    • DevCon Find

    • DevCon FindAll

  • Para manipular el dispositivo o cambiar su configuración, use los siguientes comandos:

    • Habilitar DevCon

    • Deshabilitar DevCon

    • Actualización de DevCon

    • DevCon UpdateNI

    • Instalación de DevCon

    • DevCon Eliminar

    • DevCon Rescan

    • Reinicio de DevCon

    • Reinicio de DevCon

    • DevCon SetHwID

    • DevCon ClassFilter

    • DevCon Dp_add

    • DevCon Dp_delete

Ejemplos

A continuación, se muestran algunos ejemplos sobre cómo se usa el comando DevCon.

List all driver files

El siguiente comando usa la operación DevCon DriverFiles para enumerar los nombres de archivo de los controladores que usan los dispositivos en el sistema. El comando utiliza el carácter comodín (*) para indicar todos los dispositivos del sistema. Debido a que la salida es extensa, el comando usa el carácter de redirección (>) para redirigir la salida a un archivo de referencia, driverfiles.txt.

devcon driverfiles * > driverfiles.txt

El siguiente comando usa la operación de estado de DevCon para encontrar el estado de todos los dispositivos en la computadora local. Luego guarda el estado en el archivo status.txt para registrarlo o revisarlo más tarde. El comando utiliza el carácter comodín (*) para representar todos los dispositivos y el carácter de redirección (>) para redirigir la salida al archivo status.txt.

devcon status * > status.txt

El siguiente comando habilita todos los dispositivos de impresora en la computadora especificando la clase de configuración de la impresora en un comando DevCon Enable. El comando incluye el parámetro / r, que reinicia el sistema si es necesario para que la habilitación sea efectiva.

devcon /r enable = Printer

El siguiente comando usa la operación DevCon Install para instalar un dispositivo de teclado en la computadora local. El comando incluye la ruta completa al archivo INF para el dispositivo (keyboard.inf) y un ID de hardware (* PNP030b).

devcon /r install c:\windows\inf\keyboard.inf *PNP030b

El siguiente comando escaneará la computadora en busca de nuevos dispositivos.

devcon scan

El siguiente comando volverá a escanear la computadora en busca de nuevos dispositivos.

devcon rescan

El Registro es uno de los elementos clave de un sistema Windows. Contiene mucha información sobre varios aspectos del sistema operativo. Casi todas las aplicaciones instaladas en un sistema Windows interactúan con el registro de una forma u otra.

El Registro contiene dos elementos básicos: claves y valores. Registry keys son objetos contenedores similares a carpetas. Registry valuesson objetos no contenedores similares a archivos. Las claves pueden contener valores u otras claves. Se hace referencia a las claves con una sintaxis similar a los nombres de ruta de Windows, usando barras invertidas para indicar niveles de jerarquía.

Este capítulo analiza varias funciones, como consultar valores, agregar, eliminar y editar valores del registro.

S. No Tipos de registro y descripción
1 Leyendo del Registro

La lectura del registro se realiza mediante el comando REG QUERY.

2 Agregar al registro

La adición al registro se realiza mediante el comando REG ADD.

3 Eliminar del registro

La eliminación del registro se realiza mediante el comando REG DEL.

4 Copia de claves de registro

La copia desde el registro se realiza mediante el comando REG COPY.

5 Comparación de claves de registro

La comparación de claves de registro se realiza mediante el comando REG COMPARE.

El script por lotes tiene la posibilidad de trabajar con configuraciones de red. El comando NET se usa para actualizar, arreglar o ver la red o la configuración de la red. Este capítulo analiza las diferentes opciones disponibles para el comando net.

S. No Comandos y descripción de .NET
1 CUENTAS NETAS

Ver la contraseña actual y las restricciones de inicio de sesión de la computadora.

2 CONFIG. RED

Muestra la configuración actual de su servidor o grupo de trabajo.

3 ORDENADOR NETO

Agrega o quita una computadora conectada al controlador de dominio de Windows.

4 USUARIO DE RED

Este comando se puede utilizar para lo siguiente

Ver los detalles de una cuenta de usuario en particular.

5 PARADA / INICIO NETO

Este comando se usa para detener e iniciar un servicio en particular.

6 ESTADÍSTICAS NETAS

Muestra las estadísticas de la red de la estación de trabajo o del servidor.

7 USO NETO

Conecta o desconecta su computadora de un recurso compartido o muestra información sobre sus conexiones.

La impresión también se puede controlar desde Batch Script mediante el comando NET PRINT.

Sintaxis

PRINT [/D:device] [[drive:][path]filename[...]]

Donde / D: dispositivo: especifica un dispositivo de impresión.

Ejemplo

print c:\example.txt /c /d:lpt1

El comando anterior imprimirá el archivo example.txt en el puerto paralelo lpt1.

Control de impresora por línea de comandos

A partir de Windows 2000, muchas opciones de la impresora, pero no todas, se pueden configurar desde la línea de comandos de Windows mediante PRINTUI.DLL y RUNDLL32.EXE

Sintaxis

RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry [ options ] [ @commandfile ]

Donde algunas de las opciones disponibles son las siguientes:

  • /dl - Eliminar impresora local.

  • /dn - Eliminar la conexión de la impresora de red.

  • /dd - Eliminar el controlador de la impresora.

  • /e - Mostrar preferencias de impresión.

  • /f[file] - Archivo inf o archivo de salida.

  • /F[file] - Ubicación de un archivo INF de la que puede depender el archivo INF especificado con / f.

  • /ia - Instale el controlador de la impresora mediante el archivo inf.

  • /id - Instale el controlador de impresora utilizando el asistente para agregar controlador de impresora.

  • /if - Instale la impresora usando el archivo inf.

  • /ii - Instale la impresora usando el asistente para agregar impresoras con un archivo inf.

  • /il - Instale la impresora usando el asistente para agregar impresoras.

  • /in - Agregar conexión de impresora de red.

  • /ip - Instale la impresora utilizando el asistente de instalación de impresoras de red.

  • /k - Imprimir página de prueba en la impresora especificada, no se puede combinar con el comando al instalar una impresora.

  • /l[path] - Ruta de origen del controlador de impresora.

  • /m[model] - Nombre del modelo del controlador de la impresora.

  • /n[name] - Nombre de la impresora.

  • /o - Mostrar vista de cola de impresora.

  • /p - Mostrar propiedades de la impresora.

  • /Ss - Almacene la configuración de la impresora en un archivo.

  • /Sr - Restaurar la configuración de la impresora desde un archivo.

  • /y - Establecer impresora como predeterminada.

  • /Xg - Obtenga la configuración de la impresora.

  • /Xs - Establecer la configuración de la impresora.

Prueba de si existe una impresora

Puede haber casos en los que esté conectado a una impresora de red en lugar de a una impresora local. En tales casos, siempre es beneficioso comprobar si existe una impresora en primer lugar antes de imprimir.

La existencia de una impresora se puede evaluar con la ayuda de RUNDLL32.EXE PRINTUI.DLL que se utiliza para controlar la mayoría de las configuraciones de la impresora.

Ejemplo

SET PrinterName = Test Printer
SET file=%TEMP%\Prt.txt
RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry /Xg /n "%PrinterName%" /f "%file%" /q

IF EXIST "%file%" (
   ECHO %PrinterName% printer exists
) ELSE (
   ECHO %PrinterName% printer does NOT exists
)

El comando anterior hará lo siguiente:

  • Primero establecerá el nombre de la impresora y establecerá un nombre de archivo que contendrá la configuración de la impresora.

  • Los comandos RUNDLL32.EXE PRINTUI.DLL se utilizarán para comprobar si la impresora existe realmente enviando los ajustes de configuración del archivo al archivo Prt.txt

Muy a menudo, puede tener problemas al ejecutar archivos por lotes y, en la mayoría de los casos, necesitará depurar sus archivos por lotes de una forma u otra para determinar el problema con el archivo por lotes en sí. A continuación se muestran algunas de las técnicas que pueden ayudar a depurar archivos de Batch Script.

Error de mensajes

Para descubrir la fuente del mensaje, siga estos pasos:

Step 1 - REM fuera de la línea @ECHO OFF, es decir, REM @ECHO OFF o :: @ECHO OFF.

Step 2 - Ejecute el archivo por lotes con los parámetros de línea de comando requeridos, redirigiendo toda la salida a un archivo de registro para su posterior comparación.

test.bat > batch.log 2>&1

Step 3 - Busque en el archivo batch.log los mensajes de error

Step 4- Verifique la línea anterior para ver si hay algún comando inesperado o no válido, cambio (es) de línea de comando o valor (es); preste especial atención a los valores de las variables de entorno utilizadas en el comando.

Step 5 - Corrija el error y repita este proceso hasta que desaparezcan todos los mensajes de error.

Líneas de comando complejas

Otra fuente común de errores son los comandos redirigidos incorrectamente, como por ejemplo los comandos FIND o FINDSTR "anidados" con cadenas de búsqueda incorrectas, a veces dentro de un bucle FOR / F.

Para verificar la validez de estos comandos complejos, siga estos pasos:

Step 1 - Inserte "líneas de verificación de comandos" justo antes de una línea que utiliza el conjunto de comandos complejo.

A continuación se muestra un ejemplo en el que se inserta el comando ECHO para marcar dónde termina la salida del primer comando TYPE y comienza el siguiente.

TYPE %Temp%.\apipaorg.reg
ECHO.================================================ TYPE %Temp%.\apipaorg.reg 
| FIND 
"[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"

Step 2 - Siga el procedimiento para encontrar las fuentes de mensajes de error descritas anteriormente.

Step 3- Preste especial atención a la salida de las líneas de comando "simplificadas": ¿Es la salida del formato esperado? ¿El valor o la posición del "token" es el esperado?

Subrutinas

Las subrutinas que generan mensajes de error plantean un "desafío" adicional para encontrar la causa del error, ya que se pueden llamar varias veces en el mismo archivo por lotes.

Para ayudar a averiguar qué causa la llamada incorrecta a la subrutina, siga estos pasos:

Step 1 - Agregar y restablecer una variable de contador al comienzo del script -

SET Counter = 0

Step 2 - Incrementar el contador cada vez que se llama a la subrutina, insertando la siguiente línea al comienzo de la subrutina

SET /A Counter+=1

Step 3- Inserte otra línea justo después del incremento del contador, que contenga solo el comando SET; esto listará todas las variables de entorno y sus valores.

Step 4 - Siga el procedimiento para encontrar las fuentes de mensajes de error descritas anteriormente.

Versiones de Windows

Si tiene la intención de distribuir sus archivos por lotes a otras computadoras que pueden o no ejecutar la misma versión de Windows, deberá probar sus archivos por lotes en tantas versiones de Windows como sea posible.

El siguiente ejemplo muestra cómo verificar varias versiones del sistema operativo para verificar las versiones relevantes de Windows.

@ECHO OFF
:: Check for Windows NT 4 and later

IF NOT "%OS%"=="Windows_NT" GOTO DontRun
:: Check for Windows NT 4
VER | FIND "Windows NT" >NUL && GOTO DontRun
:: Check for Windows 2000
VER | FIND "Windows 2000" >NUL && GOTO DontRun
:: Place actual code here . . .
:: End of actual code . . .
EXIT

:DontRun
ECHO Sorry, this batch file was written for Windows XP and later versions only

Es posible iniciar sesión en Batch Script mediante el comando de redirección.

Sintaxis

test.bat > testlog.txt 2> testerrors.txt

Ejemplo

Cree un archivo llamado test.bat e ingrese el siguiente comando en el archivo.

net statistics /Server

El comando anterior tiene un error porque la opción del comando net statistics se proporciona de manera incorrecta.

Salida

Si el comando con el archivo test.bat anterior se ejecuta como

test.bat > testlog.txt 2> testerrors.txt

Y abres el archivo testerrors.txt, verás el siguiente error.

The option /SERVER is unknown.

La sintaxis de este comando es:

NET STATISTICS
[WORKSTATION | SERVER]

Hay más ayuda disponible escribiendo NET HELPMSG 3506.

Si abre el archivo llamado testlog.txt, le mostrará un registro de los comandos que se ejecutaron.

C:\tp>net statistics /Server