以特定顺序循环遍历所选目录(Powershell)

时间:2020-10-29 14:22:11

标签: powershell

我有这段代码可以创建一个sql脚本,其中包含来自所选目录的文件名列表。有用。但是,我正在寻找改进方法。我不想为每个目录重复Get-ChildItem块,而是希望以特定顺序循环遍历所选目录。

例如,我只想要来自以下目录的文件名: 模式 顺序,以及 职能 (想忽略其余部分)

我还需要按特定顺序的文件名:首先-来自“方案”的文件名,然后来自“功能”的文件名,然后来自“序列”的文件名。

有办法吗?或者,最好保留我现在拥有的东西?

--mode

2 个答案:

答案 0 :(得分:2)

Path参数接受一个字符串数组,因此您可以执行以下操作:

Get-ChildItem $TFSDirectory"Schemas", $TFSDirectory"Functions", $TFSDirectory"Sequences"

答案 1 :(得分:1)

您有两种选择。您可以保持简单,而只需添加另一个循环。它将按照您放置它们的顺序运行。通过将外部循环设为Foreach-Object循环,您仍然可以使用管道并执行一个Set-Content。作为foreach语句的innerloop只是首选项。

"Schemas","Functions","Sequences" | ForEach-Object {
    Foreach($filepath in (Get-ChildItem $TFSDirectory$_ -Filter *.sql -Recurse).FullName)
    {
        "PRINT ""$filepath"""
        "GO"
        ":r ""$filepath"""
        "GO"
        $suffix
    }
} | Set-Content -Path $MasterSQLFileName -Encoding UTF8

另一个选择是将其转换为功能

Function New-SQLStatement {
    Param($Folder,$suffix)

    (Get-ChildItem $Folder -Filter *.sql -Recurse).FullName |
        ForEach-Object {
            "PRINT ""$_"""
            "GO"
            ":r ""$_"""
            "GO"
            $suffix
        }
}

"Schemas","Functions","Sequences" |
    ForEach-Object {New-SQLStatement -Folder $TFSDirectory$_ -suffix $suffix} |
        Set-Content -Path $MasterSQLFileName -Encoding UTF8