目录导航

可以通过使用 Sort-Object cmdlet 组织已显示的数据,使其更易于扫描。 Sort-Object 依据一个或多个属性的名称进行排序,并返回按这些属性的值进行排序的数据。

基本排序

请考虑列出当前目录中的子目录和文件的问题。 如果想要依次按 LastWriteTimeName 进行排序,可键入:

Get-ChildItem |
  Sort-Object -Property LastWriteTime, Name |
  Format-Table -Property LastWriteTime, Name

执行上面示例代码,得到以下结果:

LastWriteTime       Name
-------------       ----
2017/9/7 20:44:29   .oracle_jre_usage
2017/10/7 19:49:02  Shipin7
2017/10/10 20:45:24 .tooling
2017/10/27 22:23:04 .gradle
2017/10/27 22:27:26 .AndroidStudio3.0
2017/12/18 21:40:31 .emulator_console_auth_token
2018/4/29 19:04:11  .m2
2018/12/7 15:51:50  status_check_temp
2018/12/22 16:22:51 shipin7_update_temp
2019/4/30 8:21:48   CMB
2019/5/5 23:18:17   .eclipse
2019/7/31 21:09:02  .gitconfig
2019/10/25 11:58:44 .firefly2.conf
2019/11/13 23:00:02 .vscode
2019/12/11 16:19:41 source
2019/12/14 8:06:47  3D Objects
2019/12/14 8:06:47  Contacts
2019/12/14 8:06:47  Pictures
2019/12/14 8:06:47  Favorites
2019/12/14 8:06:47  Searches
2019/12/14 8:06:47  Downloads
2019/12/14 8:06:47  Music
2019/12/14 8:06:47  Saved Games
2019/12/14 8:06:47  Links
2019/12/28 21:53:39 .ipython
2019/12/28 21:53:49 .matplotlib
2019/12/28 21:54:11 .spyder-py3
2020/1/18 20:43:54  .p2
2020/2/2 11:02:27   .bash_history
2020/2/4 10:30:07   .nbi
2020/2/4 22:21:56   Documents
2020/2/7 18:49:25   Videos
2020/2/8 9:37:35    Desktop

也可通过指定 Descending 开关参数按相反顺序对对象进行排序。

Get-ChildItem |
  Sort-Object -Property LastWriteTime, Name -Descending |
  Format-Table -Property LastWriteTime, Name

执行上面示例代码,得到以下结果:

LastWriteTime       Name
-------------       ----
2020/2/8 9:37:35    Desktop
2020/2/7 18:49:25   Videos
2020/2/4 22:21:56   Documents
2020/2/4 10:30:07   .nbi
2020/2/2 11:02:27   .bash_history
2020/1/18 20:43:54  .p2
2019/12/28 21:54:11 .spyder-py3
2019/12/28 21:53:49 .matplotlib
2019/12/28 21:53:39 .ipython
2019/12/14 8:06:47  Links
2019/12/14 8:06:47  Saved Games
2019/12/14 8:06:47  Music
2019/12/14 8:06:47  Downloads
2019/12/14 8:06:47  Searches
2019/12/14 8:06:47  Favorites
2019/12/14 8:06:47  Pictures
2019/12/14 8:06:47  Contacts
2019/12/14 8:06:47  3D Objects
2019/12/11 16:19:41 source
2019/11/13 23:00:02 .vscode
2019/10/25 11:58:44 .firefly2.conf
2019/7/31 21:09:02  .gitconfig
2019/5/5 23:18:17   .eclipse
2019/4/30 8:21:48   CMB
2018/12/22 16:22:51 shipin7_update_temp
2018/12/7 15:51:50  status_check_temp
2018/4/29 19:04:11  .m2
2017/12/18 21:40:31 .emulator_console_auth_token
2017/10/27 22:27:26 .AndroidStudio3.0
2017/10/27 22:23:04 .gradle
2017/10/10 20:45:24 .tooling
2017/10/7 19:49:02  Shipin7
2017/9/7 20:44:29   .oracle_jre_usage

使用哈希表

可以使用数组中的哈希表按不同顺序对不同属性进行排序。 每个哈希表使用 Expression 键将属性名称指定为字符串,并使用 Ascending 或 Descending 键按 $true 或 $false 指定排序顺序。 Expression 键是必需的。 AscendingDescending 键是可选的。
下面的示例按 LastWriteTime 降序和 Name 升序对对象进行排序。

Get-ChildItem |
  Sort-Object -Property @{ Expression = 'LastWriteTime'; Descending = $true }, @{ Expression = 'Name'; Ascending = $true } |
  Format-Table -Property LastWriteTime, Name

执行上面示例代码,得到以下结果:

