stringtranslate.com

Archivo por lotes

Un archivo por lotes es un archivo de secuencia de comandos en DOS , OS/2 y Microsoft Windows . Consta de una serie de comandos que debe ejecutar el intérprete de línea de comandos , almacenados en un archivo de texto plano . Un archivo por lotes puede contener cualquier comando que el intérprete acepte de forma interactiva y utilizar construcciones que permitan bifurcaciones y bucles condicionales dentro del archivo por lotes, como IF, FORy GOTO etiquetas . El término "lote" proviene del procesamiento por lotes , que significa "ejecución no interactiva", aunque es posible que un archivo por lotes no procese un lote de múltiples datos.

Al igual que Job Control Language (JCL), DCL y otros sistemas en sistemas mainframe y minicomputadoras, se agregaron archivos por lotes para facilitar el trabajo requerido para ciertas tareas regulares al permitir al usuario configurar un script para automatizarlas. Cuando se ejecuta un archivo por lotes, el programa shell (normalmente COMMAND.COM o cmd.exe ) lee el archivo y ejecuta sus comandos, normalmente línea por línea. [1] Los sistemas operativos tipo Unix , como Linux , tienen un tipo de archivo similar, pero más flexible, llamado script de shell . [2]

La extensión de nombre de archivo .bat se utiliza en DOS y Windows. Windows NT y OS/2 también agregaron .cmd . Los archivos por lotes para otros entornos pueden tener diferentes extensiones, por ejemplo, .btm en shells relacionados con 4DOS , 4OS2 y 4NT .

El manejo detallado de archivos por lotes ha cambiado significativamente entre versiones. Algunos de los detalles de este artículo se aplican a todos los archivos por lotes, mientras que otros detalles se aplican solo a determinadas versiones.

Variantes

DOS

En MS-DOS , se puede iniciar un archivo por lotes desde la interfaz de línea de comandos escribiendo su nombre, seguido de los parámetros necesarios y presionando la ↵ Entertecla. Cuando se carga DOS, el archivo AUTOEXEC.BAT , cuando está presente, se ejecuta automáticamente, por lo que cualquier comando que deba ejecutarse para configurar el entorno DOS se puede colocar en este archivo. Los usuarios de computadoras harían que el archivo AUTOEXEC.BAT configurara la fecha y hora del sistema, inicializara el entorno DOS, cargara cualquier programa residente o controlador de dispositivo, o inicializara conexiones y asignaciones de red.

Una extensión de nombre de archivo .bat identifica un archivo que contiene comandos ejecutados por el intérprete de comandos COMMAND.COM línea por línea, como si fuera una lista de comandos ingresados ​​manualmente, con algunos comandos adicionales específicos de archivos por lotes para la funcionalidad de programación básica. incluyendo un GOTOcomando para cambiar el flujo de ejecución de la línea.

Ventanas tempranas

Microsoft Windows se introdujo en 1985 como una superposición basada en una interfaz gráfica de usuario (GUI) en sistemas operativos basados ​​en texto y fue diseñado para ejecutarse en DOS. Para iniciarlo WINse utilizó el comando que se podía agregar al final del archivo AUTOEXEC.BAT para permitir la carga automática de Windows. En las versiones anteriores, se podía ejecutar un archivo de tipo .bat desde Windows en el símbolo del sistema MS-DOS. Windows 3.1x y versiones anteriores, así como Windows 9x, invocaban COMMAND.COM para ejecutar archivos por lotes.

OS/2

El sistema operativo IBM OS/2 admitía archivos por lotes estilo DOS. También incluía una versión de REXX , un lenguaje de programación de archivos por lotes más avanzado . IBM y Microsoft comenzaron a desarrollar este sistema, pero durante su construcción se separaron después de una disputa; Como resultado de esto, IBM se refirió a su consola tipo DOS sin mencionar a Microsoft, nombrándola simplemente DOS, aunque esto aparentemente no hizo ninguna diferencia con respecto a la forma en que funcionaban los archivos por lotes desde COMMAND.COM.

El intérprete de archivos por lotes de OS/2 también admite un comando EXTPROC. Esto pasa el archivo por lotes al programa nombrado en el archivo EXTPROC como un archivo de datos. El programa nombrado puede ser un archivo de script; esto es similar al #! Mecanismo utilizado por los sistemas operativos tipo Unix .

WindowsNT

