0

Windows ファイル サーバーの管理で達成したいことがあります。

サーバー上のすべてのフォルダー (フォルダーとサブフォルダーのみで、その中のファイルではない) の「最終変更」日付を、最新の「作成」(または「最終変更」) 日付と同じになるように変更したいフォルダ内のファイル。(多くの場合、フォルダーの日付は、フォルダー内の最新のファイルよりもはるかに新しいものです。)

最も深いサブフォルダーからルートまで、これを再帰的に行いたいと思います。また、日付と時刻を手動で入力せずにこれを行いたいと思います。

スクリプトと「タッチ」の Windows ポートを組み合わせれば、おそらくこれを達成できると確信しています。何か提案はありますか?私は多分これを達成することができました。何か提案はありますか?

この閉じられたトピックは非常に近いようですが、内部のファイルに触れずにフォルダーのみに触れる方法や、最新のファイルの日付を取得する方法がわかりません。コンピューター間の同期を修正するための再帰的なタッチ

4

2 に答える 2

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 に答える
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 に答える