Linha de comando do Windows - Substitua vários caracteres em uma única string

4

Peço desculpas se o título da pergunta for um pouco confuso, mas queria mantê-lo curto.

Basicamente, o que eu quero fazer é pegar o formato de data do sistema (% DATE%) e substituir os caracteres que seriam ruins no comando ou ilegais nos nomes dos arquivos; por exemplo, espaços e barras.

O ambiente em que estou fazendo isso é limitado, no entanto. Isso está sendo executado por meio de um serviço que executa uma única linha de comandos na máquina do cliente. Isso significa que não posso usar variáveis (que eu saiba) para fazer isso em várias etapas, pois tudo que tentei não consegue ver uma variável criada na mesma linha (ao usar & e & & comandos juntos). Os arquivos em lote também estão praticamente fora de questão, já que pode ser difícil conseguir que alguns de nossos clientes coloquem um arquivo em lote no sistema deles.

Neste momento, tenho o comando configurado da seguinte forma:

MOVE C:\folder\file.csv C:\archive\^"file%DATE:/=-%.csv^"

Eu queria saber se havia alguma maneira de ter várias substituições de caracteres na parte% DATE: / = -%.

Atualmente, as cotações estão corrigindo problemas com espaços no formato e estou substituindo barras por traços. Espero que isso seja o suficiente para corrigir qualquer problema, pois não sei por que eles teriam outros caracteres ilegais em seu formato de data, mas imaginei pedir para estar preparado para o caso de termos outro problema o futuro. Sinta-se à vontade para pedir esclarecimentos sobre qualquer coisa que possa ser confusa.

    
por Dominator_101 11.09.2012 / 18:14

1 resposta

1

Primeiro, as datas são inerentemente difíceis em cmd 'puro', já que a saída depende do formato de data abreviada. Isso significa que você pode ter a saída como dd/mm/yyyy ; %código%; yyyy-dd-mm etc. Normalmente eu aconselho usar o powershell ou o wmic, mas eles provavelmente estão fora de dúvida no seu caso, então dois truques possíveis que podem ajudá-lo:
a) para definir e ler a variável na mesma linha, use a chamada * - observe que mm dd yy deve ser desfeito antes de executar para que isso funcione corretamente:
a
b) Para remover um dos vários separadores possíveis (mas apenas os únicos, e você deve saber quantos serão), você pode usar set "a=10" & call echo %a% :% for /f

* (nota: se você tiver controle sobre como o cmd é iniciado, usar for /f "tokens=1-3 delims=-/" %F in ("%DATE%") do echo %F%G%H ativa a chamada expansão atrasada, para que você possa usar cmd /v:on )

    
por 11.09.2012 / 20:07