如何避免Windows CMD中Call命令因参数含/?触发自身帮助信息?
解决CMD中Call命令因参数含/?触发帮助的问题
当主批处理用call SubBatch %*调用子批处理时,只要参数里带有/?(哪怕是嵌在字符串中间,比如abc/?def),都会触发Call命令的帮助信息,而非把参数正常传给子批处理。以下是几个无需手动给参数加引号的解决办法:
方法1:用延迟扩展传递参数
修改main.bat代码,启用延迟扩展后用!*!替代%*,让所有参数作为整体传递,避免Call提前解析到/?:
@echo off setlocal enabledelayedexpansion echo Starting my batch file call SubBatch !*! endlocal
方法2:遍历参数重新构造
手动遍历所有传入参数,给每个参数添加引号后拼接成新参数串,确保/?被当作子批处理的参数:
@echo off setlocal enabledelayedexpansion set "args=" for %%a in (%*) do set "args=!args! "%%~a"" echo Starting my batch file call SubBatch %args% endlocal
方法3:用cmd /c间接调用
绕过Call命令的参数解析逻辑,直接用cmd /c执行子批处理,参数会被正常传递给子批处理:
@echo off echo Starting my batch file cmd /c SubBatch %*
内容的提问来源于stack exchange,提问作者RMurp
相关产品推荐
相关产品推荐

