Tengo un archivo por lotes y quiero incluir un archivo externo que contenga algunas variables (por ejemplo, variables de configuración). ¿Es posible?
batch-file
Pablo
fuente
fuente
Respuestas:
Nota: Asumo archivos por lotes de Windows, ya que la mayoría de la gente parece no darse cuenta de que existen diferencias significativas y simplemente llama ciegamente a todo con texto gris sobre fondo negro DOS. Sin embargo, la primera variante también debería funcionar en DOS.
Configuración ejecutable
La forma más sencilla de hacer esto es simplemente poner las variables en un archivo por lotes, cada una con su propia
set
declaración:y en tu lote principal:
Por supuesto, eso también permite que las variables se creen condicionalmente o dependiendo de los aspectos del sistema, por lo que es bastante versátil. Sin embargo, el código arbitrario se puede ejecutar allí y si hay un error de sintaxis, su lote principal también se cerrará. En el mundo UNIX, esto parece ser bastante común, especialmente para los shells. Y si lo piensas,
autoexec.bat
es nada más.Pares clave / valor
Otra forma sería algún tipo de
var=value
pares en el archivo de configuración:A continuación, puede utilizar el siguiente fragmento para cargarlos:
Esto utiliza un truco similar al anterior, es decir, solo usar
set
en cada línea. Las citas están ahí para escapar cosas como<
,>
,&
,|
. Sin embargo, ellos mismos se romperán cuando se utilicen comillas en la entrada. Además, siempre debe tener cuidado al procesar datos en variables almacenadas con tales caracteres.En general, me parece bastante imposible escapar automáticamente de una entrada arbitraria para no causar dolores de cabeza o problemas en los archivos por lotes. Al menos todavía no encontré la manera de hacerlo. Por supuesto, con la primera solución le está pasando esa responsabilidad al que escribe el archivo de configuración.
fuente
Si el archivo de configuración externo también es un archivo por lotes válido, puede usar:
dentro de su guión. Intente crear el siguiente a.bat:
y b.bat:
Ejecutar a.bat debería generar una salida:
fuente
call
, que por cierto es síncrono), dice "el proceso no puede acceder al archivo porque está siendo usado" y no puede ser invocado.Batch utiliza los corchetes menor que y mayor que como conductos de entrada y salida.
Usar solo un corchete de salida como el anterior sobrescribirá toda la información en ese archivo.
El uso del corchete doble derecho agregará la siguiente línea al archivo.
Esto ejecutará los parámetros en función de las líneas del archivo. En este caso, estamos usando dos líneas que se escribirán usando "echo". El corchete izquierdo que toca el paréntesis derecho significa que la información de ese archivo se canalizará a esas líneas.
He compilado un archivo de lectura / escritura de solo ejemplo. A continuación se muestra el archivo dividido en secciones para explicar qué hace cada parte.
SRU puede ser cualquier cosa en este ejemplo. En realidad, lo estamos configurando para evitar un bloqueo si presiona Enter demasiado rápido.
Ahora, necesitamos escribir las variables en un archivo.
Utilizo .cdb como forma abreviada de "Base de datos de comandos". Puedes usar cualquier extensión. La siguiente sección es probar el código desde cero. No queremos usar las variables establecidas que se ejecutaron al principio del archivo, en realidad queremos que se carguen DESDE settings.cdb que acabamos de escribir.
Entonces, acabamos de canalizar las dos primeras líneas de información que escribió al principio del archivo (que tiene la opción de omitir la configuración de las líneas para verificar que esté funcionando) para configurar las variables de input y input2.
Esto muestra la información que se estableció mientras settings.cdb se canalizó entre paréntesis. Como motivador adicional para un buen trabajo, presionar Enter y establecer los valores predeterminados que establecimos anteriormente como "1" devolverá un mensaje de buen trabajo. Usar los tubos de soporte va en ambos sentidos, y es mucho más fácil que configurar el "FOR". :)
fuente
Entonces, ¿tienes que hacer esto bien ?:
fuente
Salida:
$ RunCount = 1
$ RunCount = 2
$ RunCount = 3
La técnica descrita anteriormente también se puede utilizar para compartir variables entre varios archivos por lotes.
Fuente: http://www.incodesystems.com/products/batchfi1.htm
fuente
Un tema un poco viejo, pero tuve la misma pregunta hace unos días y se me ocurrió otra idea (tal vez a alguien todavía le resulte útil)
Por ejemplo, puede hacer un config.bat con diferentes temas (familia, tamaño, color, animales) y aplicarlos individualmente en cualquier orden en cualquier lugar que desee en sus scripts por lotes:
Después de eso, puede usarlo en cualquier lugar llamando completamente con 'call config.bat all' o llamando solo a partes de él (vea el ejemplo a continuación) La idea aquí es que a veces es más útil cuando tiene la opción de no llamar a todo al una vez. Es posible que algunas variables no desee que se le llame todavía para poder llamarlas más tarde.
Ejemplo test.bat
Espero que ayude la forma en que otros me ayudan aquí con sus respuestas.
Una versión corta de lo anterior:
config.bat
test.bat
Buen día.
fuente
No olvidemos los buenos parámetros antiguos. Al iniciar su archivo * .bat o * .cmd, puede agregar hasta nueve parámetros después del nombre del archivo de comando:
Script de ejemplo
El myscript.bat podría ser algo como esto:
Salida de ejemplo
fuente
Al intentar usar el método con una configuración ejecutable, noté que puede funcionar o NO, dependiendo de dónde se encuentre la llamada en el script:
llamar config.cmd
Sé que no tiene ningún sentido, pero para mí es un hecho. Cuando "call config.cmd" se encuentra en la parte superior de la secuencia de comandos, funciona, pero si se encuentra más adelante en la secuencia de comandos, no funciona.
Por no funciona, me refiero a que las variables no están configuradas en el script de llamada.
Muy muy extraño !!!!
fuente