2016-10-04 82 views
1

我的變量輸出可能有100行。這是怎麼出現的:從存儲在變量中的命令輸出中刪除空行

VOLUME #28 
drive letter  = I: 
dev_name   = \Device\HarddiskVolume8 
guid_name   = \\?\Volume{35596739-d159-11e4-80c1-0050569cf1fd} 
size    = 5117 MB. 
disk tag   = 0x000000304f65e304. 
descriptor   = \\.\Volume{35596739-d159-11e4-80c1-0050569cf1fd} 

**** ERROR: DATA NOT AVAILABLE [0x00000100] **** 

VOLUME #28 
drive letter  = B: 
dev_name   = \Device\HarddiskVolume63 
guid_name   = \\?\Volume{3bf4ee0a-d050-11e4-80be-0050569cf1fd} 
size    = 81917 MB. 
disk tag   = 0x000000304f65e304. 
descriptor   = \\.\Volume{3bf4ee0a-d050-11e4-80be-0050569cf1fd} 

**** ERROR: DATA NOT AVAILABLE [0x00000100] **** 

這是我希望它看起來像:

VOLUME #29 
drive letter  = I: 
dev_name   = \Device\HarddiskVolume8 
guid_name   = \\?\Volume{35596739-d159-11e4-80c1-0050569cf1fd} 
size    = 5117 MB. 
disk tag   = 0x000000304f65e304. 
descriptor   = \\.\Volume{35596739-d159-11e4-80c1-0050569cf1fd} 
**** ERROR: DATA NOT AVAILABLE [0x00000100] **** 
VOLUME #28 
drive letter  = B: 
dev_name   = \Device\HarddiskVolume63 
guid_name   = \\?\Volume{3bf4ee0a-d050-11e4-80be-0050569cf1fd} 
size    = 81917 MB. 
disk tag   = 0x000000304f65e304. 
descriptor   = \\.\Volume{3bf4ee0a-d050-11e4-80be-0050569cf1fd} 
**** ERROR: DATA NOT AVAILABLE [0x00000100] **** 

我檢查,看看是否有一種方法可以消除在空行變量。謝謝!

+0

它不是一個數組。我將命令輸出轉換爲一個變量,輸出如上所示。 – jes

+0

檢查它:'$ yourvariable.GetType()'。外部命令輸出通常是一個數組。 – wOxxOm

+0

我同意。我們也可以使它成爲一個數組。 $ c =(命令) – jes

回答

2

你可以做到這一點與正則表達式:

(?m)^\s*?\n 

(?m)設置多行標誌,^在一行的開始斷言位置,零和無限的時間之間\s*?匹配任何空白字符(非貪婪)和\n與換行符匹配。


實施例:

$myVar = 
@' 
VOLUME #28 
drive letter  = I: 
dev_name   = \Device\HarddiskVolume8 
guid_name   = \\?\Volume{35596739-d159-11e4-80c1-0050569cf1fd} 
size    = 5117 MB. 
disk tag   = 0x000000304f65e304. 
descriptor   = \\.\Volume{35596739-d159-11e4-80c1-0050569cf1fd} 

**** ERROR: DATA NOT AVAILABLE [0x00000100] **** 

VOLUME #28 
drive letter  = B: 
dev_name   = \Device\HarddiskVolume63 
guid_name   = \\?\Volume{3bf4ee0a-d050-11e4-80be-0050569cf1fd} 
size    = 81917 MB. 
disk tag   = 0x000000304f65e304. 
descriptor   = \\.\Volume{3bf4ee0a-d050-11e4-80be-0050569cf1fd} 

**** ERROR: DATA NOT AVAILABLE [0x00000100] **** 
'@ 

$myVar -replace '(?m)^\s*?\n' 

輸出:

VOLUME #28 
drive letter  = I: 
dev_name   = \Device\HarddiskVolume8 
guid_name   = \\?\Volume{35596739-d159-11e4-80c1-0050569cf1fd} 
size    = 5117 MB. 
disk tag   = 0x000000304f65e304. 
descriptor   = \\.\Volume{35596739-d159-11e4-80c1-0050569cf1fd} 
**** ERROR: DATA NOT AVAILABLE [0x00000100] **** 
VOLUME #28 
drive letter  = B: 
dev_name   = \Device\HarddiskVolume63 
guid_name   = \\?\Volume{3bf4ee0a-d050-11e4-80be-0050569cf1fd} 
size    = 81917 MB. 
disk tag   = 0x000000304f65e304. 
descriptor   = \\.\Volume{3bf4ee0a-d050-11e4-80be-0050569cf1fd} 
**** ERROR: DATA NOT AVAILABLE [0x00000100] **** 
+0

由於這個答案不會專門處理OP的數據,但在其他情況下可能會有用,您可能需要添加說明:'如果您的變量是由$ myVar.GetType()確認的單個多行字符串,則顯示Name = String' – wOxxOm

0

你的變量是來自外部工具的輸出,所以它是一個數組,你可以看到通過檢查其類型:$output.GetType()將顯示System.Object[]這意味着一個數組。

只需使用一個數組比較運算符:

$noBlanks = $output -ne '' 

或者正則表達式也過濾掉只用空格和製表線:

$noBlanks = $output -notmatch '^\s*$' 
+0

對不起,這裏是變量定義 - '$ volCkeck =&「C:\ Script \ command.exe」v' 這個變量的輸出將粘貼在問題中。試過這些建議。但不刪除空行。 :| – jes

+0

我無法重現你的問題:''list disk'| out-file($ env:TEMP +'\ 1.txt')-encoding ASCII; $ output =&「diskpart」/ s($ env:TEMP +'\ 1.txt'); $ output -ne'''無論如何,答案是正確的,所以問題是別的。 – wOxxOm

+0

謝謝!我們可以做'$ list = Get-Disk'嗎?這將在變量輸出中有空格。如果我這樣做,'$ listdisk = $ list -ne'''或'$ listdisk = $ list -nomatch'^ \ s * $'',不會刪除空行.. – jes