删除执行批处理脚本所在的文件夹

Posted

技术标签:

【中文标题】删除执行批处理脚本所在的文件夹【英文标题】:Delete the folder the executing batch-script lies in 【发布时间】:2022-01-19 22:48:18 【问题描述】:

我在文件夹“f”中保存了一个 win-cmd-script“a”,并想用脚本本身删除文件夹“f”。这可能吗?如果可以,怎么做?

我知道,批处理文件可以自行删除:

(goto) 2>nul & del "%~f0"

现在我已经尝试过了:

set mypath=%~dp0

rmdir %mypath%

但这不起作用。有什么想法吗?

【问题讨论】:

如果任何应用程序打开了该文件夹,例如 Windows 资源管理器,或者任何应用程序在该目录中的文件上有一个打开的文件句柄,它不会被删除。因此,这将包括批处理文件的工作目录是否是您要删除的文件夹。因此,您至少需要更改目录才能摆脱批处理文件中的文件夹结构。不确定您将如何检查打开该文件夹的任何其他应用程序。 它是一种自我删除的安装程序文件。一旦完成,它就消失了。 所以只是作为一个测试。我创建了一个文件夹并在其中创建了一个批处理文件。在批处理文件中,我有两个命令。 1)cd .. 2)rmdir /s /q "%~dp0"。我从命令提示符处执行了这个,当我执行它时在那个文件夹中。它确实删除了目录。 我也是这么做的。但是在我的系统上它只删除了文件?!奇怪.. pushd "%temp%" && rmdir /Q/S "%~dp0" 这只会更改工作目录,然后删除文件夹。 【参考方案1】:

如果任何进程将该文件夹作为活动文件夹,则您无法删除该文件夹。如果你想删除它,你需要确保执行脚本的 cmd 进程已经移动到不同的文件夹:

@echo off
setlocal
set path_to_del=%~dp0
cd /d %USERPROFILE%
rmdir /s/q "%path_to_del%"

这将删除包含脚本的文件夹,但是,它会在尝试扫描文件以查找rmdir 调用之后的行时出错。此外,如果您在此文件夹中打开了任何其他工具,例如记事本,则该目录将保留。

【讨论】:

5行删除一个文件夹?您根本不需要 set 变量。这将做同样的事情。 pushd "%temp%" && rmdir /Q/S "%~dp0" 当然,在描述某事时我宁愿冗长,但如果你愿意的话,你可以在一行中做到这一点

以上是关于删除执行批处理脚本所在的文件夹的主要内容,如果未能解决你的问题,请参考以下文章

使用批处理执行 sql cmd

bat 批处理切换到当前脚本所在文件夹

Windows自动删除n天前的文件的批处理脚本

怎样利用批处理自动删除某路径下的过期文件夹

错误记录Windows 系统 bat 脚本报错 ( 使用 pause 拦截窗口自动关闭 | 方便查看错误 )

'PermissionError:[Errno 13]权限被拒绝',使用批处理文件运行python脚本后