2016-10-04 83 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