【问题标题】:Get a specific folder name from path从路径获取特定文件夹名称
【发布时间】:2018-05-08 03:14:40
【问题描述】:

如何获取第 4 个文件夹名称并将其存储在变量中,同时遍历存储在父文件夹中的文件。例如,如果路径是

C:\ParentFolder\Subfolder1\subfolder2\subfolder3\file.extension 
C:\ParentFolder\Subfolder1\subfolder2\subfolder4\file.extension 
C:\ParentFolder\Subfolder1\subfolder2\subfolder5\file.extension 

那么 subfolder2 的名称应该存储在一个变量中。有人可以帮我解决这个问题吗?

get-childitem $DirectorNane -Recurse | Where-Object{!($_.PSIsContainer)} | % {

    $filePath = $_.FullName

    #Get file name
    $fileName = Split-Path -Path $filePath -Leaf
}   $FileI = Split-Path -Path $filePath -Leaf

提前致谢!

【问题讨论】:

    标签: powershell powershell-3.0


    【解决方案1】:

    您可以使用$filePath 变量上的-split operator 来获得您想要的。

    $split = $filePath -split '\\'
    $myvar = $split[3]
    

    我们使用双反斜杠来分割,因为第一个斜杠转义了斜杠字符来分割路径。然后,我们可以在“split”变量中生成的数组中引用我们想要的路径部分。

    此外,您可以使用以下代码通过一个衬里解决此问题:

    $myvar = $filepath.split('\')[3]

    这将确保您始终获得数组中的第四个元素,但灵活性稍差,因为您无法通过附加脚本根据条件指定您想要的确切内容。

    【讨论】:

    • 就我个人而言,我喜欢该运算符,因为如果我想返回并使用 split 变量来做其他事情,我可以(例如,如果我想获取第三个子文件夹,除非它被命名x,然后得到第四个,或者类似的东西)。对于 OP 的用例,这也是一个可行的选项,因此请随时编辑我的答案并根据需要添加。
    • @BryceMcDonald 都派上用场了,你只要have to know the difference
    • @LotPings:我的建议是坚持使用-split operator:它可以做.Split 方法可以做的所有事情,甚至更多,它避免了方法语法陷阱,并且它避免了由于引入新的 .NET 方法重载而导致的行为变化问题 - 请参阅 stackoverflow.com/a/41905031/45375
    • 至于用-split的单行operator$myvar = ($filepath -split '\\')[3]
    • @mklement0 又是一个很好的详尽解释 +1 很遗憾你不能直接收藏答案。
    【解决方案2】:

    如果您询问如何获取包含文件的目录的父目录,您可以调用Split-Path 两次。示例:

    $filePath = "C:\ParentFolder\Subfolder1\subfolder2\subfolder3\file.extension"
    $parentOfParent = Split-Path (Split-Path $filePath)
    # $parentOfParent now contains "C:\ParentFolder\Subfolder1\subfolder2"
    

    【讨论】:

    • 感谢您的回复! subfolder2 将具有唯一值,因此我必须将 subfolder2 值存储在变量中,并在使用 web 服务时将其用作输入
    • 我试图猜测你想要做什么。您真的需要路径中的第 4 个元素,还是需要文件父级的父级? (你的问题没有说。)
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2011-01-25
    • 2011-04-13
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多