【问题标题】:Powershell - Matches [1] don't work with "|"Powershell - 匹配 [1] 不适用于 \"|\"
【发布时间】:2022-11-29 11:02:48
【问题描述】:

1个

这是我创建的代码的一部分:

$NameOrigin = "BP |"
$NameBackup = "Backup"
Get-CimInstance win32_logicaldisk |
 ForEach-Object{
     if ($_.VolumeName -match "^$NameOrigin(.+)" -and $_.VolumeName -notmatch "^$NameBackup(.+)" ){
         $Employee = $Matches[1]
         $FSRootOrigin = "{0}{1}" -f $_.DeviceId,'\'
     }
 }

基本上它检查是否有任何驱动器带有 "BP |" 并且在卷标中不包含单词 "Backup" 并获取该驱动器的字母。

鉴于此,如果您查看 $Employee 变量,我的想法是它会提取 "|" 之后的内容,因此我可以在脚本的另一个步骤中使用它,但是由于某种原因,当驱动器被命名时它不起作用使用"|"

$NameOrigin变量为"BP -"时,我能够提取"-"之后的信息。

为什么使用"|" 不起作用?

我该如何解决这个问题?

【问题讨论】:

  • “|”是一个正则表达式符号,意思是“或”。你可以反斜杠它。
  • 啊对了,那我怎么提到有“|”的单位呢?在卷标上并要求提取“|”之后的内容?
  • 取决于你想提取多少。你有你想要完成的事情之前和之后吗?
  • 分组后的东西? \|(.*) 并查看 $matches[1]。这是问题吗?
  • 基本上每个存储单元都遵循规则“BP | '员工姓名'”所以我需要提取“|”之后的所有内容这样我就可以获取员工的姓名,以便稍后在 robocopy 命令中使用。

标签: windows powershell


【解决方案1】:

我想答案是逃避管道,因为它是“或”的正则表达式。

$NameOrigin = "BP |"

【讨论】:

  • 该解决方案完美运行,非常感谢!
  • 谢谢。我刚到20,000。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 2019-10-02
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多