首页 > 解决方案 > 测试路径在空文件夹上返回 true

问题描述

Test-Path正在返回 true,或者如果它们与返回 true 的非空文件夹位于同一目录中,则至少似乎位于空文件夹上。

我尝试调整通配符位置,添加额外的 \ 来更改路径,看看是否可以减少返回文件夹的数量,但我不能。我假设了该foreach部分,Test-Path并将单独检查每个文件夹并返回结果,但是一旦看到内容就会出现,此后的所有文件夹都返回为 true。

[int]$subDay = Read-Host "Enter days to subtract"

$date0 = (Get-Date).AddDays(-$subDay).ToString("yy") +
         ((Get-Date).AddDays(-$subDay).DayOfYear).ToString("D3")
$date1 = (Get-Date).AddDays(-$subDay).ToString("yyyy") +
         ((Get-Date).AddDays(-$subDay).DayOfYear).ToString()

$path0 = ".\11"
$path1 = ".\12"
$path2 = ".\13"

$a = $path0, $path1, $path2    

function Split {
    Param ($split)

    Split-Path -Parent $split |
        Get-Item |
        Select-Object -ExpandProperty Name |
        Add-Content $archLog    

    foreach ($element in $a) {
        if (Test-Path $element\$date1\"$date0*"\*) {
            Split $element\$date1
            Split $element\$date1\"$date0*"\*
        } else { 
            Split $element\$date1
            Write-Output "Folders do not exist or are empty." |
                Add-Content $archlog
        }
    }

如果它有内容,我希望代码返回文件夹名称,它确实如此。但是,如果在包含内容的文件夹所在的位置存在空文件夹,则会返回两者。如果您拿走文件夹的内容,则不会返回任何内容。

标签: powershellscripting

解决方案


为了能够查看包含文件的每个子文件夹,请使用cmdlet的参数-file和 :-recurseGet-ChildItem

$a = $path0, $path1, $path2
foreach ($element in $a) { Get-ChildItem -Path $element\$date1 -file -Recurse | foreach {$_.Directory.Name} | select -uniq }

推荐阅读