批处理文件删除自己,删除文件夹,并重新启动计算机

时间:2015-05-27 16:10:16

标签: batch-file restart

我在这里看到了我的部分问题的答案,但没有一个完全覆盖它。如果我错过了,请道歉。

这就是我所拥有的:一个批处理文件,它调用其他批处理文件,删除最后的文件,然后重新启动计算机。我在我设置的新机器上使用它来进行某些配置。现在,我必须选择多个文件,将它们放在新桌面上,然后在那里运行它们。

我修改了批处理,将其从我放在桌面上的单个目录中运行,并在文件完成时删除了该文件夹,但它失去了重启的能力。以下是最后3行:

git pull --rebase master

执行此操作的最佳方法是什么?我是否创建了一个新的批处理文件,除了上面的最后3个操作之外什么都不做(我列出了第一个,因为我假设我必须首先离开目录才能删除它)?如果是这样,它真的只需要那三行吗?与第一个操作一样,将有问题的文件复制到桌面,然后在更改目录后将其作为最后一个操作执行?

很抱歉,如果我发布这篇文章过于冗长,只是尽量提供尽可能详细的信息。

2 个答案:

答案 0 :(得分:3)

批处理文件是逐行读取和执行的,因此您无法以这种方式执行该代码。但是,首先读取/解析代码块(括在括号中的几行),然后执行整个块,因此问题的解决方案如下:

(
cd C:\Users\XXXX\Desktop
RD /S /Q "C:\Users\XXXX\Desktop\YYYYYYYYY"
del "%~F0"
shutdown -r
)

当然,当cmd.exe尝试读取下一行并且批处理文件不再存在时,此方法将产生错误消息,但该消息在这种情况下并不重要

答案 1 :(得分:1)

批处理文件是逐行读取的,因此如果在脚本完成之前删除批处理文件,则无法读取下一行。您可以使用以下脚本轻松演示:

@echo off 
echo Beginning
del %0.bat
echo End

从命令提示符运行脚本,您将看到它从不回声"结束"并给你一个错误"无法找到批处理文件。"因此,如果批处理文件位于要删除的目录中,则需要将其移动到其他地方,或者像您说的那样,创建不同的批处理脚本。

其次,我在测试中发现你必须将.bat扩展名添加到%0上,如上面的脚本所示,以便删除该文件。

最后,如果您发出关闭系统的命令,它将开始终止进程​​,您的cmd会话就是其中之一。因此,您需要使用shutdown /t:5 /r来延迟它,以便您的脚本有几秒钟的时间来完成。