另一个似乎没有在线任何解决方案的人。
我有一个包含我所有卷的文件,并且我有一个变量,用户在这里写一个卷,例如" 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
非常感谢!
答案 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
但如果您要在脚本中更多地使用它,请不要将其转换为文本,这样只会让以后更难处理。