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)?
3
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.
Exception setting "LastWriteTime": "Cannot convert null to type "System.DateTime"."
ao executar isso. Tem a ver com a primeira linha, o.LastWriteTime
sufixo está sendo resolvido como nulo. Removê-lo cria um valor para$lastmodified
, mas não o que queremos.$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!Handles
ou o Process Explorer (ambos os Sysinternals) para determinar o que a pasta está aberta.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á.
fonte
Você pode usar o Bulk File Changer .
fonte
Não é bonito, mas funcional. Feito em bash / cygwin
Brian
fonte
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.
fonte
Fazer nada! Missão cumprida!
A data da última modificação de uma pasta é sempre a do último arquivo modificado nela.
fonte
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:
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 ).
fonte