學習系統腳本純粹是為了提高編程效率,因為平時寫的代碼都在 E:/develop 目錄下的各個子目錄。不想敲全路徑,於是想到自定義命令。
1.開啟允許命令行執行腳本的權限
右鍵 PowerShell 選擇以管理員身份運行,輸入命令: set-executionpolicy -executionpolicy unrestricted
2.創建 prefile 文件,輸入命令: New-Item -Type file -Force $profile ,這時會創建一個 C:\Users\zbseoag\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 的 PowerShell 腳本文件。
3. PowerShell 中可以執行與 linux shell 同名的命令,是通過定義命令的別名實現的。 輸入 alias 命令,結果可見 cd 實際上是 Set-Location 命令的別名。
4.我們可以腳本格式導出這些命令,輸入: Export-Alias -Path "d:\alias.ps1" -As Script 這命令一看就懂的,哈哈。導出為 d:\alias.ps1 文件之后,打開它。找到 其中 cd 的定義行
5. 下面就可以開始寫我們自己的代碼了。腳本寫完后,重新打開 PowerShell 運行命令試試吧。腳本最后有一條添加別名 命令。
1 <# 2 切換目錄,或者是文件所在目錄 3 4 location [父級目錄別名] [目錄] 5 6 切換目錄 7 location d:/aaa 8 9 切換到文件所在目錄 10 location $profile 11 12 切換到 $profile 所在目錄 13 location -pfile 14 15 切換到桌面目錄 16 location -desktop 17 18 切換到桌面目錄下的 javafx 目錄 19 location -desktop javafx 20 21 #> 22 function location { 23 24 param( 25 [string]$path, 26 [switch] $dev, 27 [switch] $desktop, 28 [switch] $test, 29 [switch] $bat, 30 [switch] $demo, 31 [switch] $pfile 32 33 ) 34 35 $mapping = @( 36 @{ is = $dev.ToBool(); path = "E:\develop\" } 37 @{ is = $desktop.ToBool(); path = "C:\Users\zbseoag\Desktop\" } 38 @{ is = $test.ToBool() ; path = "E:\develop\test" } 39 @{ is = $bat.ToBool(); path = "E:\develop\windows\bat" } 40 @{ is = $demo.ToBool(); path = "D:\demo\" } 41 @{ is = $pfile.ToBool(); path = $profile } 42 ) 43 44 $mapping = $mapping.where({$_.is -eq $true}) 45 if($mapping){ 46 $mapping = $mapping.path 47 #若有二級目錄,則加上二級目錄結成完整目錄 48 if($path){ $mapping += $path } 49 }else{ 50 $mapping = $path 51 } 52 53 if(Test-Path $mapping){ 54 55 #如果是一個文件路徑,則獲取該文件所在目錄 56 if(!(Test-Path -PathType Container -Path $mapping)){ $mapping = Split-Path -Path $mapping } 57 Set-Location -Path $mapping 58 }else{ 59 Write-Error "Directory is not exist: $mapping" 60 } 61 62 63 64 } 65 66 67 set-alias -Name:"cd" -Value:"location" -Description:"" -Option:"AllScope"