Data atual no nome do arquivo

15

Eu agendei um script de backup que faz com que o banco de dados seja despejado. Como posso adicionar o carimbo de data / hora ao nome do arquivo?

Eu estou falando sobre Windows e CMD.

Bogdan Gusiev
fonte

Respostas:

21

No prompt de comando e nos arquivos em lote, você pode usar %date%e %time%para retornar a data e a hora, respectivamente. A data funciona bem, mas o valor de hora retornado contém dois pontos, que são ilegais para uso em nomes de arquivos, mas existe uma maneira de removê-los.

Use algo como:

COPY file.txt file_%time:~0,2%%time:~3,2%%time:~6,2%_%date:~-10,2%%date:~-7,2%%date:~-4,4%.txt

Isso produzirá um nome de arquivo como file_172215_01062009.txt

Atualização: Os comentários abaixo têm reviravoltas interessantes nesse comando, além de alguns problemas em potencial que você pode evitar.

aalaap
fonte
3
Ótima pequena dica. BTW, se você fizer o contrário, ou seja: "file_20090601_172215", você verá os arquivos na ordem correta em uma lista alfabética.
5
Você também pode usar% time :: =% para remover os dois pontos.
User1686 #
2
Eu diria que a subseqüência de substring da data seria interrompida assim que a localidade do sistema diferisse de quando o script foi testado? Ele poderia até mesmo trabalho para o usuário teste e quebrar como o corredor roteiro por causa de diferentes formatos de exibição data definida ...
Oskar Duveborn
3
Cuidado com as horas 0 - 9! O CMD define o primeiro caractere da hora como <SPACE>, em vez de 0. O comando COPY acima terá problemas se você não colocar o nome do arquivo de destino entre aspas.
Evan Anderson
2
Observe que %DATE%e %TIME%reconhece a localidade! Isso significa que em uma máquina Europeia, você começa DD.MM.YYYY. Arrgh.
Pekka
14

Use as variáveis ​​de ambiente %DATE%e / ou %TIME, substituindo opcionalmente os caracteres que não são permitidos nos nomes de arquivos, usando %name:from=to%( %TIME::=%removeria todos os dois pontos).

teoria »eco% date%
01/06/2009

teoria »eco% tempo%
16: 30: 41,46

teoria »eco% time :: =%
163052,17

teoria »eco% time :: =,%
16,30,58,68

teoria »backup de eco-% date% -% time :: = -%. zip
backup-2009-06-01-16-31-18,82.zip
user1686
fonte
1
uau, nunca se sabe sobre o: x = y truque. isso é muito legal.
Eugene Katz
1
+1 no truque: =, estou neste jogo desde o MS-Dos 1 e é a primeira vez que o vejo. Seria ainda melhor se você pudesse alterar vários caracteres também !! :-)
shawty
Bem, ele foi adicionado apenas ao Cmd.exe na série Windows NT ... E se você deseja executar várias alterações, basta ter uma cadeia de set tmp=%tmp:x=y%etc.
#
O conteúdo de% DATE% (número de arquivos, conteúdo e pedidos) é específico da localidade.
symcbean
4

A única maneira confiável de obter a data apropriada seja qual for a configuração regional, é a solução do foxidrive @ /programming/11037831/filename-timestamp-in-windows-cmd-batch-script

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%"
set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"
pause
Eric Ouellet
fonte
1

Use a variável% DATE% no nome do arquivo.

Também existe uma variável% TIME%, mas ela contém caracteres não permitidos no nome de um arquivo.

Aqui está um exemplo de gravação de uma linha de texto em um novo arquivo, onde o arquivo criado possui uma data e hora em seu nome.

echo "testfile" >> backup-%DATE%.txt
Frode Lillerud
fonte