删除执行批处理脚本所在的文件夹
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"
当然,在描述某事时我宁愿冗长,但如果你愿意的话,你可以在一行中做到这一点以上是关于删除执行批处理脚本所在的文件夹的主要内容,如果未能解决你的问题,请参考以下文章