2009-08-01 19 views
7

Estoy generando un archivo por lotes de Windows que puede llegar a ser bastante grande, digamos unos megabytes. Busqué límites posibles con respecto al tamaño máximo de archivo y la longitud máxima de una línea en un archivo por lotes, pero no pude encontrar nada. ¿Alguna experiencia práctica?Límites de tamaño de línea y archivo para archivos por lotes de Windows

+0

Sin entrar en lo que exactamente está planeando escribir en ese archivo por lotes, me parece que si necesita escribir unos pocos megabytes, está haciendo algo mal. Los megabytes de lote no me parecen un buen diseño. –

+0

tienes razón. es una solución rápida y sucia, pero es la forma más rápida de hacerlo. – zedoo

Respuesta

8

Creo que el tamaño del archivo puede ser de hasta 2 GB, tal vez incluso más. Es un lenguaje interpretado, por lo que si se hace correctamente, el límite del tamaño del archivo debe ser el límite del sistema de archivos. Nunca tuve ningún error con los archivos por lotes que son demasiado grandes, y algunos de los que creé tenían varios MB de tamaño.

Debe haber un límite de longitud de línea, pero debería ser más de 256. Esto puede probarse fácilmente, simplemente haga un "conjunto A = 123456789012 ... endofline", después de eso "echo% A%", y Verás qué tan lejos puedes llegar.

Funciona para mí con líneas muy largas (alrededor de 4K), pero en 8K echo aparece un mensaje, "Línea demasiado larga", por lo que 8192 bytes debería ser un límite.

Ahora probé también el tamaño del archivo, probado con "echo off", miles de líneas de ajuste, después de ese "eco final", y funcionó para un archivo de 11 MB (aunque tardó unos segundos en terminar :) - no límite a la vista aquí.

También trabajaron 110 MB. ¿Es suficiente? ;)

+0

agradable. gracias por probar esto para mí :-) 8k suena mucho, así que espero que esto sea suficiente. De lo contrario, tal vez podría dividir líneas con este pequeño sombrero ^? – zedoo

+2

No, solo probado, también. 8K parece ser un límite difícil, incluso con división. – schnaader

+3

También tenga en cuenta que esto es para las líneas finales (con las variables reemplazadas), por lo que echo% a %% a% fallará si% a% es una cadena de más de 4K! – schnaader

2

Algunas ideas, no necesariamente se excluyen mutuamente:

  • Cambiar a PowerShell.
  • Cambie a una aplicación basada en datos, para que todo el material variable se guarde en un archivo de datos (CSV, texto, lo que sea), y como resultado puede tener una secuencia de comandos pequeña y repetitiva que abre el archivo de datos y opera .
0

Debe funcionar al menos hasta 2 GB. Las líneas se leen directamente desde el archivo BAT en el disco (no hay almacenamiento en caché involucrado). Hago esta declaración debido a lo siguiente:

¡De hecho, puede editar un archivo BAT mientras se está ejecutando! Y funcionará a pesar de que un editor de texto puede cambiar el nombre de la versión original y guardar la nueva versión en una nueva ubicación en el disco . Siempre que tenga cuidado de no insertar texto arriba del el comando que se está ejecutando actualmente. Las líneas pueden ser cambiadas/insertadas/eliminadas debajo del comando actualmente en ejecución y las nuevas líneas serán las que se ejecutarán. Tengo a menudo hecho esto con archivos BAT que contienen una larga lista de comandos wget, cada uno de los cuales toma decenas de minutos en ejecutarse.

2

Una sola línea no debe superar los 8192 caracteres, incluso después de la expansión de %var% o !var! expresiones, más tienes un error.

No hay límite (conocido) para el archivo en sí.

2

La longitud máxima de cualquier línea de comando (o variable) dentro de CMD es 8191 characters.

Cuestiones relacionadas