批处理_自定义带锁文件夹应用案例_03

0、前言:

  • 这个案例是在工作中,产生的实践需求。在工作中,可能会多个同事公用一台电脑,这种情况下,如何保护好自己的文件不被别人怎删改查就是棘手的事。

1、根据实际需求逐条分析需求模块:

  • 一键锁定文件夹:将普通文件夹伪装成系统回收站(CLSID),并设置隐藏 + 系统属性,普通方式无法查看、打开、删除。
  • 密码解锁:输入正确密码才能将锁定文件夹恢复为普通可访问文件夹。
  • 自动重新锁定:解锁打开文件夹后,关闭窗口按任意键即可再次上锁。
  • 自动初始化:第一次运行时自动创建目标文件夹并直接锁定。
  • 状态自动识别:程序启动时自动判断文件夹是已锁定 / 已解锁 / 未创建,并执行对应逻辑。
  • 安全隐蔽:不修改注册表、不删除文件、不依赖第三方软件,纯系统命令实现隐私文件夹保护。

2、批处理源码:

bash 复制代码
@echo off
:: 知识点1:@echo off ------ 关闭命令回显,不显示执行的命令本身
:: 知识点2::: 注释 ------ 批处理行注释,不执行

setlocal enabledelayedexpansion
:: 知识点3:setlocal ------ 开启局部环境,变量不影响系统环境
:: 知识点4:enabledelayedexpansion ------ 开启**延迟变量扩展**,用于在 if 代码块中使用 !变量!

title Simple Folder Locker
:: 知识点5:title ------ 设置CMD窗口标题

color 2
:: 知识点6:color ------ 设置CMD文字颜色(2=绿色)

set "BASE=D:\"
set "NORMALFOLDER=zhmf"
set "UNLOCKPWD=123666"
set "LOCKEDCLSID={645FF040-5081-101B-9F08-00AA002F954E}"
set "LOCKEDFOLDER=zhmf.%LOCKEDCLSID%"
:: 知识点7:set 变量定义 ------ 定义字符串变量
:: 知识点8:set "变量=值" ------ 安全写法,防止空格/特殊符号出错

cd /d "%BASE%"
:: 知识点9:cd /d ------ 跨盘符切换目录(自动进入D盘)

if exist "%LOCKEDFOLDER%\*" (
    set STATUS=LOCKED
    echo STATUS=LOCKED
) else if exist "%NORMALFOLDER%" (
    set STATUS=UNLOCKED
    echo STATUS=UNLOCKED
) else (
    set STATUS=UNKNOWN
    echo STATUS=UNKNOWN!
)
:: 知识点10:if exist ------ 判断文件/文件夹是否存在
:: 知识点11:if ... else if ... else ------ 多分支条件判断
:: 知识点12:%变量% ------ 普通变量引用
:: 知识点13:代码块 () ------ 多行命令合并为一个逻辑块

:: 首次创建
if "%STATUS%"=="UNKNOWN" (
    echo ====================== FIRST RUN ======================
    md "%NORMALFOLDER%"
    ren "%NORMALFOLDER%" "%LOCKEDFOLDER%"
    attrib +h +s "%LOCKEDFOLDER%"
    echo 文件夹已锁定在 D:\zhmf
    pause >nul
    exit
)
:: 知识点14:md ------ 创建文件夹(mkdir)
:: 知识点15:ren ------ 重命名文件/文件夹
:: 知识点16:attrib +h +s ------ 给文件夹添加**隐藏**、**系统**属性
:: 知识点17:pause >nul ------ 暂停并隐藏"请按任意键继续"提示
:: 知识点18:exit ------ 退出批处理程序

