获取文件夹的名称或路径(如果为空)

时间:2018-08-21 13:15:37

标签: powershell

我正在研究一个脚本,该脚本检查每个子文件夹内是否都有一个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
}

1 个答案:

答案 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