批处理文件中调用PowerShell Get-ItemPropertyValue单行命令的转义问题
问题根因
你这段代码运行失败的核心原因是批处理的括号块解析规则冲突:
- 外层使用了
if not defined LANGUAGE (的括号包裹代码块,批处理解析器会把代码中所有未转义的)都识别为这个if块的结束标记,直接打断语法结构 - 你写的PowerShell命令里多处出现
),没有做批处理级别的转义,就会被误判为块结束符,导致语法错误
修正后可直接运行的代码
if not defined LANGUAGE ( 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" )
补充说明
- 如果直接在CMD命令行中测试这段逻辑,需要把
%%v替换为%v - 取值后可以加
echo %LANGUAGE%验证结果是否符合预期,比如区域设置为德语时会输出de
内容的提问来源于stack exchange,提问作者Surak
相关产品推荐
相关产品推荐

