我需要编写一个删除自身的批处理文件,批处理文件的文件夹中的所有文件以及存储批处理文件的文件夹。我创建了一个简单的.bat,但它不会删除批处理文件夹。
我的错误在哪里?
@echo off
%~d0
cd %~d0%~p0
md %appdata%\UploadFiles
@xcopy "*.zip" "%appdata%\UploadFiles" /e /i /q /y
@RD /S /Q "%~dp0"
答案 0 :(得分:1)
您可以使用此代码:
@echo off
cd /D "%~dp0"
md "%appdata%\UploadFiles" 2>nul
xcopy "*.zip" "%appdata%\UploadFiles" /e /i /q /y
echo rd /S /Q "%~dp0">"%TEMP%\%~nx0"
echo del "%TEMP%\%~nx0">>"%TEMP%\%~nx0"
cd /D "%TEMP%"
"%TEMP%\%~nx0"
由于选项/D
,批处理文件将第一个当前目录设置为独立于当前驱动器的批处理文件的目录。
接下来执行写入此批处理文件的命令。
然后批处理文件在目录中为临时文件创建另一个批处理文件,该文件删除批处理文件的目录,最后删除临时文件目录中创建的批处理文件。
当前目录再次更改为临时文件目录,因为Windows不允许将任何正在运行的进程使用的目录删除为当前目录。
最后执行创建的批处理文件,删除自身会导致错误消息,因为命令处理器cmd.exe
突然无法再找到批处理文件。但是,根据批处理文件的启动方式,此错误消息不可见,当然可以始终忽略。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
call /?
解释%~dp0
和%~nx0
cd /?
del /?
echo /?
md /?
rd /?
xcopy /?
另请阅读Microsoft关于Using command redirection operators的文章。