Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何删除批处理文件存储并完全运行的文件夹?_Batch File_Directory - Fatal编程技术网

Batch file 如何删除批处理文件存储并完全运行的文件夹?

Batch file 如何删除批处理文件存储并完全运行的文件夹?,batch-file,directory,Batch File,Directory,我需要写一个批处理文件,它会删除自身、批处理文件文件夹中的所有文件以及存储批处理文件的文件夹。我创建了一个简单的.bat,但它没有删除批处理文件夹 我的错在哪里 @echo off %~d0 cd %~d0%~p0 md %appdata%\UploadFiles @xcopy "*.zip" "%appdata%\UploadFiles" /e /i /q /y @RD /S /Q "%~dp0" 您可以使用以下代码: @echo off cd /D "%~dp0" md "%appd

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

我的错在哪里

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

md %appdata%\UploadFiles

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

您可以使用以下代码:

@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
在处理过程中突然无法再找到批处理文件。但是,根据批处理文件的启动方式,此错误消息不可见,当然可以始终忽略

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • 呼叫/?
    解释
    %~dp0
    %~nx0
  • cd/?
  • del/?
  • echo/?
  • md/?
  • rd/?
  • xcopy/?

也请阅读有关Microsoft的文章。

您好,谢谢您的快速回复。我认为这是一个很好的观点。但是,您的脚本无法正常运行。它和我的一样。我的意思是和他一起删除主文件夹中的所有文件,但不要删除他所在的文件夹。你知道我的意思吗?如果你在Windows资源管理器中双击批处理文件来执行它,批处理文件的目录就是Windows资源管理器的当前目录。我在回答中写道,如果任何正在运行的进程将某个文件夹用作当前目录,Windows将阻止删除该文件夹。我想这就是为什么在执行批处理文件时没有删除批处理文件的文件夹的原因。如果任何进程使用此文件夹或子文件夹作为当前工作目录,则没有强制删除目录的方法。好的,这对我来说是非常重要的信息。如果没有其他方法可以做到这一点,我必须发明其他方法。