PowerShell
在Windows10中的地位被慢慢提升,在最近的系統版本中,Powershell已經在資源管理器中徹底代替之前的cmd
出現。因此我本人也逐漸把運行命令的習慣向PowerShell遷移。
在使用過程當中發現PowerShell雖然默認支持相似Unix系統的ls
命令,可是其默認展現方式是很是詳細的,包括Mode
,LastWriteTime
,Length
和 Name
共4個字段。這裏的ls
實際上是PowerShell命令Get-ChildItem
的一個別名,顯示效果以下:shell
PS D:\apktool> get-childitem Directory: D:\apktool Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2/23/2016 20:15 159 apktool.bat -a---- 2/23/2016 20:16 6433219 apktool.jar
而在實際工做中,其實我是比較喜歡用ls
命令只顯示文件名。那麼在PowerShell中默認的命令須要輸入ls -Name
或Get-ChildItem -Name
來實現。
下面來講說一些關於PowerShell中設置命令別名Alias的經常使用相關命令和方法:api
如下命令中的大小寫不敏感:session
Get-Alias
或gal
PS C:\> Get-Alias CommandType Name ----------- ---- Alias % -> ForEach-Object Alias ? -> Where-Object Alias ac -> Add-Content Alias asnp -> Add-PSSnapin
ls
的原命令:> Get-Alias ls
Get-ChildItem
的別名:> Get-Alias -Definition Get-ChildItem
使用Set-Alias
命令建立或更改別名。注意使用該命令設定的別名只在目前的Windows PowerShell session中生效。也就是說在關閉此會話後這個別名將會失效。如何建立永久的別名?往下看。
如爲Get-ChildItem
命令設定別名list
:code
PS C:\> Set-Alias -Name list -Value get-childitem
或簡單一些:資源
PS C:\> Set-Alias list get-childitem
注意:對於系統默認設定的別名,不可在刪除此別名以前從新對這個別名賦值。
另外,PowerShell中還有一個命令New-Alias
,該命令和Set-Alias
基本功能同樣,只是前者不能更改別名,只能建立別名。當試圖使用New-Alias
命令建立已存在的別名時,會報錯。get
若是命令帶參數如想爲Get-ChildItem -Name
設定別名爲ls
則咱們須要兩步,第一步爲這個帶參數原命令設定一箇中間function
,第二步爲這個function指定別名:cmd
PS C:\> function getlist {Get-ChildItem -Name} PS C:\> Set-Alias ls getlist
使用Remove-Item alias
命令刪除已設定的別名。
如刪除別名ls
:it
PS C:\> Remove-Item alias:\ls
在PowerShell中直接使用Set-Alias
或New-Alias
命令建立的別名在關閉此Session後即會失效,防止此現象的方法是將此命令寫入Windows PowerShell profile
文件。
查看此文件在計算機中的位置:io
PS C:\> $profile
通常該文件在沒有建立前是不存在的,使用如下命令爲當前用戶建立profile命令並返回文件地址:ast
PS C:\> New-Item -Type file -Force $profile
通常建立的位置在~\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
打開文件,鍵入文件內容爲Get-ChildItem -Name
建立別名ls
:
function getFileName{ Get-ChildItem -Name } Remove-Item alias:\ls Set-Alias ls getFileName
這裏首先爲Get-ChildItem -Name
建立了方法getFileName
做爲中介,而後爲該方法賦予別名ls
,可是由於ls
是Windows PowerShell中的默認別名,所以必須先刪除再建立,因此先使用Remove-Item
再使用Set-Alias
或New-Alias
。
之後每次在打開PowerShell會話框的時候其會先讀取$profile
文件中的內容。
試試效果:
PS D:\apktool> ls apktool.bat apktool.jar