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

时间:2018-11-08 18:32:39

标签: powershell scripting powershell-v3.0 powershell-v4.0 windows-scripting

我真的希望这有意义。脚本将有更多内容,但是提供的代码段是我遇到的问题。

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

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

我知道我的代码当前返回包括文件名在内的整个路径。我希望它返回文件所在的父目录的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\11\$date1"
$path1 = "U:\PShell\Testing\Delete Julian Dates\Test\12\$date1"
$path2 = "U:\PShell\Testing\Delete Julian Dates\Test\13\$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

1 个答案:

答案 0 :(得分:0)

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

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

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