我有这段代码可以创建一个sql脚本,其中包含来自所选目录的文件名列表。有用。但是,我正在寻找改进方法。我不想为每个目录重复Get-ChildItem块,而是希望以特定顺序循环遍历所选目录。
例如,我只想要来自以下目录的文件名: 模式 顺序,以及 职能 (想忽略其余部分)
我还需要按特定顺序的文件名:首先-来自“方案”的文件名,然后来自“功能”的文件名,然后来自“序列”的文件名。
有办法吗?或者,最好保留我现在拥有的东西?
--mode
答案 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