PowerShell 检查文件是否存在并输出父目录

PowerShell check if file exists and output parent directory

我真的希望这是有道理的。脚本还有更多内容,但提供的片段是我遇到的问题。

我正在做的是 运行 一个每天在特定文件夹中查找前一天文件的脚本。有时文件夹在那里并且是空的,在这种情况下它们会被删除。如果存在文件夹,请检查它们是否有其他文件。如果文件存在,return父目录名。

文件夹 11 是永久的,永远不会改变。每天创建 11 个以内的文件夹,名称格式为 YYYYDDD(DDD = 儒略日)。如果文件夹 YYYYDDD 存在,请检查它是否存在以 YYDDD 开头的文件夹。如果存在以 YYDDD 开头的文件夹,请检查其中是否有文件。如果存在任何文件,return 父目录名称,即 YYDDD。

我知道我的代码目前 return 是包括文件名在内的整个路径。我想要它 return 文件所在父目录的 BaseName

有额外的代码可以忽略。用于扩展检查其他文件夹是否有类似文件。

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

$path0 = "U:\PShell\Testing\Delete Julian Dates\Test$date1"
$path1 = "U:\PShell\Testing\Delete Julian Dates\Test$date1"
$path2 = "U:\PShell\Testing\Delete Julian Dates\Test$date1"

$checkfiles = Get-ChildItem $path0\"$date0*"\*

if (Test-Path $path0\"$date0*"\*) {
    $checkfiles|
    % { Write-Host $_.FullName }
} else {
   Write-Host "Folder does not exist or is empty." }

Pause

使用Split-Path -Parent return 文件或文件夹的父文件夹(完整路径)。

如果只想要父文件夹名称,可以使用Split-Path -Parent | Get-Item | Select-Object -ExpandProperty Name

或者,您可以使用 ($_.FullName.split("\"))[-2][-2] 引用文件夹名称数组中的倒数第二个元素。 [-1] 将引用文件名。可能会快一点,具体取决于您必须遍历多少个文件。