我有一个包含以下行的文件
c:\scripts\oltp\db1\scripts\scripts1.sql
c:\scripts\oltp\db1\tables\scripts1.sql
c:\scripts\oltp\db1\storedprocedures\scripts1.sql
c:\scripts\oltp\db1\functions\scripts1.sql
c:\scripts\oltp\db1\tables\scripts2.sql
c:\scripts\oltp\db1\storedprocedures\scripts2.sql
我正在寻找一个PowerShell脚本,可以根据列表进行排序,如下所述......
Tables,storedprocedures,views,scripts,everything else.....
我的预期输出是
c:\scripts\oltp\db1\tables\scripts1.sql
c:\scripts\oltp\db1\tables\scripts2.sql
c:\scripts\oltp\db1\storedprocedures\scripts1.sql
c:\scripts\oltp\db1\storedprocedures\scripts2.sql
c:\scripts\oltp\db1\scripts\scripts1.sql
c:\scripts\oltp\db1\functions\scripts1.sql
答案 0 :(得分:3)
Sort-Object -Property
可以将匿名计算属性作为参数。根据您的排序标准在表达式中放置一个开关:
function Test-CustomSort {
$ScriptNames = @(
'c:\scripts\oltp\db1\scripts\scripts1.sql'
'c:\scripts\oltp\db1\tables\scripts1.sql'
'c:\scripts\oltp\db1\storedprocedures\scripts1.sql'
'c:\scripts\oltp\db1\functions\scripts1.sql'
'c:\scripts\oltp\db1\tables\scripts2.sql'
'c:\scripts\oltp\db1\storedprocedures\scripts2.sql'
)
$ScriptNames | Sort-Object @{Expression={
switch(Split-Path -Parent $_ | Split-Path -Leaf){
"tables" { 1 }
"storedprocedures" { 2 }
"views" { 3 }
"scripts" { 4 }
default { 5 }
}
}}
}
产地:
PS C:\> Test-CustomSort
c:\scripts\oltp\db1\tables\scripts1.sql
c:\scripts\oltp\db1\tables\scripts2.sql
c:\scripts\oltp\db1\storedprocedures\scripts1.sql
c:\scripts\oltp\db1\storedprocedures\scripts2.sql
c:\scripts\oltp\db1\scripts\scripts1.sql
c:\scripts\oltp\db1\functions\scripts1.sql
答案 1 :(得分:2)
您可以按目录对路径进行分组,将它们放入哈希表中,然后按所需顺序输出哈希表。
$categories = 'tables', 'storedprocedures', 'views', 'scripts', 'functions'
$ht = @{}
Get-Content 'C:\path\to\your.txt' |
Group-Object { Split-Path -Parent $_ | Split-Path -Leaf } |
ForEach-Object { $ht[$_.Name] = $_.Group }
$categories | ForEach-Object {
$ht[$_] | Sort-Object
}
答案 2 :(得分:-1)
如果路径始终相同:c:\ scripts \ oltp \ db1 \
(gc .\list.txt) | %{$_ -replace 'c:\\scripts\\oltp\\db1\\', ''} | Sort
输出
functions\scripts1.sql
scripts\scripts1.sql
storedprocedures\scripts1.sql
storedprocedures\scripts2.sql
tables\scripts1.sql
tables\scripts2.sql