0

我想通过管理我的 Windows 文件服务器来完成一些事情:

我想将服务器上所有文件夹的“上次修改”日期(只是文件夹和子文件夹,而不是其中的文件)更改为与最近的“创建”(或者可能是“上次修改”)日期相同文件夹内的文件。(在许多情况下,文件夹上的日期比其中的最新文件新得多。)

我想从最深的子文件夹到根目录递归地执行此操作。我也想在不手动输入任何日期和时间的情况下执行此操作。

我敢肯定,结合脚本和“触摸”的 Windows 端口,我也许可以做到这一点。你有什么建议吗?我也许可以做到这一点。你有什么建议吗?

这个封闭的话题似乎真的很接近,但我不知道如何只触摸文件夹而不触摸里面的文件,或者如何获取最新文件的日期。递归触摸以修复计算机之间的同步

4

2 回答 2

0

如果是出于备份目的,在 Windows 中有存档标志(而不是修改时间戳)。您可以使用 ATTRIB /S 递归设置它(参见 ATTRIB /?)

如果是出于其他目的,您可以使用一些 touch.exe 实现并使用递归:

FOR /R(见 FOR /?)

http://ss64.com/nt/for_r.html http://ss64.com/nt/touch.html

于 2013-02-16T20:02:03.653 回答
0

我认为您可以在 PowerShell 中执行此操作。我只是试着把一些东西放在一起,它似乎工作正常。您可以使用 Set-DirectoryMaxTime(".\Directory") 在 PowerShell 中调用它,它将在该目录下的每个目录上递归操作。

function Set-DirectoryMaxTime([System.IO.DirectoryInfo]$directory)
{

    # Grab a list of all the files in the directory
    $files = Get-ChildItem -File $directory
    # Get the current CreationTime of the directory we are looking at
    $maxdate = Get-Date $directory.CreationTime

    # Find the most recently edited file's LastWriteTime
    foreach($file in $files)
    {

        if($file.LastWriteTime -gt $maxdate) { $maxdate = $file.LastWriteTime }
    }

    # This needs to be in a try/catch block because there is a reasonable chance of it failing 
    #     if a folder is currently in use
    try
    {

        # Give the directory a LastWriteTime equal to the newest file's LastWriteTime
        $directory.LastWriteTime = $maxdate

    } catch {

        # One of the directories could not be updated
        Write-Host "Could not update directory: $directory"
    }

    # Get all the subdirectories of this directory
    $subdirectories = Get-ChildItem -Directory $directory

    # Jump into each of the subdirectories and do the same thing to each of their CreationTimes
    foreach($subdirectory in $subdirectories)
    {
        Set-DirectoryMaxTime($subdirectory)
    }


}
于 2013-02-16T23:17:52.080 回答