Como posso alterar o carimbo de data e hora em um arquivo? [duplicado]

74

Possível duplicado:
Como modificar o registro de data e hora em uma dll ou exe?
Windows equivalente ao comando Linux 'touch'?

Como definir o carimbo de data e hora de um arquivo pela linha de comando para uma data específica?

Minha situação específica é o Windows 7.

Joseph Hansen
fonte
11
Provavelmente, você deve esclarecer sua pergunta e declarar que deseja escolher o novo carimbo de data / hora. As duas respostas atuais assumem que você está procurando uma porta Windows do comando Unix touchque define o carimbo de data e hora de um arquivo para o horário atual.
William Jackson
Eu olhei através Sysinternals, e tenho certeza que eles não têm um utilitário para isso. Você deve experimentar os programas vinculados a partir de superuser.com/questions/135901/…
William Jackson
@William Jackson Mudou, obrigado por isso. Além disso, se realmente fosse uma porta do comando Unix touch, eu poderia especificar a data. pt.wikipedia.org/wiki/Touch_(Unix) . Algo está errado com a vinculação automática, certifique-se de obter os dois parênteses.
Joseph Hansen
11
Eu ... não posso acreditar que nunca me preocupei em ler man touch. Você me ensinou algo novo.
William Jackson
Duplicado do Windows equivalente ao comando Linux 'touch'?
29315 Scott Scott

Respostas:

92

Devido à resposta de William Jackson , encontrei uma pergunta semelhante no Stack Overflow .

A resposta aceita declara usar o Powershell e estes comandos:

$(Get-Item ).creationtime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")
$(Get-Item ).lastaccesstime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")
$(Get-Item ).lastwritetime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")

Editar

Dois exemplos:

(Este é dos comentários :) Defina a hora do último acesso de um arquivo aaa.csvpara a hora atual:

$(Get-Item aaa.csv).lastwritetime=$(Get-Date)

Defina a hora de criação de um arquivo foo.txtpara 24 de novembro de 2015 às 6:00:

$(Get-Item foo.txt).creationtime=$(Get-Date "11/24/2015 06:00 am")
Joseph Hansen
fonte
8
Uma ligeira variação que é recursiva e um pouco mais curta, embora menos legível: "gci -rec |% {$ _. LastWriteTime = ($ _. LastAccessTime = ($ _. CreationAcime = ($ _. CreationTime = (get-date" 2011-09-14T07: 10:00 ")))}"
codybartfast 14/09/11
9
Para pessoas que não sabem muito sobre o PowerShell, é necessário colocar o nome do arquivo após Get-Item. Você também pode omitir a sequência após Get-Date para definir o atributo para a data / hora atual, como o comportamento padrão do comando touch. Finalmente, você pode passar esse código como argumento para o comando powershell para executá-lo a partir de um arquivo em lotes existente. Exemplo:powershell $(Get-Item aaa.csv).lastwritetime=$(Get-Date)
sjbotha 4/13/13
11
E se eu quiser fazer isso para todos os arquivos em um diretório?
CodyBugstein
Procure por "PowerShell every file". Você pode encontrar perguntas como estas: stackoverflow.com/q/16804265/756329 e stackoverflow.com/q/181036/756329
Joseph Hansen
4
O formato da data e hora não é o comando, mas o sistema inteiro (no meu sistema, foi dd / mm / aaaa).
Martin Argerami
40

Veja as respostas para esta pergunta .

Especificamente, isso pode ser feito nativamente com:

copy /b filename.ext +,,

Isso definirá o registro de data e hora para a hora atual.

A documentação para o copycomando está no TechNet .

As vírgulas indicam a omissão do parâmetro Destination .

William Jackson
fonte
2
Você pode explicar como isso está funcionando? Qual é o +,,? Como sei em que data está sendo definido?
Joseph Hansen
11
@josmh Verifique o link da documentação para obter detalhes. O registro de data e hora é definido como o horário atual quando você executa o comando. Você está sugerindo que deseja alterar o carimbo de data e hora para um horário arbitrário de sua escolha?
William Jackson
7
Não estou vendo como isso me ajuda a escolher uma nova data para o arquivo.
31711 Joseph
O principal problema disso é quando o arquivo não está no diretório atual ... ele copiará o arquivo para o diretório atual em vez de "tocá-lo" no local.
Kasey Speakman
11
@KaseySpeakman - este comando depende de estar no diretório atual. Use pushd FILEDIR, antes do comando e popddepois #
Tydaeus
25

Nirsoft para o resgate: experimente a ferramenta freeware nircmd . É um monte de ferramentas úteis em um pequeno programa de linha de comando. Um dos comandos permite especificar um ou ambos os horários criado e modificado , como este:

setfiletime do nircmd.exe "c: \ temp \ myfile.txt" "24-06-2003 17:57:11" "22-11-2005 10:21:56"

boot13
fonte
3
Além disso, se você deseja transferir o tempo de um arquivo para outro, clonar o arquivo de tempo final do arquivo funciona melhor!
JasonXA
Fora da linha de comando, mas mais conveniente para edição em massa: BulkFileChanger da Nirsoft
SaAtomic
15

Usando Cygwin, para definir o registro de data e hora do test.txt para 31 de janeiro de 2000, em 00: 01.00:

touch -t 200001310001.00 test.txt
Joseph Hansen
fonte
Isso volta com erro de formato de data inválido.
Ziggy 31/05
@ziggy ter certeza de obter todos os zeros ...
Joseph Hansen
2
Isso funcionou perfeitamente para eu touch -t 201608221400 filenameconfigurá-lo para 22.08.2016 14:00:00.
Sebastianh
1

Confira a seguinte página da Web: http://www.stevemiller.net/apps/

A caixa de ferramentas do console do Win32 contém um utilitário chamado 'touch' que permite modificar os horários de um ou mais arquivos. Eu acredito que só funciona com os horários dos EUA, no entanto.

Justin Pearce
fonte