在具有 dism 功能的批处理文件中使用通配符

Using wildcard in a batch file with dism function

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

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.*.*.*

您不能在 /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 命令。