首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么-like不起作用,而-match却起作用?

为什么-like不起作用,而-match却起作用?
EN

Stack Overflow用户
提问于 2015-01-15 21:40:24
回答 1查看 240关注 0票数 0

我从这里获得了这个脚本,它可以卸载一个应用程序,但是只有在前2行使用-match而不是-like时,即使我使用了整个应用程序名。

该应用程序的名称包括版本,所以我想通配符在脚本中的名字,以支持"MyApp 2.4.1“等。谢谢!

代码语言:javascript
复制
$uninstall32 = gci "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" | 
     foreach { gp $_.PSPath } | ? { $_ -like "MyApp*" } | select UninstallString

$uninstall64 = gci "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | 
     foreach { gp $_.PSPath } | ? { $_ -like "MyApp*" } | select UninstallString

if ($uninstall64) {
   $uninstall64 = $uninstall64.UninstallString -Replace "msiexec.exe","" -Replace "/I","" -Replace "/X",""
   $uninstall64 = $uninstall64.Trim()

   Write "Uninstalling..."
   start-process "msiexec.exe" -arg "/X $uninstall64 /qb" -Wait
}

if ($uninstall32) {
   $uninstall32 = $uninstall32.UninstallString -Replace "msiexec.exe","" -Replace "/I","" -Replace "/X",""
   $uninstall32 = $uninstall32.Trim()

   Write "Uninstalling..."
   start-process "msiexec.exe" -arg "/X $uninstall32 /qb" -Wait
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-15 21:57:04

考虑下面的字符串“MyApp 2.3.4”,同时查看您所引用的两个示例之间的重要区别:

  • 就像? { $_ -like "MyApp*" }
  • 匹配? { $_ -match "MyApp*" }

-Like正在寻找一个以"MyApp“开头的字符串,后面跟着任何东西。-Match正在寻找文本"MyApp“,后面跟着任何字符。-Like会失败,因为前面有一个空格。-Match将"MyApp*“作为正则字符串处理,该字符串查找"MyApp”,后面跟着任何字符。在这种情况下,它不关心它匹配的空间。我怀疑如果您将-match也更改为? { $_ -match "^MyApp*" },就会失败,因为插入符号表示字符串的开始。

如果希望-like在本例中工作,则应将其更改为? { $_ -like "*MyApp*" }

重要

虽然我正确地解释了为什么您的比较不起作用,但是Ansgar answer首先解决了这个问题发生在您身上的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27973479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档