0

我在几个批处理脚本中使用 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”。

4

1 回答 1

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
于 2021-09-24T14:35:31.567 回答