将.ps1转换为.bat运行未触发cmd.exe字符长度上限,原因是什么?
脚本超长度仍能正常运行的核心原因如下:
- 你观测到的命令截断只是
cmd.exe的屏幕回显限制,而非实际运行时的参数被截断。cmd在打印命令行内容时存在单行显示长度上限,超出部分不会输出到窗口,但内部解析、传递给PowerShell进程的参数是完整的,你单独复制回显的截断内容解码自然会发现内容缺失。 - 大家熟知的8191字符是Windows XP及更早版本中,
cmd.exe对用户交互式输入的命令行的长度限制,对于批处理文件内部定义的命令、以及传递给新进程的参数,Windows Vista及以后版本的实际上限为32767字符,远高于旧版限制。 - 常用的PowerShell转批处理方案都会将原始PS脚本编码为Base64字符串,再通过PowerShell的
-EncodedCommand参数传递,Base64编码的膨胀比例为4/3,只要你原始的.ps1脚本体积不超过约24KB,编码后的字符串长度都不会触及32767的上限,完全可以正常运行。
内容的提问来源于stack exchange,提问作者immobile2
相关产品推荐
相关产品推荐

