如何将正则表达式与Powershell上的var完全一致

时间:2018-04-27 07:46:19

标签: powershell

另一个似乎没有在线任何解决方案的人。

我有一个包含我所有卷的文件,并且我有一个变量,用户在这里写一个卷,例如" C"或" D"。这里的问题是,如果我写" D"它会带我每一行都有D。

我有这段代码:

$unit=Read-Host -Prompt 'Introduce a volume name'
echo "Searching for the volume..."
Get-Volume > volumes.txt
get-content volumes.txt | select-string -pattern "$unit" > exist2.txt
gc exist2.txt | where{$_ -ne ""} > exist.txt

$disk=(Get-Content exist.txt)
echo $disk

所以正则表达式应该在" select-string -pattern"这是我到目前为止所尝试的:

get-content volumes.txt | select-string -pattern "/(^|\W)$unit($|\W)/i"

get-content volumes.txt | select-string -pattern "^[$unit]$"

get-content volumes.txt | select-string -pattern '^$unit,'

get-content volumes.txt | select-string -pattern "\$unit\b"

所有这些都没有返回任何内容,我想要返回的是D单元的行。 例如,如果我写" C"这将是什么将返回

C                                     NTFS           Fixed     Healthy      OK

非常感谢!

1 个答案:

答案 0 :(得分:1)

这就是为什么PowerShell是一个面向对象的shell,所以你不必进行这种字符串抓取。 PowerShell的方法是:

Get-Volume | where-object { $_.DriveLetter -eq $unit -or $_.FriendlyName -eq $unit }

屏幕上的输出确实包含一个标题行,但是内容中没有,命令会返回对象,如果您不对它们执行任何操作,PowerShell会将它们格式化为一个表格以便在屏幕上显示。

如果你想看不带标题

Get-Volume | 
    where-object { $_.DriveLetter -eq $unit -or $_.FriendlyName -eq $unit } | 
    format-Table -HideTableHeaders

但如果您要在脚本中更多地使用它,请不要将其转换为文本,这样只会让以后更难处理。