Estou tentando criar um arquivo zip a partir de um script em lote. Eu preciso que ele seja nomeado como archive_.zip
Infelizmente, isso não funciona em sistemas com a data formatada como y / m / d devido às barras:
zip some_options "archive_%DATE%.zip"
A %DATE%
variável se expande para algo como
Mon 09/28/2009
Eu tenho acesso ao pacote gnuwin32, então eu poderia usar, por exemplo, sed
para substituir espaços e barras por traços. O problema é: como eu usaria a saída de sed
para criar o nome do arquivo do arquivo zip?
No Unix (bash), pode-se usar aspas para avaliar um comando no local e usar sua saída em outro comando, algo como:
zip [...] archive_`echo %DATE% | sed -e s/.../.../`.zip
Existe algo semelhante disponível no Windows?
Ou talvez haja uma maneira de definir uma variável para o valor retornado sed
e usá-lo para construir o nome do arquivo?
fonte
%date:~-10,2%-%date:~-7,2%-%date:~-4,4%
:!Eu sempre uso:
Em seguida, o CDate será Sat02182012. Se você quiser torná-lo mais classificável, defina CDate como %% d - %% b - %% c para que seja 18/02/2012
Para tornar a pasta / arquivo de data e hora amigáveis.
fonte
Eu postei uma resposta para uma pergunta muito semelhante aqui . A divisão da data nos campos é feita em 1 linha, em vez de várias linhas na resposta do harrymc.
A parte interessante é:
E o aviso ainda é relevante:
fonte
o
/=-
substitui o/
com um sinal de menos.fonte
Esse pedaço horrível de código deve fazer algo como o que você deseja
Se você alterar o nome do arquivo adequadamente.
fonte
echo %date:~6,4%%date:~3,2%%date:~0,2%
retorna9-289-20
na minha máquina desde que eu tenho a data definida para usar aaaa-MM-dd (hoje é 28/09/2009).Desde a sua pergunta é marcado como Windows, eu encontrei esta solução que obras nos bons velhos .bat:
"o Windows arquivo de lote (.bat) para obter a data atual em formato MMDDAAAA" ,
e, provavelmente, pode ser adaptado ao seu caso:
isso não faz nada, mas configura a variável% date para a data de hoje no formato MMDDYYYY, para que possa ser chamada posteriormente no script.
Editar
Encontrou uma sintaxe melhor. Dado que minha data é hoje "Seg 28/09/2009":
definir dia =% Data: ~ 0,2%
definir mês =% Data: ~ 7,2%
definir ano =% Data: ~ 10,4%
fonte
versão pura do cmd.exe em combinação com o gnuwin32-'date ':
fonte
que tal usar cscript + vbasic:
chame-o via
fonte
Para / f "tokens = 1,2,3,4,5 delimitações = /." %% a em ('data / T') configure CDate = %% d - %% b - %% c
@echo data =% CDate%
Isso ocorre no ano-mês-dia que é mais comum nos dias de hoje
fonte
Qualquer solução que use uma
%DATE%
ou a saída dedate /t
provavelmente será interrompida se o usuário tiver modificado suas configurações regionais. Por exemplo, eu configurei meu formato "data curta" para"yyyy-MM-dd"
, então eu tenho%DATE%
igual a"2012-02-18"
, edate /t
produz a mesma saída. (Isso é para o Windows 7; presumo que seja o mesmo para versões anteriores do Windows.)Crie um arquivo em lotes e execute-o.
Como você tem o
date
comando GNU disponível, você pode fazer algo assim:tmp.bat
conterá algo como:Observe que isso cria
tmp.bat
no diretório atual, o que pode ser um problema; pode ser melhor criar%TEMP%\tmp.bat
. Também não removi o arquivo depois; isso é fácil de fazer.date +FORMAT
permite especificar o formato de saída dodate
comando, semelhante a umaprintf
string de formato; consulte a documentação da data do coreutils para obter detalhes. O formato pode incluir texto arbitrário, portanto, neste caso, você nem precisa usarsed
.fonte
Eu acho que, se você juntar as partes de todos, conseguirá algo que funcione para você. Este é um sistema Windows 2003 para fornecer uma captura instantânea dos processos em execução em resposta a um gatilho do monitor de desempenho:
O arquivo de saída é nomeado em uma sequência sem delimitadores.
fonte
Deveria trabalhar.
Por outro lado - talvez você tenha um
date
comando disponível (não conheço o Windows). Se sim, faça:fonte
não tenho certeza se combina com você, mas meu código é
fonte