A diferencia de Windows 98 y versiones anteriores, la familia de sistemas operativos Windows NT no depende de MS-DOS. Windows NT introdujo un intérprete de comandos mejorado de 32 bits ( cmd.exe ) que podía ejecutar scripts con la extensión .CMD o .BAT. Cmd.exe agregó comandos adicionales e implementó los existentes de una manera ligeramente diferente, de modo que el mismo archivo por lotes (con diferente extensión) podría funcionar de manera diferente con cmd.exe y COMMAND.COM. En la mayoría de los casos, el funcionamiento es idéntico si no se utilizan los pocos comandos no compatibles. Las extensiones de Cmd.exe a COMMAND.COM se pueden desactivar por motivos de compatibilidad.

Microsoft lanzó una versión de cmd.exe para Windows 9x y ME llamada WIN95CMD para permitir a los usuarios de versiones anteriores de Windows utilizar ciertos archivos por lotes de estilo cmd.exe.

A partir de Windows 8 , cmd.exe es el intérprete de comandos normal para archivos por lotes; El COMMAND.COM anterior también se puede ejecutar en versiones de Windows de 32 bits capaces de ejecutar programas de 16 bits. [nota 1]

Extensiones de nombre de archivo

.murciélago
La primera extensión de nombre de archivo utilizada por Microsoft para archivos por lotes. Esta extensión se ejecuta con DOS y todas las versiones de Windows, bajo COMMAND.COM o cmd.exe, a pesar de las diferentes formas en que los dos intérpretes de comandos ejecutan archivos por lotes.
.cmd
Se utiliza para archivos por lotes en la familia Windows NT y se envía a cmd.exe para su interpretación. COMMAND.COM no reconoce esta extensión de nombre de archivo, por lo que los scripts cmd.exe no se ejecutan por error en el entorno de Windows incorrecto. Además, los comandos append, dpath, ftype, set, y , cuando se ejecutan desde un archivo .bat path, alteran el valor de la variable solo en caso de error, mientras que desde dentro de un archivo .cmd, afectarían el nivel de error incluso cuando se regresa sin un error. [3] También lo utiliza OS/2 de IBM para archivos por lotes.assocprompterrorlevel
.btm
La extensión utilizada por 4DOS , 4OS2 , 4NT y Take Command . Estos scripts son más rápidos, especialmente los más largos, ya que el script se carga completamente listo para su ejecución, en lugar de línea por línea. [4]

Parámetros del archivo por lotes

COMMAND.COM y cmd.exe admiten variables especiales ( %0, %1hasta %9) para hacer referencia a la ruta y el nombre del trabajo por lotes y los primeros nueve parámetros de llamada desde dentro del trabajo por lotes; consulte también SHIFT. Los parámetros inexistentes se reemplazan por una cadena de longitud cero. Se pueden utilizar de forma similar a las variables de entorno , pero no se almacenan en el entorno. Microsoft e IBM se refieren a estas variables como parámetros de reemplazo o parámetros reemplazables , mientras que Digital Research, Novell y Caldera establecieron para ellos el término variables de reemplazo [5] . JP Software los llama parámetros de archivos por lotes . [6]

Ejemplos

Este archivo por lotes de ejemplo muestra Hello World!, solicita y espera a que el usuario presione una tecla y luego finaliza. (Nota: No importa si los comandos están en minúsculas o mayúsculas a menos que se trabaje con variables)

@ ECHO APAGADO ECHO ¡Hola mundo!PAUSA

Para ejecutar el archivo, debe guardarse con el sufijo de extensión de nombre de archivo .bat (o .cmd para sistemas operativos de tipo Windows NT) en formato de texto sin formato, generalmente creado usando un editor de texto como Microsoft Notepad o un procesador de textos que funcione en modo texto plano.

Cuando se ejecuta, se muestra lo siguiente:

¡Hola Mundo!Pulse cualquier tecla para continuar . . .

Explicación

El intérprete ejecuta cada línea por turno, comenzando por la primera. El @símbolo al comienzo de cualquier línea evita que el mensaje muestre ese comando mientras se ejecuta. El comando ECHO OFFdesactiva el mensaje de forma permanente o hasta que se vuelva a activar. El combinado @ECHO OFFsuele ser, como aquí, la primera línea de un archivo por lotes, lo que impide que se muestre cualquier comando, incluido el mismo. Luego se ejecuta la siguiente línea y el ECHO Hello World!comando genera Hello World!. Se ejecuta la siguiente línea y el PAUSEcomando muestra Press any key to continue . . .y pausa la ejecución del script. Después de presionar una tecla, el script finaliza, ya que no hay más comandos. En Windows, si el script se ejecuta desde una ventana del símbolo del sistema que ya se está ejecutando , la ventana permanece abierta en el símbolo del sistema como en MS-DOS; de lo contrario, la ventana se cierra al finalizar.

