关于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会导致返回文件夹内容。我已经尝试在文件夹中放置额外级别的文件来测试它是否递归,但它只显示为一级。
如何在排除一个(或多个)目录的同时获取目录中的文件和文件夹列表?
答案 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。