如何在批处理脚本中将PowerShell命令的返回值存储到变量?
解决批处理中调用PowerShell命令获取注册表项的问题
正确的批处理脚本
@echo off set "VAR=" for /F "delims=" %%L in ('powershell -NoLogo -NoProfile "Get-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FeatureUsage\AppSwitched | Select-Object -ExpandProperty Property | Where-Object { $_ -Match 'steamapps\\common\\Among Us\\Among Us.exe' }"') do ( set "VAR=%%L" ) echo %VAR%
问题分析
原脚本存在三个核心错误:
- 循环变量格式错误:批处理脚本中
for /F的循环变量必须使用双百分号(%%L),而非CMD命令行里的单百分号(%L)。 - 命令执行逻辑错误:将PowerShell命令存入变量后用
(%psScript%)调用时,批处理会把变量内容当作文件名列表解析,而非要执行的命令。必须用单引号('命令内容')包裹命令,让for /F执行该命令并捕获输出。 - 多余转义符:原命令中的
^是CMD命令行下转义管道符|用的,在批处理的单引号包裹模式下,无需转义|,可直接去掉。
内容的提问来源于stack exchange,提问作者sirzento
相关产品推荐
相关产品推荐

