【问题标题】:Ho to ensure a directory exists and is empty?如何确保目录存在且为空?
【发布时间】:2014-10-15 06:52:09
【问题描述】:

如何确保目录存在且为空?

这个

rmdir %1 /s /q & mkdir %1

遇到“访问被拒绝”问题Why does mkdir occasionally give Access Denied?,我希望避免在访问可用之前循环的风险。

【问题讨论】:

  • 其他进程也可能对该目录感兴趣,尤其是反恶意软件和搜索索引器。他们将使用删除共享打开文件,直到最后一个句柄关闭,该目录才会真正消失。这需要多长时间是不可预测的。这样做根本没有意义,只需使用 del .
  • @Hans。谢谢。你有使用干净的del的解决方案吗?存在时不会从 mkdir 引起错误的错误级别?显而易见的解决方案似乎同样容易受到 AV 干扰。
  • 很难猜出你在说什么。如果您使用del *.* 来清理目录,那么您当然不再需要 mkdir。它还在那里。
  • @Hans。它不一定仍然存在。它以前可能不存在。

标签: windows-7 cmd


【解决方案1】:

您不能删除正在使用的文件夹。如果不使用,您可以先重命名文件夹,然后将其删除(这应该可以解决异步问题)。如果文件夹正在使用,也许你不能删除它,但你可以删除其中的内容。

试一试。不是一个理想的解决方案,但应该处理常见的情况

@echo off
    setlocal enableextensions disabledelayedexpansion

    call :resetFolder ".\test"
    if errorlevel 1 (
        echo folder is in use and can not be reset
    ) else (
        echo folder has been reset
    )

    endlocal
    exit /b

:resetFolder folder
    setlocal disabledelayedexpansion
    set "ts=%random%%random%%random%"
    for %%a in ("%~1\.") do (

        rem Rename the folder and then delete it
        if exist "%%~fa\" ren "%%~fa" "%%~nxa.%ts%.tmp" 2>nul && (
            start /b "" cmd.exe /q /c "rmdir /s /q "%%~dpa%%~nxa.%ts%.tmp" >nul 2>nul"
        )

        rem If rename failed, folder content is in use. Try to remove as much content as possible
        if exist "%%~fa\" ( rmdir /s /q "%%~fa" >nul 2>nul )

        rem Test if the folder has been removed, has no content or still contains data
        if exist "%%~fa\" (
            dir /a /b "%%~fa" | find /v "" > nul && exit /b 1
        ) else (
            mkdir "%%~fa" >nul 2>nul || exit /b 1
        )
    )
    exit /b 0

【讨论】:

    【解决方案2】:

    一种可能的方法:

    md empty
    robocopy /e /purge empty %1
    

    【讨论】:

      猜你喜欢
      • 2023-02-12
      • 2018-10-25
      • 2022-11-10
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多