如何使正则表达式与Powershell上的var完全一致
另一个似乎还没有任何在线解决方案 我有一个包含所有卷的文件,我有一个变量,用户在其中写入一个卷,如“C”或“D”。这里的问题是,如果我写“D”,它会占用每一行有D的内容 我有以下代码:如何使正则表达式与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
$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,这很有效,非常感谢,我如何才能将其作为“已解决”?酷:)我已将我的评论转换为正确的答案,您可以向上投票/勾选该选项,将其标记为已解决。