¿Cómo puedo configurar una variable de matriz en un script por lotes de DOS? Me gustaría cargarlo con una lista de nombres de archivo para procesar. Realmente me gustaría mantener esto lo más simple posible. Gracias.
33
¿Cómo puedo configurar una variable de matriz en un script por lotes de DOS? Me gustaría cargarlo con una lista de nombres de archivo para procesar. Realmente me gustaría mantener esto lo más simple posible. Gracias.
Respuestas:
Me lo imaginé:
Hice algo como esto hace varios años, así que solo me costó un poco descubrirlo. (por cierto, odio reinventar la rueda). Ahora que está publicado aquí, espero que otros también lo encuentren útil.
fuente
()
sintaxis.FILE_LIST[0]
.Sí, puedes hacer matrices en lote. Si bien no son exactamente como matrices en C o VB, PUEDES hacerlo:
fuente
Desde el blog de Jakash3, Arrays in Batch describe cómo emular arrays en el símbolo del sistema.
Un archivo por lotes llamado array.bat se incluye en el artículo, que contiene una biblioteca de funciones utilizadas para manejar matrices. Deberá seleccionar el texto en el artículo y pegarlo dentro del archivo bat.
Por ejemplo, el siguiente script de prueba:
genera el siguiente resultado:
fuente
Esto llena una matriz y la imprime
¡Puede usar nombres1 nombres2 nombres3, en lugar de nombres [1] nombres [2] nombres [3] escribiendo nombres! I! en lugar de nombres [! i!]. Produce la matriz generando nombres de variables. No hay una estructura de matriz en lote. Pero es tan ordenado como cualquier estructura de matriz, y rellenar o imprimir se ve exactamente como se llenaría o imprimiría una matriz en un lenguaje adecuado (¡que en realidad tiene la estructura de matriz!)
La salida-
Alguna explicación
El
setlocal enabledelayedexpansion enableextensions
con el! Var! en lugar de% var% es necesario para evitar un comportamiento extraño, de modo que las variables se comporten correctamente cuando están dentro de un FOR o un IF. Es una rareza con los archivos por lotes. Veaset /?
dónde se menciona más adelante.Esto es lo que puebla la matriz, y es bastante sencillo para cualquiera que sepa sobre matrices. También podría hacerlo,
names[0]=bob
names[1]=tom
names[2]=joseph
aunque una de las bellezas de una matriz es la capacidad de llenar una matriz con un bucle, que es lo que he hecho aquí.Esto muestra la matriz. %% f si lo repite, verá que irá de 0 al último índice de la matriz, en los pasos de 1. así que imprimirá nombres [0] nombres [1] nombres [2]
fuente
Para lo que desea hacer, ¿qué tal usar una variable de entrada para cada nombre de archivo, que puede elegir con las variables% 1% 2 etc., por ejemplo: mybat.bat file1.nam file2.nam, etc.
Luego puede usar estas variables en un bucle, pero solo necesita usar% 1 como parámetro principal, ya que puede usar SHIFT para llevar las otras variables a la 'posición'% 1, con una prueba de nulo (final de variables) con algo como SI "X% 1" == "X"
p.ej:
fuente
Si guarda la lista de archivos en filelist.txt, puede
FOR
leer y procesar cada línea del archivo, comopara imprimir cada línea de un archivo (hasta el primer "|" en la línea. Si no especifica su propio delimitador, se utilizarán espacios y tabulaciones, por lo que a menos que sus rutas no tengan espacios, debe especificar un carácter que no aparecerá en el archivo para obtener líneas completas).
fuente
En uno de sus comentarios a una respuesta, usted dice:
Creo que lo que está buscando es un Makefile, y posiblemente cygwin para darle un caparazón decente (bash, o cualquier sabor que tenga).
fuente
Reemplazar cadenas y letras en el texto.
Pruebe bucle expandiendo el texto a un cuerpo for y reemplazando var con var. Arrastre y suelte el archivo de texto para que% 1 sea introducido por el usuario invocando el comando set.
fuente
¿Algo así en un archivo por lotes? Seleccione un archivo en una carpeta. << es comentario, sin código
fuente
Realmente no puede hacer una matriz en el símbolo del sistema (y tampoco es realmente DOS a menos que esté ejecutando Windows 3.1). Sin embargo, puede hacer un procesamiento basado en conjuntos con el comando FOR.
Para crear la lista de archivos para procesar, puede crear manualmente un archivo de texto para procesar, o usar el
dir /b <mask>
comando dentro del bucle FOR.Algo que aprendí por las malas con FOR: ¡necesitas usar una variable de CARÁCTER SIMPLE como cursor!
fuente
Consulte la documentación de Microsoft en el comando por lotes FOR . Puede usar FOR para iterar sobre un conjunto de directorios, archivos en un directorio o archivos en un directorio y todos sus subdirectorios.
Por defecto FOR maneja conjuntos o solo archivos:
O, para recursivo:
o, solo para directorios:
fuente
Este es un pequeño archivo de depuración que hice un tiempo para probar la matriz de mi juego de tic tac tow en BATCH / CMD. puede leer y escribir desde y hacia una matriz sin llegar a ser grande y complicado en el código.
usarlo es simple:
Escribir en una matriz
Leer desde una matriz
Código:
fuente