PowerShell,检测根父文件夹的正确方法

标签 powershell path parent

对于各种应用程序,我需要获取一些文件的父文件夹以用于创建其他输出。

$x = "C:\MyFolder\test.txt"
$parent = Split-Path (Split-Path $x) -Leaf

这工作正常,除非我接近顶层。

$x = "C:\test.txt"
$parent = Split-Path (Split-Path $x) -Leaf

这行得通,$parent = C:\ 但没有 -Leaf 这样的。我剩下的可能是“D:、E:、F:”,甚至可能是网络位置。一般情况下,处理这些情况的好方法是什么?

我能做到:

if ($parent.length -eq 3) {
    handle-top-level-situation
}

但这感觉有点不雅。当我以这种方式检查父文件夹名称时,是否有更好的方法来检查顶层?

最佳答案

基于 .NET API 的解决方案:

"C:\MyFolder\test.txt", "C:\test.txt" | ForEach-Object { 

  $parent = ([IO.FileInfo] $_).Directory.Name
  if ([IO.Path]::IsPathRooted($parent)) {
    "parent dir. is root path: $parent"
  } else {
    "parent dir. name: $parent"
  }

}

输出:

parent dir. name: MyFolder
parent dir. is root path: C:\

或者,如果您想预先排除根目录中的文件,甚至在尝试提取父目录名称之前,您可以使用regex。与 -notmatch :

"C:\MyFolder\test.txt", "C:\test.txt" | ForEach-Object {

  if ($_ -notmatch '^[a-z]:\\.+?\\.|^\\\\.+?\\.+?\\.') {
    "file is located in a root dir: $_"
  } else {
    "parent dir. name: " + ([IO.FileInfo] $_).Directory.Name
  }

}

注意:以上假设:

  • 常规完整路径(\ 不会意外加倍,例如在 c:\\temp 中),尽管可以调整正则表达式来处理它们。

  • Windows 路径分隔符,即 \;要使正则表达式跨平台,请将所有 \\ 实例替换为 [\\/]

关于PowerShell,检测根父文件夹的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73989936/

相关文章:

java - 为什么在远程系统上运行批处理文件时出现 "Path not correct"错误?

javascript - 子窗口打开后禁用链接,子窗口关闭后恢复

azure - 有没有办法在上次成功时回滚 DevOps 管道?

node.js - 如何将 'src' 设置为 webpack 中的资源根目录?

powershell - 在 powershell 脚本中管理来自外部命令的输入

python - 为什么我要将 python 添加到 PATH

delphi - Delphi 中将对象强制转换为父类

qt - 如何在 QT 中获取 Top(base) parentWidget?

git - 在 PowerShell 错误消息中使用 touch 命令创建新文件

powershell - 无法从 Get-PSDrive 捕获 DriveNotFoundException