Respostas:
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.
$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!
Handlesou 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á.
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.

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
A data da última modificação de uma pasta é sempre a do último arquivo modificado nela.
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 .
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 ).
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.