0

对此进行了搜索,但没有什么快乐。我正在制作,后来尝试删除同一批处理文件中的文件夹:

mkdir "%_gameKey%"
:: Stuff.....
rmdir /s /q "%_gameKey%"

我收到错误“该进程无法访问该文件,因为它正被另一个进程使用。” 我也无法通过右键单击删除该文件夹 - 同样的错误。有趣的是,rmdir 删除了文件夹的内容。该文件夹中没有任何内容,也没有任何明显的访问权限。

我用过 Unlocker - 没有显示任何进程。还使用了 Process Explorer,搜索了文件夹名称(带/不带完整路径) - 没有搜索结果。

当我重新启动我的机器时,我可以删除它。不确定是否归结为用户权限。我从中看到,用户只有读/写而不是完全控制。(对不起 - 用户权限的东西不是很好 - 特别是在 Windows 上!)。但是-肯定不可能是这样,因为我可以在重新启动时将其删除。

该文件夹位于非操作系统驱动器上。

我很难过 - 有什么想法吗?

4

3 回答 3

3

如果任何应用程序当前将该文件夹用作工作目录,则无法在 Windows 上删除该文件夹。

在您的情况下,我假设批处理文件使用命令cd将工作目录更改为创建的目录。所以cd在使用命令rmdir删除该目录之前,需要再次使用设置不同的工作目录。

当然,以工作目录作为当前目录启动其他应用程序当然不是一个好主意,该目录应该稍后被删除并在批处理文件退出时继续运行,因为那些启动的应用程序也将此目录作为工作目录。

于 2014-11-03T08:50:33.323 回答
0

我的话 - 这是一个晦涩难懂的词,但最终通过逐步将 rmdir 放在不同位置的代码找到了答案。我把这个贴在这里,以防有人遇到同样的情况......

基本上,我在上述文件夹中调用 cmd 提示并启动外部 exe。后来,我用TaskKill强行关闭了exe,但这使cmd控制台在我试图删除的目录的路径上保持打开状态。我会尝试更清楚....

虽然批处理脚本位于目录中(例如 C:\Windows\Scripts\Launch),但我使用了以下命令:

Start "AppLaunch" Call "!_supExe!" !_supCmd!

其中,扩展后,翻译为,例如:

Start "AppLaunch" Call "C:\Windows\Program Files(x86)\Troubleshooter\trbshtr.exe" -game "My Game"

我之所以使用它,是因为从阅读来看,Windows 中似乎存在一个错误,导致以下命令失败:

Start "AppLaunch" "C:\Windows\Program Files(x86)\Troubleshooter\trbshtr.exe" -game "My Game" 

当您必须为 exe 和参数(例如有空格的地方)使用引号时,就会出现问题。Windows 没有正确读取它。因此必须使用 topmost 来启动这些应用程序。

问题是,使用时:

taskkill /f /im trbshtr.exe

exe被杀死,但命令提示符没有。在 Start 命令上使用 /b 没有任何区别。

因此,解决方案是 - 在通过上述方法启动其他应用程序之前,从目录中 cd 进入批处理脚本不会改变的目录。任务完成....

现在这让我知道如何关闭所有打开的 cmd 窗口(或者如果我使用 /b 开关,则在 taskmgr 中的窗口)。这可能是另一个搜索或线程的主题!

于 2014-11-03T18:38:24.293 回答
0

在通过 win cmd 从文件夹启动 powershell 进程后,我遇到了同样的问题。
powershell完成后,我cd ..在win CMD中但rd /q /s给出了错误:在另一个进程中打开
我在资源管理器窗口中手动删除文件夹时遇到同样的错误,即使它是空的。

wmic process显示 powershell.exe 可能会锁定文件夹,即使 powershell 已完成任务并且 powershell 窗口已关闭。这得到了证实tasklist

我然后taskkill /im powershell.exe,之后可以删除该文件夹。

于 2020-03-23T07:53:23.087 回答