创建一个脚本,返回最近日期文件的日期,并将其附加到文件名中



我的目标是集中有关上次用户备份何时完成的信息。

在我的网络上,我有备份运行到以下位置:

\serverbackupuser1
\serverbackupuser2
\serverbackupuser3

等等

我的目标是运行一个脚本,该脚本将检查每个文件夹,并返回每个文件夹中最新文件的日期信息,并将其附加到用户的名称中。

输出看起来像这样:

user1-2-17-12-1457
user2-1-18-12-1312
user3-2-6-12-0857

其中2-17-12-1457表示\server\backup\user1 上最新文件的日期和时间

这个脚本将在Windows2008SBS机器上运行,所以无论我有什么工具都可以使用。我运行相对基本的批处理文件,但我对完成任务持开放态度。

感谢

下面这样的东西应该能起到作用。如果您担心文件创建日期,请将"lastwritetime"的两个实例替换为"creationtime"。还需要调整最终的.totstring()格式,以防我没有收集到您想要的时间戳的格式。

$directories = get-childitem "\serverbackup" | where-object { $_.psiscontainer } 
foreach ($dir in $directories) { 
  get-childitem $dir | sort-object lastwritetime | select-object -last 1 | foreach-object { $dir.name + $_.lastwritetime.tostring("-MM-dd-yy-hhmm") }
}

这应该输出这样的东西:

copy-04-13-11-0213
Fiddler2-10-21-10-0120
My Received Files-11-14-11-0233
net-09-03-10-1023
OneNote Notebooks-02-07-12-0306
SQL Server Management Studio-03-17-11-1056
Visual Studio 2005-03-17-11-1056
Visual Studio 2008-03-17-11-1048
Visual Studio 2010-03-22-11-0650
windowspowershell-11-07-11-0303

编辑:根据评论。。将日志记录添加到文件中(文件本身带有当前日期的时间戳),并使用fullpath来确保我们不依赖相对路径。

$directories = get-childitem "\serverbackup" | where-object { $_.psiscontainer } 
$outFile = "C:recentfiles" + (get-date).toString("-MM-dd-yy") + ".txt"
foreach ($dir in $directories) { 
  get-childitem $dir.Fullname | sort-object lastwritetime | select-object -last 1 | foreach-object { $dir.name + $_.lastwritetime.tostring("-MM-dd-yy-hhmm") } | out-file $outFile -append
}

这里有一个例子,它递归地搜索配置文件中的所有文件,以找到最近编写的文件。然后,它将数据信息解析为一个字符串,该字符串连接到初始文件夹的名称。

$Folders = @(
        "\serverbackupuser1",
        "\serverbackupuser2",
        "\serverbackupuser3"
)
$Folders | % {
    $Directory = [System.IO.DirectoryInfo]$_
    $AllFiles = Get-ChildItem $_ -Recurse
    $NewestDate = ($AllFiles | Sort-Object -property LastWriteTime -Descending)[0].LastWriteTime | Get-Date -Format "-M-d-yy-HHmm"
    $NewFileName = "$($Directory.Name)$NewestDate"
    $NewFileName
}

最新更新