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

如何使正则表达式与Powershell上的var完全一致,powershell,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 -pat

另一个似乎还没有任何在线解决方案

我有一个包含所有卷的文件,我有一个变量,用户在其中写入一个卷,如“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
所以正则表达式应该是“选择字符串模式”,这是我到目前为止尝试过的:

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

多谢各位

这就是为什么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

但是如果你打算在脚本中更多地使用它,不要将其转换为文本,这只会使以后的工作更加困难。

它也会返回我第一行,DriveLetter和Friendly也有“D”sYeah,这很有效,非常感谢,我如何才能将其作为“已解决”?酷:)我已将我的评论转换为正确的答案,您可以向上投票/勾选该选项,将其标记为已解决。