LastWriteTime       Name
-------------       ----
2020/2/8 9:37:35    Desktop
2020/2/7 18:49:25   Videos
2020/2/4 22:21:56   Documents
2020/2/4 10:30:07   .nbi
2020/2/2 11:02:27   .bash_history
2020/1/18 20:43:54  .p2
2019/12/28 21:54:11 .spyder-py3
2019/12/28 21:53:49 .matplotlib
2019/12/28 21:53:39 .ipython
2019/12/14 8:06:47  Links
2019/12/14 8:06:47  Saved Games
2019/12/14 8:06:47  Downloads
2019/12/14 8:06:47  Music
2019/12/14 8:06:47  Searches
2019/12/14 8:06:47  Favorites
2019/12/14 8:06:47  Pictures
2019/12/14 8:06:47  Contacts
2019/12/14 8:06:47  3D Objects
2019/12/11 16:19:41 source
2019/11/13 23:00:02 .vscode
2019/10/25 11:58:44 .firefly2.conf
2019/7/31 21:09:02  .gitconfig
2019/5/5 23:18:17   .eclipse
2019/4/30 8:21:48   CMB
2018/12/22 16:22:51 shipin7_update_temp
2018/12/7 15:51:50  status_check_temp
2018/4/29 19:04:11  .m2
2017/12/18 21:40:31 .emulator_console_auth_token
2017/10/27 22:27:26 .AndroidStudio3.0
2017/10/27 22:23:04 .gradle
2017/10/10 20:45:24 .tooling
2017/10/7 19:49:02  Shipin7
2017/9/7 20:44:29   .oracle_jre_usage

还可以将 scriptblock 设置为 Expression 键。 运行 Sort-Object cmdlet 时,将执行 scriptblock 并使用结果进行排序。
下面的示例按 CreationTime 和 LastWriteTime 之间的时间跨度以降序对对象进行排序。

Get-ChildItem |
  Sort-Object -Property @{ Expression = { $_.LastWriteTime - $_.CreationTime }; Descending = $true } |
  Format-Table -Property LastWriteTime, CreationTime

执行上面示例代码,得到以下结果:

LastWriteTime       CreationTime
-------------       ------------
2020/2/8 9:37:35    2017/8/31 19:42:39
2020/2/7 18:49:25   2017/8/31 19:42:39
2020/2/4 22:21:56   2017/8/31 19:42:39
2020/2/4 10:30:07   2017/10/10 20:45:39
2019/12/14 8:06:47  2017/8/31 19:42:39
2019/12/14 8:06:47  2017/8/31 19:42:39
2019/12/14 8:06:47  2017/8/31 19:42:39
2019/12/14 8:06:47  2017/8/31 19:42:39
2019/12/14 8:06:47  2017/8/31 19:42:39
2019/12/14 8:06:47  2017/8/31 19:42:39
2019/12/14 8:06:47  2017/8/31 19:43:25
2019/12/14 8:06:47  2017/8/31 19:43:25
2020/1/18 20:43:54  2017/10/10 20:30:08
2019/12/14 8:06:47  2018/4/15 12:22:36
2019/5/5 23:18:17   2017/10/10 20:30:08
2018/12/22 16:22:51 2017/10/12 22:13:14
2018/12/7 15:51:50  2017/12/28 20:53:02
2020/2/2 11:02:27   2019/6/8 16:20:20
2019/10/25 11:58:44 2019/4/9 22:48:13
2019/11/13 23:00:02 2019/8/5 15:52:44
2017/9/7 20:44:29   2017/9/6 23:23:38
2017/10/27 22:27:26 2017/10/27 22:07:40
2017/10/27 22:23:04 2017/10/27 22:20:45
2019/12/28 21:54:11 2019/12/28 21:52:45
2019/12/28 21:53:49 2019/12/28 21:52:52
2019/12/11 16:19:41 2019/12/11 16:19:41
2019/12/28 21:53:39 2019/12/28 21:53:39
2017/10/7 19:49:02  2017/10/7 19:49:02
2017/12/18 21:40:31 2017/12/18 21:40:31
2019/4/30 8:21:48   2019/4/30 8:21:48
2019/7/31 21:09:02  2019/7/31 21:09:02
2018/4/29 19:04:11  2018/4/29 19:04:11
2017/10/10 20:45:24 2017/10/10 20:45:24

可以省略 Property 参数名称,如下所示:

Sort-Object LastWriteTime, Name

此外,可以通过其内置别名 sort 来引用 Sort-Object:

sort LastWriteTime, Name

用于排序的哈希表中的键可以缩写为:

Sort-Object @{ e = 'LastWriteTime'; d = $true }, @{ e = 'Name'; a = $true }

在此示例中,e 代表 Expression ,d 代表 Descending ,a 代表 Ascending 。
为了提高可读性,可以将哈希表置于一个单独的变量中:

$order = @(
  @{ Expression = 'LastWriteTime'; Descending = $true }
  @{ Expression = 'Name'; Ascending = $true }
)

Get-ChildItem |
  Sort-Object $order |
  Format-Table LastWriteTime, Name


 

声明:以上内容为个人学习过程的笔记或总结,不保证完全正确,请谨慎参考使用。部分内容整理自互联网,官方文档等,恕不一一列出,如果有侵犯到您的权益,请联系我们删除。