【问题标题】:Get-ChildItem and exclude one - Understanding recurseGet-ChildItem 并排除一个 - 了解递归
【发布时间】:2015-02-16 21:38:48
【问题描述】:

已经有一些关于 Get-ChildItem 语义的讨论,但我仍然很难理解一些场景。

假设我有以下文件结构

C:\Test
│   TestFile1.txt
|   TestFile2.txt
│
├───SomeFolder
│   │   IgnoreFile1.txt
│   └───IgnoreFile2.txt
│   
└───OtherFolder

我想运行一个命令来选择除 OtherFolder 之外的所有内容并将其通过管道传输到另一个命令中。 (为了完整起见,我实际上要做的是将所有内容移至 OtherFolder,因此最终结果是其他文件夹包含 TestFile 和 SomeFolder 及其子文件夹)

对 Get-ChildItem 的任何摆弄似乎都无法给我想要的结果。举个简单的例子:

Get-ChildItem *.txt -Exclude TestFile1.txt 

返回预期结果。仅限 TestFile2.txt。

Get-ChildItem *Folder

返回两个文件夹。然而:

Get-ChildItem *Folder -Exclude OtherFolder

而是返回 SomeFolder 的子级。我真的不明白到底发生了什么。为什么添加 -Exclude 会导致返回文件夹内容。我已经尝试在文件夹中放置额外级别的文件来测试它是否是递归的,但它似乎只下降了一层。

如何在排除一个(或多个)目录的同时获取目录中的文件和文件夹列表?

【问题讨论】:

    标签: powershell directory get-childitem


    【解决方案1】:

    也许您应该使用 Get-Item 而不是 ChildItem。
    它似乎提供了您期望的数据。

    PS C:\Users\v.......> Get-Item -Exclude Downloads Do*
    
    
        Verzeichnis: C:\Users\v.......
    
    
    Mode                LastWriteTime     Length Name
    ----                -------------     ------ ----
    d-r--        17.12.2014     17:07            Documents
    d----        18.12.2014     09:29            Doom
    

    【讨论】:

    • 啊啊!!就是这么简单。我想我一直坚持使用Get-ChildItem,因为我使用的是dir 别名。 Get-Item 确实完成了我想要的。
    【解决方案2】:

    你必须添加 -Recurse

    试试这个

    Get-ChildItem *Folder -Exclude "OtherFolder" -Recurse | %{$_.BaseName}
    

    如果您只想返回文件夹,则必须添加 -Directory。

    【讨论】:

    • 不,添加 -recurse 会导致它返回这些文件夹的内容。我实际上想要一个 dir 命令,它返回文件夹 test 除了 OtherFolder 之外的所有内容。
    • 可能问题出在*Folder。这样,您就可以过滤名称中包含“文件夹”的内容。所以你不能得到TestFile1和2。在没有*Folder的情况下试试。
    • 不,这不是问题所在。当我只使用Get-ChildItem * -Exclude OtherFolder -Recurse 时,也会发生完全相同的事情。我仍然只想要根文件夹的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2018-01-09
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    相关资源
    最近更新 更多