奇怪的Powershell GCI递归结果与通配符



我正在尝试将GCI与递归参数一起使用,以获取指定路径的子文件夹中所有文件的列表。

我使用以下行:

gci 'C:tempTestRecurse**' -Recurse

在 TestRecurse 文件夹下,我有以下内容:

TestRecurse
|---b.txt
|---dir1
|------a.txt

我希望 a.txt 被退回。但是,我得到了 a.txt 和 b.txt。对我来说仍然很陌生,如果我将 a.txt 放入另一个子文件夹中:

TestRecurse
|---b.txt
|---dir1
|------dir2
|---------a.txt

上面的相同语句仅返回 a.txt。我很困惑当返回 b.txt 时,弄乱 a.txt 的位置会如何变化。有人可以向我解释为什么会发生这种情况,以及为什么 b.txt 会被返回吗?

更新

我应该提到,虽然他们受到赞赏,但我不一定在寻找解决方法。 这是我们环境中较大脚本的一部分,该脚本负责以各种方式移动文件,同时尝试保持灵活性。它的行为不像我预期的那样,所以我试图理解为什么它会以这种方式工作。正如PetSerAl所指出的,理解Get-ChildItem可能比它的价值更麻烦。

谢谢!

您包含父目录的通配符 (TestRecurse*(,因此您也会获得其中包含的文件。尝试获取TestRecurse的文件夹列表,然后遍历它们。

结构:

TestRecurseb.txt
TestRecursedir1
TestRecursedir1a.txt

法典:

Get-ChildItem 'C:tmpTestRecurse' | `    # Get the list of items within TestRecurse
? {$_.PSIsContainer} | `                # Filter items that are folders
% {Get-ChildItem $_.FullName -Recurse}  # Iterate through and get all items within those folders

这仅返回 dir1中的文件夹和文件,而不返回 dir1 本身。

最新更新