首页 > 解决方案 > %0|%0 是如何工作的?

问题描述

我看过一篇关于如何的帖子%0|%0,但我仍然不太确定,是循环自己循环还是打开另一个文件再次运行并自行删除?

它可以在批处理文件中循环吗?我现在无法使用我的电脑进行实验。

标签: loopsbatch-file

解决方案


你说:“我现在不能用我的电脑做实验”

您确定不是:“我对此进行了实验,所以我现在无法使用我的电脑”:)

除了笑话,%0|%0它几乎是一种叉形炸弹。

|管道获取第一个命令的输出并将其发送到管道之后的下一个命令。

在这种情况下,%0|%0您将批处理文件通过管道传输到自身,创建一个永久递归循环,该循环将快速消耗资源并最终使您的系统崩溃。

试图说明这里发生了什么。

假设批处理文件看起来dummy.cmd%0|%0这样:

D:\dummy.cmd | d:\dummy.cmd

启动它将启动一个循环,它会在其中重复启动自身,类似于:

                                         dummy.cmd ..etc..             
                          dummy.cmd ->   dummy.cmd ..etc..       
             dummy.cmd ->
                                         dummy.cmd ..etc..
                          dummy.cmd ->   dummy.cmd ..etc..
dummy.cmd -> 
                          dummy.cmd ->   dummy.cmd ..etc..
             dummy.cmd ->                dummy.cmd ..etc..
          
                          dummy.cmd ->   dummy.cmd ..etc..
                                         dummy.cmd ..etc..

但是您需要了解的是,它不仅仅是一个进程在循环中生成另一个进程,每个生成的进程都会再次重复自身。所以第一个进程再创建两个,这两个每个再创建两个,这四个每个创建两个,等等

每个管道操作都派生到cmd初始进程窗口内部的进程。

因此,如果您有幸tasklist在此运行期间运行了一段时间,您将看到在后台创建的混乱与cmd启动进程的速度。

参见叉形炸弹


推荐阅读