批处理_自定义带锁文件夹应用案例_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 盘,换盘就失效。改进:让文件夹自动在脚本同目录创建,放哪都能用。

相关推荐
2601_962218474 小时前
万象生鲜系统区块链溯源技术帮助生鲜企业搭建食品安全数字化体系
大数据·运维·微服务·云原生·架构
智塑未来5 小时前
中小公司在线文档选型:从协作入口到安全边界
运维·安全
新时代牛马5 小时前
Linux 内核入门地图:架构、源码目录与五大子系统
linux·运维·架构
智购科技无人售货机厂家5 小时前
2026自动售货机制冷系统维护指南:从散热器清洁到压缩机换油的工程实践~YH
运维·redis·物联网·缓存·架构
剑客的茶馆5 小时前
开发者,运维怎样转行FDE?
运维·ai·开发·fde
Julien20045 小时前
控制 SELinux 文件上下文
linux·运维·服务器
sulikey5 小时前
Linux Core Dump 完全指南:从原理到实战的崩溃调试手册。什么是core dump?程序报错core dumped怎么办?
linux·服务器·操作系统·调试·coredump
Lifangyun_WD5 小时前
第一次租 GPU 服务器怎么开始?镜像、SSH、数据存储和停机前要做什么
服务器·云计算·gpu算力·gpu算力租赁
众壹新能源科技5 小时前
功率预测误差考核怎么降?从气象源到上报口径的排查清单
运维·人工智能·自动化
DevLoom_6 小时前
SD卡插电脑提示:驱动器中的磁盘未被格式化?恢复数据正确处理步骤
运维·服务器·电脑