本文目录导读:

我来帮你编写一个自动设置文件夹权限的脚本,根据不同操作系统提供多个版本。
Windows PowerShell 脚本
# 设置文件夹权限脚本
param(
[string]$FolderPath = "C:\SharedFolder",
[string]$UserName = "Domain Users",
[string]$Permission = "Read", # FullControl, Modify, Read, Write
[switch]$InheritPermission,
[switch]$RemoveExistingPermissions
)
function Set-FolderPermissions {
param(
[string]$Path,
[string]$User,
[string]$PermissionType,
[bool]$Inherit,
[bool]$RemoveExisting
)
# 检查文件夹是否存在
if (-not (Test-Path $Path)) {
Write-Host "创建文件夹: $Path" -ForegroundColor Yellow
New-Item -ItemType Directory -Path $Path -Force | Out-Null
}
# 获取当前权限
$acl = Get-Acl -Path $Path
# 如果需要移除现有权限
if ($RemoveExisting) {
$acl.Access | ForEach-Object {
$acl.RemoveAccessRule($_)
}
}
# 创建访问规则
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$User,
$PermissionType,
$([System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor
[System.Security.AccessControl.InheritanceFlags]::ObjectInherit),
[System.Security.AccessControl.PropagationFlags]::None,
[System.Security.AccessControl.AccessControlType]::Allow
)
# 添加访问规则
$acl.AddAccessRule($accessRule)
# 设置权限
try {
Set-Acl -Path $Path -AclObject $acl
Write-Host "成功设置权限!" -ForegroundColor Green
Write-Host "文件夹: $Path" -ForegroundColor Cyan
Write-Host "用户: $User" -ForegroundColor Cyan
Write-Host "权限: $PermissionType" -ForegroundColor Cyan
}
catch {
Write-Error "设置权限失败: $_"
}
# 显示当前权限
Write-Host "`n当前文件夹权限:" -ForegroundColor Yellow
Get-Acl -Path $Path | Select-Object -ExpandProperty Access | Format-Table
}
# 执行权限设置
Set-FolderPermissions -Path $FolderPath -User $UserName -PermissionType $Permission -Inherit $InheritPermission.IsPresent -RemoveExisting $RemoveExistingPermissions.IsPresent
Linux Bash 脚本
#!/bin/bash
# 文件夹权限设置脚本
# 默认配置
FOLDER_PATH="/path/to/folder" # 修改为你的文件夹路径
USER_NAME="user_name" # 修改为用户名
GROUP_NAME="group_name" # 修改为用户组
PERMISSION="755" # 权限模式:755(rwxr-xr-x), 700(rwx------)
OWNER_USER="webserver_user" # 所有者用户,如www-data, nginx
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 显示使用方法
show_usage() {
echo "使用方法: $0 -p <文件夹路径> [选项]"
echo ""
echo "选项:"
echo " -p <路径> 文件夹路径 (必需)"
echo " -u <用户> 设置用户权限"
echo " -g <组> 设置组权限"
echo " -m <权限模式> 设置权限模式 (如 755, 700)"
echo " -o <所有者> 设置文件夹所有者"
echo " -r 递归设置子文件夹"
echo " -h 显示帮助信息"
echo ""
echo "示例:"
echo " $0 -p /var/www/html -u john -g www-data -m 755 -o www-data -r"
exit 0
}
# 检查是否为root用户
check_root() {
if [ "$(id -u)" != "0" ]; then
echo -e "${RED}错误: 此脚本需要root权限!${NC}"
echo "请使用 sudo 运行此脚本"
exit 1
fi
}
# 设置文件夹权限
set_folder_permissions() {
local path="$1"
local user="$2"
local group="$3"
local perm="$4"
local owner="$5"
local recursive="$6"
# 检查文件夹是否存在
if [ ! -d "$path" ]; then
echo -e "${YELLOW}创建文件夹: $path${NC}"
mkdir -p "$path"
if [ $? -ne 0 ]; then
echo -e "${RED}创建文件夹失败!${NC}"
exit 1
fi
fi
# 递归或非递归设置
if [ "$recursive" = true ]; then
chmod_opt="-R"
chown_opt="-R"
else
chmod_opt=""
chown_opt=""
fi
# 设置所有者
if [ -n "$owner" ]; then
if echo "$owner" | grep -q ":"; then
# 格式: user:group
chown $chown_opt "$owner" "$path"
else
# 只设置用户
chown $chown_opt "$owner:$owner" "$path"
fi
echo -e "${GREEN}设置所有者: $owner${NC}"
fi
# 设置组
if [ -n "$group" ] && [ -z "$owner" ]; then
chgrp $chown_opt "$group" "$path"
echo -e "${GREEN}设置组: $group${NC}"
fi
# 设置用户权限
if [ -n "$user" ]; then
# 设置ACL权限
if command -v setfacl &> /dev/null; then
if [ "$recursive" = true ]; then
setfacl -R -m "u:$user:rwx" "$path"
setfacl -R -m "d:u:$user:rwx" "$path"
else
setfacl -m "u:$user:rwx" "$path"
fi
echo -e "${GREEN}使用ACL设置用户 $user 权限${NC}"
else
echo -e "${YELLOW}未安装ACL工具,使用传统权限设置${NC}"
fi
fi
# 设置权限模式
if [ -n "$perm" ]; then
chmod $chmod_opt "$perm" "$path"
echo -e "${GREEN}设置权限模式: $perm${NC}"
fi
# 显示结果
echo -e "${CYAN}文件夹: $path${NC}"
if [ "$recursive" = true ]; then
ls -la "$path"
else
ls -la "$path" | head -2
fi
}
# 主函数
main() {
# 检查root权限
check_root
# 如果无参数,显示帮助
if [ $# -eq 0 ]; then
show_usage
fi
# 解析参数
local path=""
local user=""
local group=""
local perm=""
local owner=""
local recursive=false
while getopts "p:u:g:m:o:rh" opt; do
case $opt in
p)
path="$OPTARG"
;;
u)
user="$OPTARG"
;;
g)
group="$OPTARG"
;;
m)
perm="$OPTARG"
;;
o)
owner="$OPTARG"
;;
r)
recursive=true
;;
h)
show_usage
;;
\?)
echo -e "${RED}无效选项: -$OPTARG${NC}" >&2
show_usage
;;
esac
done
# 检查必需参数
if [ -z "$path" ]; then
echo -e "${RED}错误: 必需指定文件夹路径 (-p)${NC}"
show_usage
fi
# 设置权限
set_folder_permissions "$path" "$user" "$group" "$perm" "$owner" "$recursive"
# 显示权限摘要
echo ""
echo -e "${YELLOW}权限设置完成!${NC}"
echo "路径: $path"
echo "用户: ${user:-未设置}"
echo "组: ${group:-未设置}"
echo "权限模式: ${perm:-未更改}"
echo "所有者: ${owner:-未更改}"
echo "递归: $recursive"
}
# 执行主函数
main "$@"
Windows 批处理脚本 (CMD)
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
:: 设置文件夹权限批处理脚本
:: 默认配置
set "FOLDER_PATH=C:\SharedFolder"
set "USER_NAME=Everyone"
set "PERMISSION=F" REM F=完全控制, R=读取, M=修改, W=写入
echo ========================================
echo 文件夹权限设置工具
echo ========================================
echo.
:: 检查文件夹
if not exist "%FOLDER_PATH%" (
echo [信息] 创建文件夹: %FOLDER_PATH%
mkdir "%FOLDER_PATH%"
if !errorlevel! neq 0 (
echo [错误] 创建文件夹失败!
pause
exit /b 1
)
)
:: 移除现有权限
echo [信息] 移除现有权限...
icacls "%FOLDER_PATH%" /grant "SYSTEM:(OI)(CI)F" /T
icacls "%FOLDER_PATH%" /grant "BUILTIN\Administrators:(OI)(CI)F" /T
icacls "%FOLDER_PATH%" /reset /T
:: 设置新权限
echo [信息] 设置用户权限...
icacls "%FOLDER_PATH%" /grant "%USER_NAME%:(OI)(CI)%PERMISSION%" /T
:: 验证权限
echo.
echo [信息] 当前文件夹权限:
icacls "%FOLDER_PATH%"
:: 完成
echo.
echo ========================================
echo 权限设置完成!
echo ========================================
echo 文件夹: %FOLDER_PATH%
echo 用户: %USER_NAME%
echo 权限: %PERMISSION%
echo.
pause
使用示例
Windows PowerShell:
# 基本使用 .\Set-FolderPermissions.ps1 -FolderPath "D:\Shared" -UserName "Everyone" -Permission "Read" # 递归设置子文件夹 .\Set-FolderPermissions.ps1 -FolderPath "D:\Project" -UserName "Domain Users" -Permission "Modify"
Linux:
# 设置权限和所有者 sudo ./folder_permissions.sh -p /var/www/html -u www-data -g www-data -m 755 -o www-data -r # 使用ACL设置 sudo ./folder_permissions.sh -p /shared/folder -u john -m 770
Windows CMD:
:: 设置完全控制权限 folder_permissions.bat :: 或直接使用icacls icacls "D:\MyFolder" /grant "Users:(OI)(CI)R" /T
这些脚本提供了灵活的方式来设置文件夹权限,选择适合你操作系统的版本,并根据实际需求调整参数。