我在这里看到了我的部分问题的答案,但没有一个完全覆盖它。如果我错过了,请道歉。
这就是我所拥有的:一个批处理文件,它调用其他批处理文件,删除最后的文件,然后重新启动计算机。我在我设置的新机器上使用它来进行某些配置。现在,我必须选择多个文件,将它们放在新桌面上,然后在那里运行它们。
我修改了批处理,将其从我放在桌面上的单个目录中运行,并在文件完成时删除了该文件夹,但它失去了重启的能力。以下是最后3行:
git pull --rebase master
执行此操作的最佳方法是什么?我是否创建了一个新的批处理文件,除了上面的最后3个操作之外什么都不做(我列出了第一个,因为我假设我必须首先离开目录才能删除它)?如果是这样,它真的只需要那三行吗?与第一个操作一样,将有问题的文件复制到桌面,然后在更改目录后将其作为最后一个操作执行?
很抱歉,如果我发布这篇文章过于冗长,只是尽量提供尽可能详细的信息。
答案 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
来延迟它,以便您的脚本有几秒钟的时间来完成。