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\bin hasta 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