Windows System32多语言路径的PowerShell通配符适配需求
解决方案:适配多语言环境下的Prndrvr.vbs路径
方法一:通过系统语言代码动态拼接路径
直接获取当前系统的UI语言代码,精准定位对应目录,这是最可靠的方式:
- CMD命令实现:
@echo off :: 获取当前系统语言代码(如en-GB、de-DE) for /f "tokens=2 delims==" %%G in ('reg query "HKCU\Control Panel\International" /v LocaleName') do set "langCode=%%G" :: 执行脚本 cscript "C:\Windows\System32\Printing_Admin_Scripts\%langCode%\Prndrvr.vbs" [你的打印机安装参数]
- PowerShell实现:
$langCode = (Get-Culture).Name cscript "C:\Windows\System32\Printing_Admin_Scripts\$langCode\Prndrvr.vbs" [你的打印机安装参数]
方法二:遍历匹配语言目录查找脚本
如果不确定系统语言,或者需要兼容多语言目录存在的情况,可以遍历Printing_Admin_Scripts下符合xx-xx格式的目录,找到存在Prndrvr.vbs的路径并执行:
@echo off for /d %%L in ("C:\Windows\System32\Printing_Admin_Scripts\*-*") do ( if exist "%%L\Prndrvr.vbs" ( cscript "%%L\Prndrvr.vbs" [你的打印机安装参数] goto :EXIT_LOOP ) ) :EXIT_LOOP
注:这个逻辑会执行第一个找到的脚本,若存在多个语言目录,可根据需求调整循环逻辑。
方法三:递归查找脚本文件
直接递归查找System32下的Prndrvr.vbs文件,无需关注语言目录:
@echo off for /f "delims=" %%F in ('where /r "C:\Windows\System32" Prndrvr.vbs') do ( cscript "%%F" [你的打印机安装参数] goto :EXIT_LOOP ) :EXIT_LOOP
为什么直接用*通配符无效?
Windows CMD中,*通配符无法直接解析引号包裹路径中的目录部分(如"C:\...\*\Prndrvr.vbs"),因为CMD的通配符匹配逻辑仅针对文件名,无法直接作用于目录层级,因此需要通过上述循环或查找命令来间接处理。
内容的提问来源于stack exchange,提问作者fil
相关产品推荐
相关产品推荐

