从非特权CMD经PowerShell执行高权限tbcon命令参数报错求助
解决非特权CMD经PowerShell提权执行带参数命令的空格解析问题
最终可用的CMD命令
powershell -Command "Start-Process -Verb RunAs powershell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -Command \"Set-Location ''\"\"你的目标目录路径\"\"''; & ''\"\"tbcon.exe的完整路径\"\"'' -run:\"\"a2lmerger --optionsfile ''\"\"_gen\swb\module\asap2\opt\a2lmerger_internal.opt\"\"''\"'"
问题根源
你遇到的[tbcon] ERROR - Invalid argument: '--optionsfile'错误,本质是CMD与PowerShell的引号解析规则冲突:
- 单独在PowerShell中执行时,
-run:"a2lmerger --optionsfile ..."能被正确识别为「将整个a2lmerger --optionsfile ...作为-run的参数值」 - 从CMD调用PowerShell并提权时,多层命令嵌套导致引号被错误解析,
--optionsfile被拆分成tbcon的独立参数,而非a2lmerger的参数
命令拆解与适配带空格路径
命令中的每一层引号都是为了适配不同环境的解析规则,核心逻辑如下:
- 提权触发:通过
Start-Process -Verb RunAs启动管理员权限的PowerShell进程,触发UAC弹窗 - 路径切换:
Set-Location ''\"\"你的目标目录路径\"\"''使用嵌套引号包裹路径,确保带空格的目录被正确识别(比如C:\My Projects\Demo) - 程序调用:
& ''\"\"tbcon.exe的完整路径\"\"''用&(PowerShell调用操作符)执行外部程序,同样用嵌套引号处理带空格的程序路径(比如C:\Program Files\TBCon\tbcon.exe) - 参数传递:
-run:\"\"a2lmerger --optionsfile ''\"\"_gen\swb\module\asap2\opt\a2lmerger_internal.opt\"\"''\"通过多层转义,确保a2lmerger --optionsfile ...作为一个完整的参数值传递给tbcon,避免被空格拆分
带空格路径的实例
假设目标目录为D:\My Workspace\Project X,tbcon路径为C:\Program Files\TBCon\tbcon.exe,替换后的命令如下:
powershell -Command "Start-Process -Verb RunAs powershell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -Command \"Set-Location ''\"\"D:\My Workspace\Project X\"\"''; & ''\"\"C:\Program Files\TBCon\tbcon.exe\"\"'' -run:\"\"a2lmerger --optionsfile ''\"\"_gen\swb\module\asap2\opt\a2lmerger_internal.opt\"\"''\"'"
内容的提问来源于stack exchange,提问作者Jetboy
相关产品推荐
相关产品推荐

