Get-ChildItem并排除一个 - 了解recurse

时间:2014-12-18 06:59:15

标签: powershell directory get-childitem

关于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会导致返回文件夹内容。我已经尝试在文件夹中放置额外级别的文件来测试它是否递归,但它只显示为一级。

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

2 个答案:

答案 0 :(得分:2)

也许您应该使用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

答案 1 :(得分:0)

你必须添加-Recurse

试试这个

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

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