有关批处理修改文件夹权限问题

2024-12-29 16:06:36
推荐回答(2个)
回答1:

@echo off & title 分析指定目录中指定用户的权限 By 依梦琴瑶
cd /d %~dp0

::设置指定用户
set User=user

::设置要分析的主目录
set ScrDir=D:\123

::设置分析的类型
::全  部 = 0
::文  件 = 1
::文件夹 = 2
set DoF=2

if %DoF% equ 0 (
    set "DoF="
) else (
    if %DoF% equ 1 (
        set "DoF=/a-d "
    ) else (
        if %DoF% equ 2 (
            set "DoF=/ad "
        )
    )
)

if not exist "%SystemRoot%\System32\icacls.exe" (
    echo 由于您的系统目录 %SystemRoot%\System32 中缺失 icacls.exe
    echo 因此我无法继续为您服务了 T_T 再见,我会想您的。
    pause
    exit
)

tasklist | findstr /i "icacls.exe" >nul && (
    echo 在您的进程列表中发现了 icacls.exe 进程,如果该进程处理的目
    echo 录正好是您要分析的目录,那么有可能会因为占用而无法分析哦!
    echo 若您按下任意键,那么我将会结束它,并执行本次的分析。
    echo 若您不想结束它,那么请直接点击 × 符号来关闭本窗口。
    pause
    taskkill /f /im icacls.exe
)

cls & echo 用户 %User% 拥有的权限正在玩命分析中,耐心等我一下哈 ....
(for /f "delims=" %%i in ('dir %DoF%/s /b "%ScrDir%\*"') do (
    Echo 用户 %User% 拥有 "%%~i" 的权限如下:
    call :GetPermInfo "%%~i"
))>"用户%User%拥有的权限.Log"

echo, & echo 分析完成,请查看“用户%User%拥有的权限.Log”
pause
exit

:GetPermInfo
setlocal enabledelayedexpansion
for /f "tokens=2,3 delims=:" %%a in ('icacls "%~s1" ^| findstr /i "%User%:"') do (
    if /i "%%~a"=="%~spnx1 %User%" (
        set QX=%%b
    ) else (
        set QX=%%a
    )
    set QX=!QX:DENY=拒绝!
    set QX=!QX:OI=对象继承!
    set QX=!QX:CI=容器继承!
    set QX=!QX:IO=仅继承!
    set QX=!QX:NP=不传播继承!
    set QX=!QX:I=从父容器继承的权限!
    set QX=!QX:AD=附加数据/添加子目录!
    set QX=!QX:AS=访问系统安全性!
    set QX=!QX:DC=删除子项!
    set QX=!QX:DE=删除!
    set QX=!QX:F=完全访问权限!
    set QX=!QX:GA=全为一般性!
    set QX=!QX:GE=一般性执行!
    set QX=!QX:GR=一般性读取!
    set QX=!QX:GW=一般性写入!
    set QX=!QX:MA=允许的最大值!
    set QX=!QX:M=修改权限!
    set QX=!QX:N=无访问权限!
    set QX=!QX:RA=读取属性!
    set QX=!QX:RC=读取控制!
    set QX=!QX:RD=读取数据/列出目录!
    set QX=!QX:REA=读取扩展属性!
    set QX=!QX:RX=读取和执行权限!
    set QX=!QX:R=只读权限!
    set QX=!QX:S=同步!
    set QX=!QX:WA=写入属性!
    set QX=!QX:WDAC=写入自主访问控制!
    set QX=!QX:WD=写入数据/添加文件!
    set QX=!QX:WEA=写入扩展属性!
    set QX=!QX:WO=写入所有者!
    set QX=!QX:D=删除权限!
    set QX=!QX:W=只写权限!
    set QX=!QX:X=执行/遍历!
    set QX=!QX:,=、!
    echo !QX!
)
endlocal
echo, & goto :eof

回答2:

这个批处理主要是用到了cacls命令来更改文件(夹)的访问权限.
你再用此命令把它改回来就行了.命令:
echo
y|cacls
"你要处理的文件(夹)"
/c
/p
everyone:f
其中everyone代表任何用户,后面的参数是访问权限,f即代表完全控制,在administraton帐户下运行这条命令.
cacls命令详细用法,你进cmd后输入cacls/?回车查看,写的很清楚..