命令行强制删除目录或文件

每当重新安装操作系统时,系统并不会自动更新NTFS文件系统下,各个文件及目录的所有者、权限。因此常常出现无权删除某些目录或者文件的情况。这种情况下,可以参考微软支持中心的相关文档

首先要获得文件或目录的所有权,命令为takeown

takeown /R /F %path% /D Y

上述命令递归地将%path%目录下所有文件的所有权转移到目前登陆的账户下。

接着要修改文件权限,命令为cacls

cacls %path% /T /E /G Everyone:F

上述命令递归地将%path%目录下所有文件赋予Everyone以完全控制权。

最后就是简单地用del或者其他的删除命令,递归删除即可。

综上,很容易写出一个批处理文件用于此类问题

在cmd或powershell调用该批处理文件,参数为要删除的文件或目录。

:: BatchGotAdmin
:: 参考自 https://sites.google.com/site/eneerge/home/BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------
setlocal enabledelayedexpansion
FOR %%i IN (%*) DO (
  IF EXIST %%~fi (
    IF EXIST %%~fi\ (
        TAKEOWN /R /F %%~fi /D Y
        CACLS %%~fi /T /E /C /G Everyone:F
    ) ELSE (
        TAKEOWN /F %%~fi
        CACLS %%~fi /E /C /G Everyone:F
    )
    DEL /F /Q %%~fi
  ) ELSE (
      echo 未发现%%~fi
  )
)

留下评论