【问题标题】:PowerShell check if file exists and output parent directoryPowerShell检查文件是否存在并输出父目录
【发布时间】:2019-04-12 08:02:35
【问题描述】:

我真的希望这是有道理的。脚本会有更多内容,但提供的 sn-p 是我遇到的问题。

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

文件夹 11 是永久的,永远不会更改。每天都会创建 11 个文件夹,其名称格式为 YYYYDDD(DDD = julian day)。如果文件夹 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

【问题讨论】:

标签: powershell scripting powershell-3.0 powershell-4.0 windows-scripting


【解决方案1】:

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

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

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

【讨论】:

  • if (Test-Path $path0\"$date0*"\*) { Split-Path -Parent $checkfiles } 现在返回父名称的整个路径。有没有办法只隔离父名称而没有其背后的路径?
  • 试试Split-Path -Parent | Get-Item | Select-Object -ExpandProperty Name
  • Split-Path -Parent $checkfiles | Get-Item | Select-Object -ExpandProperty Name 工作!
猜你喜欢
  • 2013-06-04
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 2022-12-01
相关资源
最近更新 更多