批处理_自定义带锁文件夹应用案例_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 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
ZJH__GO5 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
小小、码农5 小时前
Linux进程控制:从fork到exec,手写一个简易Shell
linux·运维·服务器
不会就选b6 小时前
Linux之进程间通信(二)---模拟进程池
linux·运维·服务器
NeilYuen6 小时前
用UDP实现向DNS服务器请求IP地址
服务器·tcp/ip·udp
沫璃染墨8 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++
AIgorithmGEEK8 小时前
Linux 环境变量完全指南:从入门到理解底层原理
linux·运维·服务器
修罗王8 小时前
Linux Docker 服务管理与排查实战指南(新手速查版)
运维·docker
迪康Defender9 小时前
从静态存储到动态流转:终端透明加密两种模式实战解析
运维·服务器·网络·数据库·其他
酷可达拉斯9 小时前
Linux操作系统-升级OpenSSH修复漏洞
linux·运维·服务器·云计算