【问题标题】:How to delete the folder a batch file is stored and running completely?如何删除一个批处理文件存储并完全运行的文件夹?
【发布时间】:2015-12-08 15:03:23
【问题描述】:

我需要编写一个删除自身的批处理文件,批处理文件文件夹中的所有文件以及存储批处理文件的文件夹。我创建了一个简单的 .bat,但它不会删除批处理文件夹。

我的错误在哪里?

@echo off
%~d0
cd %~d0%~p0

md %appdata%\UploadFiles

@xcopy "*.zip" "%appdata%\UploadFiles" /e /i /q /y
@RD /S /Q "%~dp0"

【问题讨论】:

    标签: batch-file directory


    【解决方案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 /?

    另请阅读有关 Using command redirection operators 的 Microsoft 文章。

    【讨论】:

    • 您好,感谢您的快速回复。我认为这是非常好的观点。但不幸的是,您的脚本无法正常工作。它的做法和我的一样。我的意思是它自己删除主文件夹中的所有文件,但不要删除他所在的文件夹。你知道我的意思吗?
    • 好吧,如果你在Windows资源管理器中双击批处理文件执行它,批处理文件的目录就是Windows资源管理器的当前目录。我在回答中写道,如果任何正在运行的进程将其用作当前目录,Windows 会阻止删除文件夹。我想这就是执行批处理文件时未删除批处理文件的文件夹的原因。如果任何进程将此文件夹或子文件夹用作当前工作目录,则无法强制删除目录。
    • 好的,这对我来说是非常重要的信息。如果没有其他方法可以做到这一点,我必须发明其他方法。
    猜你喜欢
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2023-01-10
    相关资源
    最近更新 更多