【问题标题】:How do specify folder location AND file type in Powershell如何在 Powershell 中指定文件夹位置和文件类型
【发布时间】:2020-01-28 17:12:59
【问题描述】:

我想使用 Powershell 查找包含特定单词的文件夹,然后在其中查找特定文件类型。我无法弄清楚如何使用 Powershell 执行此操作。

find . \
-type d -iname '*_OUTPUT' -maxdepth 2 \
-exec find {} -type f -iname '*.psd' -not -path "*.\_*" \; >> /Volumes/Path-to-output-folder/Output.csv

这是我编写的在终端中运行的 Bash 脚本。它有时可以工作,但它也会定期使 SMB 服务器连接崩溃,因为我在 Mac 上运行它并且它不喜欢 SMB 服务器。所以我想尝试在 Windows 机器上做同样的事情,因为它与服务器有可靠的连接。

我在这里所做的是进入起始目录-maxdepth 2 深处的两个文件夹,并在那里查找以_OUTPUT -type d -iname '*_OUTPUT' 结尾的任何文件夹。然后,在这些文件夹中查找扩展名为 .psd -exec find {} -type f -iname '*.psd' 的任何文件,忽略可能在搜索 -not -path "*.\_*" 中发现的隐藏文件。找到的任何文件都会作为 CSV 工作表的完整路径输出。

我可以使用 -directory 在 Powershell 中查找文件夹,并使用 Get-ChildItem 查找文件类型,但是我无法像上面使用 Bash 那样将它们组合起来。那里有可以提供帮助的 Powershell 大师吗?

【问题讨论】:

    标签: windows bash powershell file directory


    【解决方案1】:

    让我们从分解开始:

    # Finding folders with names ending in _OUPUT
    Get-ChildItem -Directory -Depth 2 -Filter *_OUTPUT
    
    # Finding files in a folder with the .psd extension
    Get-ChildItem -Path .\folder\ -File -Filter *.psd
    

    我们可以像这样将两者与管道结合起来:

    Get-ChildItem -Directory -Depth 2 -Filter *_OUTPUT |Get-ChildItem -File -Filter *.psd
    

    最后,使用Where-Object排除以._开头的文件:

    Get-ChildItem -Directory -Depth 2 -Filter *_OUTPUT |Get-ChildItem -File -Filter *.psd |Where Name -notlike ._*
    

    【讨论】:

    • 啊,我明白了。谢谢。我没有意识到你可以像那样使用 Get-ChildItem 两次。这看起来应该可以工作,但我收到错误消息“找不到与参数名称'目录'匹配的参数”。我在工作计算机上,我刚刚发现我们只安装了 Powershell 2.0!这有点疯狂。
    • @JamesTrory - 您可以通过测试$_.PsIsContainer 来过滤Where-Object 阶段的输出。
    • @Lee_Dailey 谢谢,这让我更接近了。 PS 2.0 很烂。它不接受-File-Depth 参数。如果我在Where-Object 中使用$_.PsIsContainer,这有助于过滤到仅_OUTPUT 文件夹,但它不仅给了我一个文件列表,还给了我一个目录列表。我只想要文件。 Get-ChildItem -Recurse S:\Path -Filter *_OUTPUT | Get-ChildItem -Filter *.psd | Where-Object { $_.PSIsContainer }
    • @JamesTrory - 欢迎您! [grin] ///// 我会运行 G-CI 并过滤路径 1,然后运行它来处理文件。奥塔会给你你所需要的。
    • @Lee_Dailey 那会是这样吗? -Get-ChildItem -Recurse S:\Path -Filter *_OUTPUT | Where-Object { $_.PSIsContainer } | Get-ChildItem -Filter *.psd | Export-Csv S:\whatever.csv。这种工作,但 CSV 导出不仅包含 _OUTPUT 文件夹中的文件,还包含其中任何子文件夹的名称。我不想要子文件夹,因为它弄乱了文件列表。知道如何阻止这种情况发生吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多