我正在尝试将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 本身。