在批处理文件中屏蔽 PowerShell Get-ItemPropertyValue 单行
Posted
技术标签:
【中文标题】在批处理文件中屏蔽 PowerShell Get-ItemPropertyValue 单行【英文标题】:mask PowerShell Get-ItemPropertyValue one-liner in batch file 【发布时间】:2021-09-24 13:25:59 【问题描述】:我在几个批处理脚本中使用 PowerShell 单行,但似乎未能正确转义以下一个:
如果未定义语言 ( for /f "usebackq" %%v in (`PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "(Get-ItemPropertyValue -Path 'HKCU:Control Panel\International\' -Name 'LocaleName').Split('-' )[0]"`) 设置 LANGUAGE=%%v )我验证了在我的批处理文件中失败的正是这一行。代码背后的想法是从注册表中读取值并将连字符之前的第一部分分配给环境变量。因此,如果注册表值为“de-DE”,则 LANGUAGE 的值应为“de”。
【问题讨论】:
【参考方案1】:我无法重现您提供的代码的问题。
不过,我建议您考虑其他方法 - 比较这些示例并注意哪个执行速度最快
@Echo off
Setlocal
For /f "delims=" %%v in ('where /r "%Windir%\SysWOW64\WindowsPowerShell" powershell.exe')Do Set "powershell=%%v -nologo -noprofile"
Echo(%TIME%
For /f "usebackq" %%v in (`PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "(Get-ItemPropertyValue -Path 'HKCU:Control Panel\International\' -Name 'LocaleName').Split('-')[0]"`) do set "LANGUAGE=%%v"
Set LANG
Echo(%TIME%
For /f "usebackq tokens=1 Delims=-" %%G in (`
%powershell% -c "Get-ItemPropertyValue -Path 'HKCU:Control Panel\International\' -Name 'LocaleName'"
`)Do Set "LANGUAGE=%%G"
Set LANG
Echo(%TIME%
For /f "Skip=1 tokens=3 Delims=- " %%G in ('reg query "HKEY_CURRENT_USER\Control Panel\International" /v localename')Do Set "LANGUAGE=%%G"
Set LANG
Echo(%TIME%
Endlocal
Goto:Eof
【讨论】:
以上是关于在批处理文件中屏蔽 PowerShell Get-ItemPropertyValue 单行的主要内容,如果未能解决你的问题,请参考以下文章
使用 PowerShell 2.0 在远程计算机上运行批处理文件