我正在研究一个脚本,该脚本检查每个子文件夹内是否都有一个txt文件。效果很好,但是如果其中没有txt文件,那么如何获得子文件夹的名称?
例如:在“ C:\ Files \”中,我有一些子文件夹A,B,C和D。在这些子文件夹中,只有一个txt文件,它是从另一软件生成并放置的。这些文件每天都会用新的txt文件替换。
有时一个或多个文件丢失,因此子文件夹为空。如果文件夹不包含txt文件,如何获取文件夹名称?
我的代码:
检查昨天的文件是否存在
$yesterday = Get-ChildItem C:\Files\*.txt -Recurse | Where-Object {
$_.LastWriteTime.ToShortDateString() -eq (Get-Date).AddDays(-1).ToShortDateString()
}
文件丢失时:
if (!$yesterday) {
Send-MailMessage
-To $mailReceiver
-Cc $mailReceiverCc
-From "$mailSenderName $mailSender"
-Subject "Backup error"
-Body "Backup from yesterday is missing!"
-SmtpServer $mailSmtpServer
}
答案 0 :(得分:1)
枚举目录并过滤不包含少于一天的.txt文件的目录。
$limit = (Get-Date).AddDays(-1)
Get-ChildItem -Recurse | Where-Object {
$_.PSIsContainer -and
-not (Get-ChildItem $_.FullName -Filter '*.txt' | Where-Object {
$_.LastWriteTime -gt $limit
})
} | Select-Object -Expand FullName
在PowerShell v3和更高版本上,您可以将其简化为
$limit = (Get-Date).AddDays(-1)
Get-ChildItem -Recurse -Directory | Where-Object {
-not (Get-ChildItem $_.FullName -Filter '*.txt' | Where-Object {
$_.LastWriteTime -gt $limit
})
} | Select-Object -Expand FullName