【发布时间】:2019-01-02 10:49:00
【问题描述】:
遍历包含文件夹位置的文本文件
foreach ($line in Get-Content "C:\Backup\sample.txt") {
Get-ChildItem $line | Where {
$_.LastWriteTime -gt (Get-Date).AddDays(-1)
} | select Directoryname, Name, LastWriteTime, @{Name="Size (GB)"; Expression={[Math]::Round($_.Length/1MB, 1)}}
}
这样我只能得到昨天修改过的文件。
我想要的是列出昨天修改和没有修改文件的文件夹。
如果文件夹包含昨天修改的文件(修改日期为昨天),则列出这些文件名、文件夹名及其大小(GB)。
还有Write-Host作为备份成功。
对于不包含昨天修改日期的文件的文件夹也应如此。
Write-Host 备份未完成。
【问题讨论】:
-
只需反转
where条件:-lt或-le而不是-gt -
如果没有一个目录昨天有任何文件被修改,或者至少有一个目录昨天没有文件被修改,您是否认为备份不完整?
-
要在比较日期时匹配不同的日期,您必须通过附加
.Date去除时间部分。要检查没有任何文件来自该日期,您可以在只有一个匹配时中止或计数匹配并且仅在计数为零时触发。此外,如果只输出文件夹,您计算的 Length 属性应该返回什么? -
@AnsgarWiechers 我希望通过检查文件修改日期来验证每个文件夹的状态。如果文件修改日期为昨天,则表示备份成功。如果没有,则不完整。
-
@LotPings 仅在备份未完成时提及的文件夹名称。输出应该有 2 个标题。不完整的备份和完整的备份。在不完整的备份下应该只显示文件夹名称。并且在完整备份下应该显示文件名、目录名、大小(GB)。
标签: powershell compare backup