在 PowerShell 中將命令拆分為多行

Marion Paul Kenneth Mendoza 2023年1月30日
  1. Windows PowerShell 多行命令
  2. 使用特定的操作符斷開長行程式碼
在 PowerShell 中將命令拆分為多行

可讀程式碼很容易將其功能目的傳達給使用者。變數名稱和方法名稱應具有適當的命名約定以提高程式碼的可讀性。其他有助於程式碼可讀性的屬性是一致的縮排和格式樣式。Windows PowerShell 多行命令有助於將長命令列拆分為多個語句以提高可讀性。

在 Windows PowerShell 中,可以使用反引號字元輕鬆建立多行命令,以拆分長或單行命令多行語句。

反引號字元用作一種轉義字元。它轉義換行符並導致行繼續。

本文將解釋 Windows PowerShell 多行命令將長命令拆分為多行的重要性。

Windows PowerShell 多行命令

要將長命令拆分為多行,請使用反引號字元將其拆分為多行。

例如,我們要獲取本地計算機上的可用磁碟空間資訊。不幸的是,獲取此特定資訊的指令碼是一個擴充套件命令,因此難以閱讀和管理。

示例程式碼:

Get-WmiObject -Class win32_logicaldisk | Format-Table DeviceId, MediaType, @{n="Size";e={[math]::Round($_.Size/1GB,2)}},@{n="FreeSpace";e={[math]::Round($_.FreeSpace/1GB,2)}}

看起來本文中的語法是拆分的,但是當複製到命令列介面時,上面的示例是一個很長的單行指令碼。

我們可以使用 Windows PowerShell 反引號字元輕鬆地將長命令拆分為多行,以便在給定命令中換行。

示例程式碼:

Get-WmiObject -Class win32_logicaldisk `
| Format-Table DeviceId, `MediaType, @{n="Size";e={[Math]::Round($_.Size/1GB,2)}}, `
@{n="FreeSpace";e={[Math]::Round($_.FreeSpace/1GB,2)}}

在上面的示例中,我們使用空格將長命令拆分為多行,然後在要拆分的末尾處使用反引號字元。請記住,反引號和換行符之間不能有任何字元,包括空格。

程式碼結構在 Windows PowerShell 中使用多行命令易於閱讀和維護。但是,通常不推薦使用反引號字元,因為該字元難以閱讀並且會引起錯誤。因此,我們有另一種方法來破壞長行程式碼。

使用特定的操作符斷開長行程式碼

通常,當命令在該點在語法上無法完成時,你會獲得自動行繼續。

一個例子是啟動一個新的管道元素(|)。管道將毫無問題地工作,因為在管道運算子之後,該命令由於缺少另一個管道元素而無法完成。因此,我們的直譯器所做的是在以下命令列中查詢下一個管道元素。

示例程式碼:

Get-WmiObject -Class win32_logicaldisk | 
Format-Table DeviceId, MediaType, @{n="Size";e={[math]::Round($_.Size/1GB,2)}},@{n="FreeSpace";e={[math]::Round($_.FreeSpace/1GB,2)}}

逗號 (,) 也可以在某些上下文中使用,例如管道運算子。

示例程式碼:

Get-WmiObject -Class win32_logicaldisk | 
Format-Table DeviceId, MediaType, 
@{n="Size"; e={[Math]::Round($_.Size/1GB,2)}},
@{n="FreeSpace"; e={[Math]::Round($_.FreeSpace/1GB,2)}}

此外,定義指令碼塊時的大括號 ({}) 將允許直接續行。

示例程式碼:

Get-WmiObject -Class win32_logicaldisk | 
Format-Table DeviceId, MediaType, 
@{
    n="Size"; e={
        [Math]::Round($_.Size/1GB,2)
    }
},
@{
    n="FreeSpace";e={
        [Math]::Round($_.FreeSpace/1GB,2)
    }
}

使用上述技術,我們現在可以觀察到我們的示例程式碼更易於閱讀,並且我們在不使用反引號字元的情況下進行了管理。

Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn