admin管理员组

文章数量:1537955

牛皮藓文件

        该文件是Windows系统存放的应用文件,和WindowsApps(安装应用的文件)一样,都是用户无法删除的,如果想删除,只能通过其他方式。(注意:里面没东西才能删,否则容易出问题,其他文件夹也能用下面的方法删。)

 

bat删除文件方式

        新建txt文件,输入以下代码。填写要删除的绝对路径名(如 E:\文件),将后缀修改为bat,双击运行即可。(注意:删除后不可逆!!!)

%以下是将该bat文件以管理员运行%
@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
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"

%以下是删除命令(中文文件夹需要手动打开管理员cmd输入命令)%
takeown /F "文件夹绝对路径" /A /R /D Y
        icacls "文件夹绝对路径" /T /grant administrators:F
        rd /s /q "文件夹绝对路径"

        注意!!!修改上面文件中的路径

Java方式

        但每次都要修改bat文件里的三个地方未免太复杂,不如使用Java的I/O流来动态生成并运行,这样就只需要输入一次路径即可,代码如下。

import java.io.*;
import java.util.Scanner;

/**
 * @version 2.0
 * @package com.spring_Let
 */

public class DynamicallyForceDeleteFolder {
    public static void main(String[] args) {
        /*
        %以下是将该bat文件以管理员运行%
        @echo off
        >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
        if '%errorlevel%' NEQ '0' (
        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"
        %以下写要执行的命令%
        %删除文件命令(中文文件夹需要手动打开管理员cmd输入命令)%
        takeown /F "D:\ab" /A /R /D Y
                icacls "D:\ab" /T /grant administrators:F
                rd /s /q "D:\ab"
         */
        Scanner sc = new Scanner(System.in);
        System.out.print("输入需要删除的文件夹的绝对路径:");
        String delFilePath = sc.nextLine();
        //先检测文件夹是否存在
        if (!new File(delFilePath).exists()) {
            System.out.print("文件夹不存在!");
            return;
        }
        if (!normalDeletion(delFilePath)) {
            System.out.println("删除成功!");
            return;
        }
        //直接用File进行删除,如果删除不掉,再使用管理员强行删除
        System.out.println("普通删除失败,使用强制删除...");
        String cmd = "%以下是将该bat文件以管理员运行%\r\n" +
                "@echo off\r\n" +
                ">nul 2>&1 \"%SYSTEMROOT%\\system32\\cacls.exe\" \"%SYSTEMROOT%\\system32\\config\\system\"\r\n" +
                "if '%errorlevel%' NEQ '0' (\r\n" +
                "goto UACPrompt\r\n" +
                ") else ( goto gotAdmin )\r\n" +
                ":UACPrompt\r\n" +
                "echo Set UAC = CreateObject^(\"Shell.Application\"^) > \"%temp%\\getadmin.vbs\"\r\n" +
                "echo UAC.ShellExecute \"%~s0\", \"\", \"\", \"runas\", 1 >> \"%temp%\\getadmin.vbs\"\r\n" +
                "\"%temp%\\getadmin.vbs\"\r\n" +
                "exit /B\r\n" +
                ":gotAdmin\r\n" +
                "if exist \"%temp%\\getadmin.vbs\" ( del \"%temp%\\getadmin.vbs\" )\r\n" +
                "pushd \"%CD%\"\r\n" +
                "CD /D \"%~dp0\"\r\n" +
                "\r\n" +
                "%删除文件命令(中文文件夹需要手动打开管理员cmd输入命令)%\r\n" +
                "takeown /F \"" + delFilePath + "\" /A /R /D Y\r\n" +
                "        icacls \"" + delFilePath + "\" /T /grant administrators:F\r\n" +
                "        rd /s /q \"" + delFilePath + "\"";
        //这里会将bat文件写入到D盘,没有D盘则将D改为C,写入不了就用管理员运行
        String batFilePath = "D:\\Force deletion of file - spring.bat";
        sc.close();
        creatBAT(cmd, batFilePath);
        runBat(batFilePath);
    }

    //普通删除
    public static boolean normalDeletion(String delFilePath) {
        File f = new File(delFilePath);
        f.delete();
        return f.exists();
    }

    /**
     * 将要执行的批处理命令写入到目标bat文件中
     *
     * @param cmd         批处理命令
     * @param batFilePath bat文件路径
     */
    public static void creatBAT(final String cmd, final String batFilePath) {
        try {
            File f = new File(batFilePath);
            if (f.isDirectory() && f.exists()) {
                if (f.delete())
                    System.out.println("已删除原" + batFilePath + "文件夹!");
                else {
                    System.out.println("删除原文件夹失败!");
                    return;
                }
            }
            // 定义编码
            OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f), "GBK");
            BufferedWriter writer = new BufferedWriter(write);
            writer.write(cmd);
            writer.close();
            write.close();
        } catch (Exception e) {
            System.out.println("写文件内容操作出错");
            e.printStackTrace();
        }
    }

    /**
     * 运行bat文件
     *
     * @param batFilePath bat文件地址
     */
    public static void runBat(String batFilePath) {
        try {
            Process ps = Runtime.getRuntime().exec(batFilePath);
            InputStream in = ps.getInputStream();
            if (in.read() != -1) {
                in.close();
                ps.waitFor();
            }
            Thread.sleep(1000);
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } catch (InterruptedException e) {
            //TODO Auto-generated catch block e.printStackTrace();
        }
        System.out.println("删除完成");
        //运行后删除bat文件
        File f = new File(batFilePath);
        if (f.exists()) {
            f.delete();
        }
    }
}

删除后又出现?        

        如果Windows的文件夹删除后又出现,应该是设置了保存新内容的位置,去修改回来就可以了。(ps:不用担心放到C盘占位置,每次安软件自己选路径就可以了)

 

 

如果对你有帮助,辛苦点个赞吧。

 

本文标签: 文件可以使用不掉权限program