Como posso configurar uma variável de matriz em um script em lotes do DOS? Eu gostaria de carregá-lo com uma lista de nomes de arquivos para processar. Eu realmente gostaria de manter isso o mais simples possível. Obrigado.
batch-file
shell-script
disk-operating-system
Jim Fell
fonte
fonte
Respostas:
Eu descobri:
Eu fiz algo assim há vários anos, então demorou um pouco para descobrir. (btw, eu odeio reinventar a roda.) Agora que foi publicado aqui, espero que outros o achem útil também.
fonte
()
sintaxe.FILE_LIST[0]
.Sim, você pode fazer matrizes em lote. Enquanto eles não são exatamente como matrizes em C ou VB, você pode fazê-lo:
fonte
No blog de Jakash3, matrizes em lote descreve como emular matrizes no prompt de comando.
Um arquivo em lotes denominado array.bat está incluído no artigo, que contém uma biblioteca de funções usadas para manipular matrizes. Você precisará selecionar o texto no artigo e colá-lo dentro do arquivo bat.
Por exemplo, o seguinte script de teste:
gera a seguinte saída:
fonte
Isso preenche uma matriz e a imprime
Você pode usar nomes1 nomes2 nomes3, em vez de nomes [1] nomes [2] nomes [3] escrevendo nomes! I! em vez de nomes [! i!]. Produz a matriz gerando nomes de variáveis. Não há uma estrutura de matriz no lote. Mas é tão elegante quanto qualquer estrutura de matriz, e preencher ou imprimir se parece exatamente com a forma como alguém preencheria ou imprimiria uma matriz em uma linguagem adequada (que na verdade possui a estrutura da matriz!)
a saída-
Alguma explicação
O
setlocal enabledelayedexpansion enableextensions
com o! Var! em vez de% var% é necessário para evitar comportamentos estranhos, para que as variáveis se comportem corretamente quando dentro de um FOR ou um IF. É uma raridade com arquivos em lote. Vejaset /?
onde isso é mencionado mais adiante.É isso que preenche a matriz e é bastante direto para quem sabe sobre matrizes. Você também pode fazer,
names[0]=bob
names[1]=tom
names[2]=joseph
embora uma das belezas de uma matriz seja a capacidade de preencher uma matriz com um loop, o que eu fiz aqui.Isso exibe a matriz. %% f se você repetir, verá de 0 ao último índice da matriz, nas etapas de 1. assim, imprimirá os nomes [0] names [1] names [2]
fonte
Para o que você deseja fazer, que tal usar uma variável de entrada para cada nome de arquivo, que você pode selecionar com as variáveis% 1% 2 etc., por exemplo: mybat.bat file1.nam file2.nam etc.
Em seguida, você pode usar essas variáveis em um loop, mas só precisa usar% 1 como o parâmetro principal, pois você pode usar SHIFT para trazer as outras variáveis para a% 1 'posição', fazendo um teste para null (final de variáveis) com algo como se "X% 1" == "X"
por exemplo:
fonte
Se você salvar a lista de arquivos no arquivo filelist.txt, poderá
FOR
ler e processar cada linha do arquivo, comopara imprimir cada linha de um arquivo (até o primeiro "|" na linha. Se você não especificar seu próprio delimitador, serão utilizados espaço e guia; portanto, a menos que seus caminhos não tenham espaços, é necessário especificar um caractere que não aparecerá no arquivo para obter linhas completas).
fonte
Em um dos seus comentários para uma resposta, você diz:
Acredito que o que você está procurando é um Makefile e, possivelmente, o cygwin para lhe dar uma casca decente (bash ou qualquer que seja o seu sabor).
fonte
Substitua as strings e a letra no texto.
Tente o loop expandindo o texto para um corpo for e substituindo var por var. Arraste e solte o arquivo de texto para que% 1 seja a entrada do usuário, chamando o comando set.
fonte
Algo assim em um arquivo em lotes? Selecione um arquivo em uma pasta. << é comentário, nenhum código
fonte
Você não pode realmente fazer uma matriz no prompt de comando (e também não é realmente DOS, a menos que esteja executando o Windows 3.1). No entanto, você pode executar o processamento baseado em conjunto com o comando FOR.
Para criar a lista de arquivos a serem processados, você pode criar manualmente um arquivo de texto a ser processado ou usar o
dir /b <mask>
comando dentro do loop FOR.Algo que aprendi da maneira mais difícil com FOR - você precisa usar uma variável SINGLE CHARACTER como cursor!
fonte
Confira a documentação da Microsoft no comando FOR batch . Você pode usar FOR para iterar sobre um conjunto de diretórios, arquivos em um diretório ou arquivos em um diretório e todos os seus subdiretórios.
Por padrão, FOR manipula conjunto ou apenas arquivos:
Ou, para recursivo:
ou, apenas para diretórios:
fonte
este é um pequeno arquivo de depuração que fiz um tempo para testar a matriz do meu jogo de reboque tic tac em BATCH / CMD. ele pode ler e gravar de e para uma matriz sem ser grande e complicada no código.
usá-lo é simples:
Gravando em uma matriz
Lendo de uma matriz
Código:
fonte