:: 解锁
if "%STATUS%"=="LOCKED" (
    echo ====================== UNLOCK FOLDER ======================
    set /p INPUTPWD=Enter unlock password:

    if not "!INPUTPWD!"=="%UNLOCKPWD%" (
        echo ERROR: Wrong password!
        pause >nul
        exit
    )

    attrib -h -s "%LOCKEDFOLDER%"
    ren "%LOCKEDFOLDER%" "%NORMALFOLDER%"
    start "" "%NORMALFOLDER%"

    echo.
    echo 关闭文件夹窗口后按任意键锁定
    pause >nul

    ren "%NORMALFOLDER%" "%LOCKEDFOLDER%"
    attrib +h +s "%LOCKEDFOLDER%"
    echo 锁定成功!
    pause >nul
    exit
)
:: 知识点19:set /p ------ 接收用户键盘输入(用于输入密码)
:: 知识点20:!变量! ------ 延迟变量读取(必须在 if 代码块内使用)
:: 知识点21:if not ------ 条件取反(判断密码不相等)
:: 知识点22:attrib -h -s ------ 移除隐藏、系统属性
:: 知识点23:start ------ 打开文件夹/程序
:: 知识点24:echo. ------ 输出空行,美化界面

:: 已解锁 → 上锁
if "%STATUS%"=="UNLOCKED" (
    echo ====================== WARNING ======================
    echo Folder: D:\%NORMALFOLDER%
    echo Press any key to re-lock it...
    pause >nul

    ren "%NORMALFOLDER%" "%LOCKEDFOLDER%"
    if errorlevel 1 (
        echo ERROR: Access denied!
        pause >nul
        exit
    )
    attrib +h +s "%LOCKEDFOLDER%"

    echo.
    echo 文件夹已成功锁定!
    pause >nul
    exit
)
:: 知识点25:errorlevel ------ 判断上一条命令是否执行失败(重命名失败=文件夹被占用)

3、梳理总结:

4、后续可以提升的地方:

  • 密码不要明文写在脚本里现在密码 123666 直接能看到,别人打开脚本就泄露了。改进:改成 MD5 验证 或 密码存在外部隐藏文件。
  • 加密码错误次数限制现在输错一次就退出,可暴力试密码。改进:输错 3 次自动退出、锁屏警告。
  • 锁定后不能轻易改名破解现在只是改个名 + 隐藏,懂的人能手动改回去。改进:加 文件夹权限锁定,即使显示出来也打不开。
  • 自动判断文件夹是否被占用现在文件夹打开着就无法锁定,还不提示。改进:自动检测占用 → 提示关闭 → 再锁定。
  • 加主菜单,不用自动判断状态现在自动判断,有时候会懵。
bash 复制代码
[1] 解锁文件夹
[2] 锁定文件夹
[3] 修改密码
  • 现在脚本必须放 D 盘,换盘就失效。改进:让文件夹自动在脚本同目录创建,放哪都能用。

相关推荐
羽翼安全2 小时前
多摄像头接入检测 + 文件加密:监控室防拍照系统的两道设备与数据防线
运维·网络·人工智能
一只积极向上的小咸鱼2 小时前
Codex MCP 与 Skills 跨 Docker 共享问题总结与后续规范
运维·docker·容器
运维行者_2 小时前
如何为您的企业选择最佳网络监控工具
大数据·运维·服务器·网络·数据库
Benszen2 小时前
云计算基础-4:Linux 进程管理
linux·运维·云计算
逸模10 小时前
告别熬夜手工整理台账,逸模智能归集实现项目数据自动化存档
大数据·运维·人工智能·笔记·其他·信息可视化·自动化
sbjdhjd10 小时前
Redis 主从复制、哨兵高可用与 Cluster 集群部署实验手册
运维·前端·redis·云原生·开源·bootstrap·html
AOwhisky11 小时前
MySQL 学习笔记(第四期):SQL 语言之多表查询
linux·运维·网络·数据库·笔记·学习·mysql
Phantom Void11 小时前
服务器处理客户端请求的设计方法
linux·运维·网络
司悠11 小时前
【解决在vscode里开服务器登录codeX后发消息会一直reconnecting】
服务器·ide·vscode