【问题标题】:mask PowerShell Get-ItemPropertyValue one-liner in batch file在批处理文件中屏蔽 PowerShell Get-ItemPropertyValue 单行
【发布时间】: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”。

【问题讨论】:

    标签: powershell batch-file one-liner


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2017-05-15
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2020-08-06
      相关资源
      最近更新 更多