Limitaciones y excepciones

Valores nulos en variables

Las expansiones de variables se sustituyen textualmente en el comando y, por lo tanto, las variables que no contienen nada simplemente desaparecen de la sintaxis y las variables que contienen espacios se convierten en múltiples tokens. Esto puede provocar errores o errores de sintaxis.

Por ejemplo, si %foo% está vacío, esta declaración:

IF  %foo% == bar ECHO Igual

analiza como la construcción errónea:

SI ==barra ECHO Igual

De manera similar, si %foo%contiene abc def, se produce un error de sintaxis diferente:

SI abc def == bar ECHO Igual

La forma habitual de evitar este problema es encerrar las expansiones de variables entre comillas para que una variable vacía se expanda a la expresión válida IF ""=="bar"en lugar de a la inválida IF ==bar. El texto que se compara con la variable también debe estar entre comillas, porque las comillas no son una sintaxis delimitadora especial; Estos personajes se representan a sí mismos.

IF  " %foo% " == "barra"  ECHO Igual

El !VARIABLE! retrasado Se puede utilizar la expansión disponible en Windows 2000 y posteriores para evitar estos errores sintácticos. En este caso, las variables nulas o de varias palabras no fallan sintácticamente porque el valor se expande después de analizar el comando IF:

SI  !foo! == barra ECHO Igual

Otra diferencia en Windows 2000 o superior es que no se sustituye una variable vacía (indefinida). Como se describe en ejemplos anteriores, el comportamiento anterior del intérprete por lotes habría dado como resultado una cadena vacía. Ejemplo:

C:\> establecer  MiVar = C:\> echo  %MiVar% %MiVar%C:\> if  " %MyVar% " == ""  ( echo MyVar no está definido )  else  ( echo MyVar es %MyVar% ) MyVar es %MyVar%

Los intérpretes por lotes anteriores a Windows 2000 habrían mostrado resultados MyVar is not defined.

Comillas y espacios en cadenas pasadas

A diferencia de los procesos Unix/POSIX, que reciben sus argumentos de línea de comandos ya divididos por el shell en una serie de cadenas, un proceso de Windows recibe la línea de comandos completa como una sola cadena, a través de la función API GetCommandLine. Como resultado, cada aplicación de Windows puede implementar su propio analizador para dividir toda la línea de comando en argumentos. Muchas aplicaciones y herramientas de línea de comandos han desarrollado su propia sintaxis para hacer esto, por lo que no existe una convención única para citar o escapar metacaracteres en las líneas de comando de Windows.

Cuando una cadena contiene comillas y debe insertarse en otra línea de texto que también debe estar entre comillas, se requiere especial atención al mecanismo de comillas:

C:\> set  foo = "esta cadena está entre comillas"C:\> echo  "prueba 1 %foo% " "prueba 1 "esta cadena está entre comillas""C:\> eventcreate /T Advertencia /ID 1 /L Sistema /SO "Fuente" /D "Ejemplo: %foo% " ERROR: Argumento/Opción no válida - 'cadena'. Escriba "EVENTCREATE /?" para su uso.

En Windows 2000 y versiones posteriores, la solución es reemplazar cada aparición de un carácter de comillas dentro de un valor por una serie de tres caracteres de comillas:

