如何在PowerShell中为ls -lrt设置别名且不破坏原有ls别名
在PowerShell里直接用New-Alias创建带空格和参数的别名是行不通的——因为PowerShell的别名规则很明确:别名名称不能包含空格,而且只能指向单个命令(或另一个别名),没法直接绑定带管道、参数的完整命令序列。这就是你之前的命令无效的原因。
接下来给你两种不破坏原有ls别名的解决方案,按需选择:
方案1:创建独立的函数+别名(简单直接)
如果你不想改动原有ls的任何行为,只是想新增一个类似ls -lrt的快捷方式,可以先定义一个实现目标功能的函数,再给它起一个简洁的别名:
# 定义实现排序功能的函数 function Get-SortedChildItemByTime { Get-ChildItem | Sort-Object -Property LastWriteTime } # 给函数起一个好记的别名,比如llrt(类似Linux里的ll) New-Alias -Name llrt -Value Get-SortedChildItemByTime
之后只要敲llrt,就能得到按最后修改时间排序的文件列表,原来的ls依然保持原样,完全不受影响。
方案2:扩展ls的功能,支持-lrt参数(更贴近Linux习惯)
如果你习惯了Linux里ls -lrt的写法,想让PowerShell里的ls也能识别-lrt参数,同时保留原有ls的所有功能,可以定义一个同名函数覆盖原别名(PowerShell中函数优先级高于别名,所以不会破坏原命令):
function ls { [CmdletBinding()] param( # 接收所有未定义的参数,传给原Get-ChildItem [Parameter(ValueFromRemainingArguments=$true)] $RemainingArgs, # 定义-lrt开关参数 [switch]$lrt ) if ($lrt) { # 如果带-lrt参数,执行排序后的结果 Get-ChildItem @RemainingArgs | Sort-Object -Property LastWriteTime } else { # 否则执行原Get-ChildItem的功能,保留所有原有参数支持 Get-ChildItem @RemainingArgs } }
这样一来:
- 敲
ls:和原来完全一样,执行Get-ChildItem - 敲
ls -lrt:得到按最后修改时间排序的列表 - 敲
ls -Recurse -Filter *.txt:依然保留原Get-ChildItem的所有参数功能,不受影响
让设置永久生效
上面的设置只是当前会话有效,如果想每次启动PowerShell都生效,把对应的函数/别名代码添加到你的PowerShell配置文件里:
- 打开配置文件:
notepad $PROFILE - 将代码粘贴进去,保存关闭
- 下次启动PowerShell时,设置就会自动加载
内容的提问来源于stack exchange,提问作者Brian Cross
相关产品推荐
相关产品推荐

