Tenho um arquivo em lote e desejo incluir um arquivo externo que contém algumas variáveis (digamos, variáveis de configuração). É possível?
batch-file
Pablo
fonte
fonte
Respostas:
Nota: Estou assumindo os arquivos em lote do Windows, já que a maioria das pessoas parece não estar ciente de que existem diferenças significativas e simplesmente chamam tudo com texto cinza em fundo preto do DOS. No entanto, a primeira variante deve funcionar no DOS também.
Configuração executável
A maneira mais fácil de fazer isso é simplesmente colocar as variáveis em um arquivo em lote, cada uma com sua própria
set
instrução:e em seu lote principal:
Claro, isso também permite que variáveis sejam criadas condicionalmente ou dependendo de aspectos do sistema, portanto, é muito versátil. No entanto, um código arbitrário pode ser executado lá e, se houver um erro de sintaxe, seu lote principal também será encerrado. No mundo UNIX, isso parece ser bastante comum, especialmente para shells. E se você pensar sobre isso,
autoexec.bat
nada mais é.Pares de chave / valor
Outra forma seria algum tipo de
var=value
pares no arquivo de configuração:Você pode então usar o seguinte snippet para carregá-los:
Isso utiliza um truque semelhante ao anterior, ou seja, apenas usando
set
em cada linha. As citações estão lá para escapar coisas como<
,>
,&
,|
. No entanto, eles próprios quebram quando as aspas são usadas na entrada. Além disso, você sempre precisa ter cuidado ao processar dados em variáveis armazenadas com esses caracteres.Geralmente, o escape automático de entrada arbitrária para não causar dores de cabeça ou problemas em arquivos em lote parece praticamente impossível para mim. Pelo menos eu não encontrei uma maneira de fazer isso ainda. Claro, com a primeira solução, você está transferindo essa responsabilidade para quem está escrevendo o arquivo de configuração.
fonte
Se o arquivo de configuração externa também for um arquivo em lote válido, você pode apenas usar:
dentro do seu script. Tente criar o seguinte a.bat:
e b.bat:
Executar a.bat deve gerar saída:
fonte
call
, que é btw síncrono), ele diz "o processo não pode acessar o arquivo porque está sendo usado" e não pode ser chamado.O lote usa os colchetes menor que e maior que como canais de entrada e saída.
Usar apenas um colchete de saída como acima irá sobrescrever todas as informações naquele arquivo.
Usar o colchete direito duplo adicionará a próxima linha ao arquivo.
Isso executará os parâmetros com base nas linhas do arquivo. Neste caso, estamos usando duas linhas que serão digitadas com "echo". O colchete esquerdo tocando o colchete direito significa que as informações desse arquivo serão canalizadas para essas linhas.
Eu compilei um arquivo de leitura / gravação somente de exemplo. Abaixo está o arquivo dividido em seções para explicar o que cada parte faz.
SRU pode ser qualquer coisa neste exemplo. Na verdade, estamos configurando para evitar um travamento se você pressionar Enter muito rápido.
Agora, precisamos gravar as variáveis em um arquivo.
Eu uso .cdb como uma forma abreviada de "Banco de dados de comandos". Você pode usar qualquer extensão. A próxima seção é testar o código do zero. Não queremos usar as variáveis definidas que foram executadas no início do arquivo, na verdade queremos que elas sejam carregadas DE settings.cdb que acabamos de escrever.
Portanto, apenas canalizamos as duas primeiras linhas de informações que você escreveu no início do arquivo (que você tem a opção de pular a configuração das linhas para verificar se está funcionando) para definir as variáveis de entrada e entrada2.
Isso exibe as informações que foram definidas enquanto settings.cdb foi colocado entre parênteses. Como um motivador extra de bom trabalho, pressionar enter e definir os valores padrão que definimos anteriormente como "1" retornará uma mensagem de bom trabalho. Usar os tubos de suporte é para os dois lados e é muito mais fácil do que definir as coisas "PARA". :)
fonte
Então você só precisa fazer isso certo ?:
fonte
Resultado:
$ RunCount = 1
$ RunCount = 2
$ RunCount = 3
A técnica descrita acima também pode ser usada para compartilhar variáveis entre vários arquivos em lote.
Fonte: http://www.incodesystems.com/products/batchfi1.htm
fonte
Assunto meio antigo, mas eu tive a mesma pergunta alguns dias atrás e eu tive outra ideia (talvez alguém ainda ache útil)
Por exemplo, você pode fazer um config.bat com diferentes assuntos (família, tamanho, cor, animais) e aplicá-los individualmente em qualquer ordem que você quiser em seus scripts de lote:
Depois disso, você pode usá-lo em qualquer lugar chamando totalmente com 'call config.bat all' ou chamando apenas partes dele (veja o exemplo abaixo) A ideia aqui é que às vezes é mais útil quando você tem a opção de não chamar tudo em uma vez. Algumas variáveis talvez você não queira que sejam chamadas ainda, para que possa chamá-las mais tarde.
Exemplo test.bat
Espero que ajude a maneira como outros me ajudam aqui com suas respostas.
Uma versão curta do acima:
config.bat
test.bat
Dia bom.
fonte
Não vamos esquecer os bons e velhos parâmetros. Ao iniciar seu arquivo * .bat ou * .cmd, você pode adicionar até nove parâmetros após o nome do arquivo de comando:
Script de exemplo
O myscript.bat pode ser algo assim:
Saída de exemplo
fonte
Ao tentar usar o método com configuração executável, percebi que pode funcionar ou NÃO, dependendo de onde a chamada está localizada no script:
chamar config.cmd
Sei que não faz sentido, mas para mim é um fato. Quando "call config.cmd" está localizado na parte superior do script, ele funciona, mas não funciona mais adiante no script.
Por não funcionar, quero dizer que a variável não foi definida no script de chamada.
Muito, muito estranho !!!!
fonte