C:\> set  foo = "esta cadena está entre comillas"C:\> establecer  foo = %foo:"="""%C:\> echo  "prueba 1 %foo% " "prueba 1 """esta cadena está entre comillas""""C:\> eventcreate /T Advertencia /ID 1 /L Sistema /SO "Fuente" /D "Ejemplo: %foo% " ÉXITO: ​​Se crea un evento de tipo 'Advertencia' en el registro/fuente 'Fuente'.

Caracteres escapados en cadenas

Algunos caracteres, como |los caracteres de barra vertical (), tienen un significado especial en la línea de comando. No se pueden imprimir como texto usando el comando ECHO a menos que se escape usando el símbolo de intercalación ^:

C:\> eco foo | bar 'bar' no se reconoce como un comando interno o externo, programa ejecutable o archivo por lotes.C:\> eco foo ^| barra de foo | bar

Sin embargo, el escape no funciona como se esperaba al insertar el carácter de escape en una variable de entorno. La variable termina conteniendo un comando de canalización activa cuando simplemente se repite. Es necesario escapar tanto del símbolo de intercalación como del carácter de escape para que el carácter se muestre como texto en la variable:

C:\> establecer  foo = barra | baz 'baz' no se reconoce como un comando interno o externo, programa ejecutable o archivo por lotes.C:\> establecer  foo = barra ^| baz C:\> echo  %foo% 'baz' no se reconoce como un comando interno o externo, programa ejecutable o archivo por lotes.C:\> establecer  foo = barra ^^^| baz C:\> echo  %foo% barra | baz

La expansión retrasada disponible con o con en Windows 2000 y versiones posteriores se puede usar para mostrar caracteres especiales almacenados en variables de entorno porque el valor de la variable se expande después de analizar el comando:

C:\> cmd /V:ON Microsoft Windows [Versión 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.C:\> establecer  foo = barra ^| baz C:\> eco  !foo! barra | baz

Dormir o retraso programado

Hasta que se introdujo el comando TIMEOUT con Windows Vista, no había una manera fácil de implementar una pausa programada, ya que el comando PAUSE detiene la actividad del script indefinidamente hasta que se presiona cualquier tecla.

Eran posibles muchas soluciones, [10] pero generalmente sólo funcionaban en algunos entornos: el CHOICEcomando no estaba disponible en versiones anteriores de DOS, PINGsólo estaba disponible si TCP/IP estaba instalado, etc. Microsoft no ofrecía ninguna solución, pero se podían instalar varios pequeños programas de utilidad desde otras fuentes. Un ejemplo comercial sería el comando Norton Utilities Batch Enhancer (BE) de 1988, donde BE DELAY 18esperaría 1 segundo, o el WAIT.COM [11] gratuito de 94 bytes donde WAIT 5esperaría 5 segundos y luego devolvería el control al script. La mayoría de estos programas son archivos .COM de 16 bits, por lo que son incompatibles con Windows de 64 bits.

Salida de texto con CR/LF eliminado

Normalmente, todo el texto impreso tiene automáticamente los caracteres de control de retorno de carro (CR) y avance de línea (LF) añadidos al final de cada línea.

No importa si los dos comandos de eco comparten la misma línea de comando; Los códigos CR/LF se insertan para dividir la salida en líneas separadas:

C:\> @ echo Mensaje 1 &@ echo Mensaje 2 Mensaje 1 Mensaje 2

Un truco descubierto con Windows 2000 y posteriores es utilizar el mensaje especial de entrada para generar texto sin CR/LF detrás del texto. En este ejemplo, el CR/LF no sigue el Mensaje 1, pero sí sigue la Línea 2 y la Línea 3:

Esto se puede utilizar para enviar datos a un archivo de texto sin CR/LF añadido al final:

C:\> set  /p  = "Mensaje 1" < nul > data.txt C:\> set  /p  = "Mensaje 2" < nul >> data.txt C:\> set  /p  = "Mensaje 3" < nul >> datos.txt C:\> escriba datos.txt Mensaje 1 Mensaje 2 Mensaje 3

Sin embargo, no hay forma de inyectar esta salida del mensaje CR/LF eliminada directamente en una variable de entorno.

Configuración de un directorio de trabajo de Convención de nomenclatura uniforme (UNC) desde un acceso directo

No es posible tener un símbolo del sistema que utilice una ruta UNC como directorio de trabajo actual; p.ej\\server\share\directory\

El símbolo del sistema requiere el uso de letras de unidad para asignar un directorio de trabajo, lo que dificulta la ejecución de archivos por lotes complejos almacenados en un recurso compartido UNC del servidor. Si bien un archivo por lotes se puede ejecutar desde una ruta de archivo UNC, el directorio de trabajo predeterminado es C:\Windows\System32\.

En Windows 2000 y versiones posteriores, una solución alternativa es utilizar el comando PUSHDy POPDcon extensiones de comando. [nota 2]

Si no están habilitadas de forma predeterminada, las extensiones de comando se pueden habilitar temporalmente usando el /E:ONinterruptor del intérprete de comandos.

Entonces, para ejecutar un archivo por lotes en un recurso compartido UNC, asignar una letra de unidad temporal al recurso compartido UNC y usar el recurso compartido UNC como directorio de trabajo del archivo por lotes, se puede construir un acceso directo de Windows que se ve así:

Se ignora el atributo del directorio de trabajo de este acceso directo.

Esto también resuelve un problema relacionado con el Control de cuentas de usuario (UAC) en Windows Vista y versiones posteriores. Cuando un administrador inicia sesión y UAC está habilitado, e intenta ejecutar un archivo por lotes como administrador desde una letra de unidad de red, usando el menú contextual del archivo al hacer clic con el botón derecho, la operación fallará inesperadamente. Esto se debe a que el contexto de cuenta privilegiada de UAC elevado no tiene asignaciones de letras de unidad de red y no es posible asignar letras de unidad para el contexto elevado mediante el shell del Explorador o los scripts de inicio de sesión. Sin embargo, al crear un acceso directo al archivo por lotes usando la construcción PUSHD/ anterior POPDy usar el acceso directo para ejecutar el archivo por lotes como administrador, la letra de unidad temporal se creará y eliminará en el contexto de la cuenta elevada y el archivo por lotes funcionará correctamente. .

La siguiente sintaxis se expande correctamente a la ruta del script por lotes actual.

%~dp0

Las rutas UNC predeterminadas están desactivadas de forma predeterminada, ya que solían bloquear programas más antiguos. [12]

El valor del registro Dword DisableUNCChecken HKEY_CURRENT_USER\Software\Microsoft\Command Processor[12] permite que el directorio predeterminado sea UNC. CDEl comando se negará a cambiar, pero colocará una ruta UNC en el directorio predeterminado en un acceso directo a Cmd o usando el comando Inicio. ( C$compartir es para administradores).

Conjunto de caracteres

Los archivos por lotes utilizan un juego de caracteres OEM, según lo definido por la computadora, por ejemplo, página de códigos 437 . Las partes que no son ASCII son incompatibles con los conjuntos de caracteres Unicode o Windows que de otro modo se usarían en Windows, por lo que se debe tener cuidado. [13] Los nombres de archivos que no están en inglés funcionan sólo si se ingresan a través de un editor compatible con el juego de caracteres de DOS. Los nombres de archivos con caracteres fuera de este conjunto no funcionan en archivos por lotes.

Para obtener un símbolo del sistema con Unicode en lugar de la página de códigos 437 o similar, se puede usar el cmd /Ucomando. En dicho símbolo del sistema, funcionará un archivo por lotes con nombres de archivo Unicode. También se puede utilizar cmd /Upara ejecutar comandos directamente con Unicode como juego de caracteres. Por ejemplo, cmd /U /C dir > files.txtcrea un archivo que contiene una lista de directorios con caracteres correctos de Windows, en codificación UTF-16 LE.

Virus y malware por lotes

Como ocurre con cualquier otro lenguaje de programación, los archivos por lotes se pueden utilizar de forma maliciosa. Se crean fácilmente troyanos y bombas fork simples , y los archivos por lotes pueden provocar una forma de envenenamiento de DNS al modificar el archivo de hosts . Los virus por lotes son posibles y también pueden propagarse a través de unidades flash USB utilizando la capacidad de ejecución automática de Windows . [14]

El siguiente comando en un archivo por lotes eliminará todos los datos en el directorio (carpeta) actual, sin pedir confirmación primero:

del /Q *.*

Estos tres comandos son una simple bomba de bifurcación que se replicará continuamente para agotar los recursos disponibles del sistema, ralentizándolo o bloqueándolo:

: inicio SUPERIOR  "" %0 ir a ARRIBA    

Otros lenguajes de programación de Windows

El procesador de comandos cmd.exe que interpreta archivos .cmd es compatible con todas las versiones de Windows de 32 y 64 bits hasta al menos Windows 10 . COMMAND.EXE, que interpreta archivos .BAT, era compatible con todas las versiones de 16 y 32 bits hasta al menos Windows 10. [nb 3]

Hay otros lenguajes de scripting, posteriores y más potentes, disponibles para Windows. Sin embargo, estos requieren que se instale el intérprete del lenguaje de secuencias de comandos antes de poder usarlos:

Los archivos de script se ejecutan si se ingresa el nombre del archivo sin extensión. Existen reglas de precedencia que rigen la interpretación de, digamos, DoThissi existen DoThis.com, DoThis.exe, DoThis.bat, DoThis.cmd, etc.; por defecto DoThis.comtiene la máxima prioridad. Este orden predeterminado puede modificarse en sistemas operativos más nuevos mediante la variable de entorno PATHEXT configurable por el usuario .

Ver también

Notas

  1. ^ Para verificar que COMMAND.COM permanezca disponible (en el directorio \WINDOWS\SYSTEM32), escriba COMMAND.COMen el símbolo del sistema de Windows 7 de 32 bits.
  2. ^ "Si las extensiones de comando están habilitadas, el comando PUSHD acepta rutas de red además de la letra y ruta de unidad normales. Si se especifica una ruta de red, PUSHD crea una letra de unidad temporal que apunta a ese recurso de red especificado y luego cambia la unidad actual y directorio, utilizando la letra de unidad recién definida. Las letras de unidad temporales se asignan desde Z: en adelante, utilizando la primera letra de unidad no utilizada que se encuentre". --La ​​ayuda para PUSHD en Windows 7
  3. ^ La disponibilidad de CMD.EXE y COMMAND.COM se puede confirmar invocándolos en cualquier versión de Windows (COMMAND.COM no en versiones de 64 bits; probablemente solo esté disponible en versiones de Windows 8 de 32 bits si se instala con la opción de admitir versiones de 16 bits). programas de bits).

Referencias

  1. ^ "Uso de archivos por lotes: secuencias de comandos; servicios de gestión". Technet.microsoft.com. 2005-01-21. Archivado desde el original el 28 de diciembre de 2011 . Consultado el 30 de noviembre de 2012 .
  2. ^ Henry-Stocker, Sandra (18 de julio de 2007). "Utilice sus habilidades de programación de Unix para escribir un archivo por lotes". itworld.com . Mundo de TI. Archivado desde el original el 14 de junio de 2018 . Consultado el 13 de junio de 2018 .
  3. ^ "Diferencia entre bat y cmd | WWoIT - El mundo de TI de Wayne". waynes-world-it.blogspot.fr . 2012-11-15. Archivado desde el original el 2 de marzo de 2014 . Consultado el 30 de noviembre de 2012 .
  4. ^ "extensión de archivo btm :: todo sobre el tipo de archivo .btm". Cryer.co.uk. Archivado desde el original el 11 de octubre de 2008 . Consultado el 30 de noviembre de 2012 .
  5. ^ Guía del usuario de Caldera DR-DOS 7.02, Caldera, Inc. , 1998 [1993, 1997], archivado desde el original el 5 de noviembre de 2016 , consultado el 10 de agosto de 2013
  6. ^ Hermanos, Hardin; Rawson, Tom ; Conn, Rex C .; Pablo, Matías R.; Tinte, Charles E.; Georgiev, Luchezar I. (27 de febrero de 2002). Ayuda en línea de 4DOS 8.00 .
  7. ^ ab ".NET Core Runtime: System.Diagnostics.Process.Unix". GitHub . Archivado desde el original el 29 de marzo de 2023 . Consultado el 11 de febrero de 2020 . Dos comillas dobles consecutivas dentro de una región inQuotes deberían dar como resultado una comilla doble literal (el analizador se deja en la región inQuotes). Este comportamiento no forma parte de la especificación del código:ParseArgumentsIntoList, pero es compatible con CRT y .NET Framework.
  8. ^ ab Deley, David. "Cómo se analizan los parámetros de la línea de comandos". Archivado desde el original el 8 de junio de 2020 . Consultado el 8 de junio de 2020 .
  9. ^ "Documentación del proceso secundario, sección Línea de comandos de Windows, NodeJS PR #29576". GitHub . Archivado desde el original el 21 de agosto de 2022 . Consultado el 11 de febrero de 2020 .
  10. ^ "Cómo hacer un retraso" Archivado el 20 de noviembre de 2011 en Wayback Machine , ericphelps.com
  11. ^ "Utilidades para DOS, enlace a WAIT.ZIP (archivo de WAIT.COM) y otros programas". Archivado desde el original el 13 de noviembre de 2011 . Consultado el 15 de noviembre de 2011 .
  12. ^ ab "Cmd.exe no admite nombres UNC como directorio actual". Archivado desde el original el 18 de mayo de 2015 . Consultado el 28 de abril de 2015 .
  13. ^ Chen, Raymond . "Esté atento a la página de códigos". Microsoft . Archivado desde el original el 17 de enero de 2012 . Consultado el 13 de diciembre de 2011 .
  14. ^ http://www.explorehacking.com/2011/01/batch-files-art-of-creating-viruses.html Archivado el 29 de octubre de 2013 en Wayback Machine [ URL desnuda ]
  15. ^ "Windows PowerShell: Unix llega a Windows". Geekswithblogs.net. Archivado desde el original el 14 de junio de 2012 . Consultado el 30 de noviembre de 2012 .

enlaces externos