代码之家  ›  专栏  ›  技术社区  ›  Parduz

Powershell Get ChildItem:如何获取具有给定BaseName的所有内容,包括文件和文件夹?

  •  0
  • Parduz  · 技术社区  · 2 月前

    我有这样的目录/文件结构:

    S:\My Folder\BaseName 1\
    S:\My Folder\BaseName 1\BaseName 1 1.lnk
    S:\My Folder\BaseName 1\BaseName 1 1.txt
    S:\My Folder\BaseName 1.lnk
    S:\My Folder\BaseName 1.txt
    S:\My Folder\BaseName 2\
    S:\My Folder\BaseName 2\BaseName 2 1.lnk
    S:\My Folder\BaseName 2\BaseName 2 1.txt
    S:\My Folder\BaseName 2.lnk
    S:\My Folder\BaseName 2.txt
    

    我有一个剧本,寻找* .lnk 目录中的文件,然后应处理找到的具有相同BaseName的*.lnk的任何其他文件/文件夹。

    当脚本解析时* S: \我的文件夹* 它发现 基本名称1.lnk 基本名称2.lnk

    现在我需要在中找到所有子项目 S: \我的文件夹 (仅在那里,不在子文件夹中)具有相同的BaseNames,因此我需要找到这两个 基地名称1 文件夹和 基本名称1.txt 文件。

    但我做不到:

    1. Get-ChildItem -Path ".\BaseName 1" -exclude *.lnk 返回目录的内容 基地名称1 ,我不想要。
    2. Get-ChildItem -Path ".\BaseName 1*" -exclude *.lnk 仅返回 基本名称1.txt 以及目录的内容 基地名称1 ,我不想要。
    3. Get-ChildItem -Path ".\BaseName 1.*" -exclude *.lnk 仅返回 基本名称1.txt 但不是目录 基地名称1 ,这是我需要的。
    4. Get-ChildItem -Path "." -include "BaseName 1" -exclude *.lnk -recurse 仅返回目录 基地名称1 ,但不是 基本名称1.txt 文件
    5. Get-ChildItem -Path "." -include "BaseName 1*" -exclude *.lnk -recurse 返回所有内容,但我不想要目录的内容 基地名称1

    我该怎么办?

    1 回复  |  直到 2 月前
        1
  •  1
  •   mklement0    2 月前

    使用 Get-Item 而不是 Get-ChildItem :

    Get-Item -Path '.\BaseName 1*'  -Exclude *.lnk
    

    更严格地说(考虑到上述内容也会匹配 .\BaseName 11 例如):

    # Add -ErrorAction Ignore to silence a potential error if no
    # item literally named 'BaseName 1' exists.
    Get-Item -Path '.\BaseName 1', '.\BaseName 1.*'  -Exclude *.lnk