【问题标题】:can't delete folder from batch - folder or file open in another program无法从批处理中删除文件夹 - 在另一个程序中打开的文件夹或文件
【发布时间】:2014-12-29 21:09:52
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: batch-file directory delete-directory


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我的话 - 这是一个晦涩难懂的词,但最终通过逐步执行将 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 中的那些)。这可能是另一个搜索或线程的主题!

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2013-10-19
          • 1970-01-01
          • 2018-12-31
          • 1970-01-01
          • 2010-11-02
          • 2012-11-11
          • 2023-01-10
          • 1970-01-01
          • 2014-02-15
          相关资源
          最近更新 更多