Windowsbatch file末尾的简单插入符号(^)会占用所有内存

这个简单的batch file按照相对较短的顺序占用了Windows 7(x64)上的所有可用内存。 这是怎么回事? 可以采取哪些防范措施来防范呢?

any-invalid-command-you-like-here ^ 

显然有必要的前提条件:

  • 脱字号^是文件中最后一个东西,并且脚本没有以换行符结尾
  • 脱字符前面至less有2个空格或字符,例如,如果下面的点代表空格,内存泄漏将不会被触发.^ ,而这个将会..^ (只是缓慢地)

在这个Process Explorer屏幕截图中,脚本已经运行了大约30秒,耗用了2.9GB,而且还在稳步攀升:

内存消耗2.9GB,仍在攀升

如果你要试验这个,确保你可以进入closures窗口[X]控制,或者让一个任务pipe理器或进程pipe理器启动并准备好,因为Ctrl-CCtrl-BreakAlt-F4 没有任何作用

看起来多个插入符号会导致内存使用速度加快得更快。 我第一次遇到这种情况时,在1到2分钟内没有足够的内存来完成像Alt-Tab这样的简单的事情,甚至3个手指的致敬Ctrl-Alt-Del也是无效的。 我不得不关机。

Solutions Collecting From Web of "Windowsbatch file末尾的简单插入符号(^)会占用所有内存"

思考

这个(从我的理解)的原因是由于cmd解释器寻找一个字符逃脱,因为^是批转义字符。 而不是在这个场景中正确识别文件eof的结尾,cmd只是在寻找要逃跑的字符时保持循环和初始化。

转载Windows 8 Pro(64)与cc^^^ (多克拉用于加速泄漏)。

试验

cc^无限循环并且泄漏非常缓慢。

cc^^崩溃,正常的无效命令错误。

cc^^^无限循环,泄漏速度更快。

cc ^无限循环并且泄漏非常缓慢。

cc ^^崩溃,正常的无效命令错误。

cc ^^^无限循环,泄漏速度更快。

cc"^崩溃,正常的无效命令错误。

cc"^^崩溃,正常的无效命令错误。

cc"^^^与正常的无效命令错误崩溃。

笔记

  • 只有无限循环和克拉的情况下才会使用(在引号之外)。 当引用添加脚本崩溃与标准的无效命令错误。
  • 批处理文件编码为UTF-8ASCII时,只有无限循环和泄漏。 当UTF-16 ,脚本崩溃,标准的无效命令错误。
  • 必须是克拉数量不能超过克拉。

注意事项

  • 确保没有批处理脚本以carat ^ (0x5E)或至少克拉数为结尾。
  • 或者用UTF-16编码。