【问题标题】:Using wildcard in a batch file with dism function在具有 dism 功能的批处理文件中使用通配符
【发布时间】:2018-04-25 19:54:54
【问题描述】:

我将如何为此使用通配符:

dism /online /remove-package /PackageName:Package_for_KB2952664~31bf3856ad364e35~amd64~~6.1.16.0

我试过这个:

dism /online /remove-package /PackageName:Package_for_KB2952664~31bf3856ad364e35~amd64~~6.*.*.*

【问题讨论】:

  • 解析包含的包。确定缺少的信息。也许使用Find "2952664"

标签: powershell package wildcard dism


【解决方案1】:

您不能在 /PackageName 参数中使用通配符。您可以检索完整的包列表,在结果集中搜索所需的包,然后针对每个结果运行删除命令。

首先,获取所有的包:

$packages = dism /online /Get-Packages

接下来,使用正则表达式仅查找您关心的包:

$matched_packages = $packages | Select-String "Package_for_KB2952664~31bf3856ad364e35~amd64~~.*$"

在上述命令中,如果需要,可以将正则表达式 Package_for_KB2952664~31bf3856ad364e35~amd64~~.*$ 更改为更合适的正则表达式以进行搜索。

接下来,过滤到匹配项中的值,以便更容易迭代:

$matched_values = $matched_packages | ForEach-Object { $_.Matches[0].Value }

最后,在每场比赛上运行remove-package 命令:

$matched_values | % {dism /online /remove-package /PackageName:$_}

如果您愿意,可以将其设为单线:

dism /online /Get-Packages | Select-String "Package_for_KB2952664~31bf3856ad364e35~amd64~~.*$" | ForEach-Object { $_.Matches[0].Value } | % {dism /online /remove-package /PackageName:$_}

可能有更简单的方法来构建这些命令(我的 PowerShell 有点生疏),但上面的示例将为正则表达式中指定的每个已安装版本的包执行 remove-package 命令。

【讨论】:

    猜你喜欢
    • 2011-12-18
    • 1970-01-01
    • 2013-06-29
    • 2011-05-15
    • 2019-05-14
    • 2015-08-18
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    相关资源
    最近更新 更多