Como atualizar automaticamente a data da modificação da pasta no Windows

3

No Windows, existe uma maneira de atualizar automaticamente (ou com um script simples) a data de uma pasta com a data da última modificação de qualquer um de seus arquivos (recursiva)?

Notitze
fonte

Respostas:

4

Você pode fazer isso no PowerShell. Algo assim para atualizar a pasta atual com base nos arquivos que ela contém diretamente:

$lastModified = (dir . | ?{!$_.PSIsContainer} | sort LastWriteTime | select -last 1).LastWriteTime
$folder = get-item .
$folder.LastWriteTime = $lastModified

(Isso falhará se não houver arquivos na pasta ou se o usuário não tiver permissões adequadas.)

EDIT: verifique se apenas um arquivo (o último) foi encontrado para que o pipeline de classificação tenha um resultado singular.

Richard
fonte
no Win7, recebo o erro Exception setting "LastWriteTime": "Cannot convert null to type "System.DateTime"."ao executar isso. Tem a ver com a primeira linha, o .LastWriteTimesufixo está sendo resolvido como nulo. Removê-lo cria um valor para $lastmodified, mas não o que queremos.
26511 Matthew
resolvida a primeira linha, é necessário pegar o primeiro item da lista e não a própria lista:, $fileList = (dir . | ?{!$_.PSIsContainer} | sort LastWriteTime)seguida por $lastModified = $fileList[0].LastWriteTime. No entanto, ainda não funciona, definir o último horário de modificação diz, Exception setting "LastWriteTime": "The process cannot access the file 'D:\bugs' because it is being used by another process."mas durante toda a minha vida não consigo descobrir o que esse processo pode ser (e tentei muitas pastas diferentes.) Acho que o processo ofensivo é ele próprio!
26611 Mattt wilkie
@ Matt: corrigiu seu primeiro problema (esqueceu de devolver apenas um único item para obter a data). Por seu segundo: pode ser que o PSH esteja mantendo a pasta aberta, eu usaria Handlesou o Process Explorer (ambos os Sysinternals) para determinar o que a pasta está aberta.
27511 Richard
2

Acabei de fazer um teste simples - se você criar um arquivo vazio no diretório, a data da modificação da pasta será alterada para esse horário. Quando você exclui o arquivo, isso ainda conta como uma modificação, portanto permanece modificado naquele momento.

Para fazer isso recursivamente, você teria que criar um arquivo vazio em todas as pastas nas quais deseja alterar a data. Essa ainda é uma solução bastante simples se você estiver disposto a fazer uma programação simples.

Se você deseja alterar a data para algo diferente da hora atual, obviamente esta solução não funcionará.

Lyle Brown
fonte
1

Você pode usar o Bulk File Changer .

O BulkFileChanger é um pequeno utilitário que permite criar uma lista de arquivos a partir de várias pastas e, em seguida, executar alguma ação nelas - Modifique o tempo criado / modificado / acessado, altere o atributo do arquivo (Somente leitura, Oculto, Sistema), execute um executável com esses arquivos como parâmetro e copie / recorte e cole no Explorer.

texto alternativo

Mehper C. Palavuzlar
fonte
isso exigiria intervenção manual além da execução, é claro?
Notitze 01/06/10
1
+1 para destacar um utilitário útil que pode alterar as datas dos arquivos e pastas. -1 que ele não pode ser usado na forma requisitado (data pasta conjunto com base no conteúdo, de forma recursiva)
mate Wilkie
Na verdade, este é um bom programa de Nir Sofer, mas a data de modificação / criação da pasta só pode ser definida manualmente. Nir escreveu outro programa que faz isso com muito mais elegância. Veja minha resposta no FolderTimeUpdate .
chronometric
0

Não é bonito, mas funcional. Feito em bash / cygwin

==================
find -maxdepth 1 -type d | grep -v "^\.$" | while read D ; do
  cd "$D"
  F=`ls -1tr | tail -1`
  cd ..
  touch -r "$D/$F" "$D"
done
==================

Brian

bdp
fonte
0

Aqui está uma versão modificada da resposta de Richard. Também é o script do PowerShell. Em vez de definir o horário modificado do diretório atual , ele define o horário modificado de todos os subdiretórios de primeiro nível do diretório atual. Outra diferença é que parece recursivamente pela última vez modificada. Espero que seja útil para outra pessoa.

$parentPath = Get-Location
Get-ChildItem | where {$_.PsIsContainer} | foreach {
    cd -LiteralPath $_.FullName
    $files = dir -Recurse . | where {-Not $_.PsIsContainer}
    if ($files.Count -eq 0) {
        echo "note: $($_.Name) contains no files"
    } else {
        $_.LastWriteTime = ($files | sort LastWriteTime | select -last 1).LastWriteTime
    }
}
cd -LiteralPath $parentPath
jcai
fonte
0

Fazer nada! Missão cumprida!

A data da última modificação de uma pasta é sempre a do último arquivo modificado nela.


fonte
Se o último arquivo modificado tiver sido excluído / movido, a data não voltará; portanto, em alguns casos, isso não funcionará se você quiser que a data do último arquivo modificado esteja na pasta.
Satibel
O OP disse "atualização" e não "pós-data".
Também não funciona recursivamente pelo menos no Windows 7 com a estrutura \ 1 \ 2 \ 3.exe 1 e 2 são de 2016 Eu colei o 3.exe que é do resultado de 2003: 1 ainda está em 2016 2 está no 2017 3.exe está em 2003.
satibel 03/04
0

Pasta / ProcessoTimeUpdate

Realmente boa escolha para programa sem scripts. Além de não ser configurável automaticamente (na GUI), sua funcionalidade é exatamente a desejada:

O FolderTimeUpdate é uma ferramenta simples para Windows que verifica todos os arquivos e pastas na pasta base escolhida e atualiza o 'Horário Modificado' de cada pasta, de acordo com o horário modificado mais recente dos arquivos armazenados nela .

insira a descrição da imagem aqui

A maior parte disso também pode ser realizada na linha de comando; portanto, você pode automatizá-lo configurando-o para executar em intervalos ou talvez até monitorar determinadas pastas .

A GUI permite que o controle da profundidade das subpastas recorra, curingas de inclusão e exclusão e até mesmo se deve alterar o horário de criação do arquivo (o mesmo que o horário modificado ou o horário mais antigo da criação ou modificado).

Programa do excelente e prolífico Nir Sofer (o mesmo autor do Bulk File Changer em uma resposta menos relevante ).

cronômetro
fonte