当前位置: 首页 > news >正文

Windows递归创建目录命令(递归创建目录脚本)mkdir

文章目录

  • Windows 递归创建目录脚本实践(含交互与安全设计)
    • 一、基础:mkdir 的递归能力
    • 二、问题分析
      • 1. 路径误输入
      • 2. 覆盖或污染已有目录
      • 3. 非法字符
      • 4. 无交互确认
    • 三、目标设计
    • 四、完整脚本实现
    • 五、脚本解析
      • 1. `set /p` —— 用户交互输入
      • 2. `findstr` —— 简单安全校验
      • 3. `if exist` —— 存在性判断
      • 4. 多重确认机制
      • 5. 错误输出重定向
    • 六、进阶优化建议
      • 1. 日志记录
      • 2. 权限检测
      • 3. 支持批量输入
      • 4. PowerShell 版本(更强大)
    • 七、总结
    • 八、结语

Windows 递归创建目录脚本实践(含交互与安全设计)

在日常开发或运维中,我们经常需要批量创建多级目录,例如:

D:\project\logs\2026\04\20\

虽然 Windows 提供了mkdir(或md)命令支持递归创建,但在实际使用中,我们往往还需要:

  • 用户交互(确认路径、避免误操作)
  • 安全校验(非法路径、覆盖风险)
  • 更好的提示信息(成功/失败反馈)

本文将从基础用法开始,逐步实现一个安全且可交互的 Windows 批处理脚本(.bat)


一、基础:mkdir 的递归能力

在 Windows 中:

mkdir D:\test\a\b\c

即使中间目录不存在,也会自动递归创建。

👉 这意味着:递归能力是内置的,我们要解决的是“控制”和“安全”问题



二、问题分析

直接使用mkdir存在一些潜在风险:

1. 路径误输入

用户可能输入:

C:\Windows\System32\test

👉 这可能带来安全风险。

2. 覆盖或污染已有目录

虽然mkdir不会覆盖已有目录,但用户可能误以为是新目录。

3. 非法字符

Windows 路径不允许:

\ / : * ? " < > |

4. 无交互确认

脚本执行即创建,没有确认步骤。


三、目标设计

我们希望脚本具备:

  • ✅ 用户输入路径
  • ✅ 校验路径合法性
  • ✅ 检查目录是否已存在
  • ✅ 二次确认
  • ✅ 创建结果提示

四、完整脚本实现

@echo off setlocal enabledelayedexpansion echo ============================== echo Windows 递归创建目录工具 echo ============================== :: 1. 输入目录路径 set /p TARGET_DIR=请输入要创建的目录路径: :: 2. 基础校验(空值) if "%TARGET_DIR%"=="" ( echo [错误] 路径不能为空! goto end ) :: 3. 非法字符校验 echo %TARGET_DIR% | findstr /r "[<>:\"|?*]" >nul if not errorlevel 1 ( echo [错误] 路径包含非法字符! goto end ) :: 4. 防止危险路径(示例:系统目录) echo %TARGET_DIR% | findstr /i "C:\Windows" >nul if not errorlevel 1 ( echo [警告] 检测到系统目录路径,请谨慎操作! ) :: 5. 判断是否已存在 if exist "%TARGET_DIR%" ( echo [提示] 目录已存在:%TARGET_DIR% set /p CONFIRM=是否继续?(Y/N): if /i not "%CONFIRM%"=="Y" ( echo 已取消操作。 goto end ) ) :: 6. 二次确认 echo 即将创建目录: echo %TARGET_DIR% set /p FINAL_CONFIRM=确认创建?(Y/N): if /i not "%FINAL_CONFIRM%"=="Y" ( echo 操作已取消。 goto end ) :: 7. 执行创建 mkdir "%TARGET_DIR%" 2>nul if exist "%TARGET_DIR%" ( echo [成功] 目录创建成功! ) else ( echo [失败] 目录创建失败,请检查权限或路径。 ) :end pause

五、脚本解析

1.set /p—— 用户交互输入

set /p TARGET_DIR=请输入要创建的目录路径:

用于接收用户输入,实现交互。


2.findstr—— 简单安全校验

findstr /r "[<>:\"|?*]"

用于检测非法字符。

👉 虽然不是完美校验,但在批处理场景中已经足够实用。


3.if exist—— 存在性判断

if exist "%TARGET_DIR%"

用于判断目录是否已存在。


4. 多重确认机制

是否继续?(Y/N) 确认创建?(Y/N)

👉 防止误操作(尤其是生产环境)


5. 错误输出重定向

mkdir "%TARGET_DIR%" 2>nul

避免输出系统错误信息,保持脚本整洁。


六、进阶优化建议

如果你在团队或生产环境使用,可以进一步增强:

1. 日志记录

echo [%date% %time%] 创建目录:%TARGET_DIR% >> log.txt

2. 权限检测

尝试在目标路径写入临时文件,验证权限。


3. 支持批量输入

例如支持:

D:\a\b\c;D:\x\y\z

循环处理。


4. PowerShell 版本(更强大)

如果你不局限于.bat,推荐使用 PowerShell:

$path=Read-Host"请输入目录路径"if(-not$path){Write-Host"路径不能为空"exit}if(Test-Path$path){Write-Host"目录已存在"}$confirm=Read-Host"确认创建?(Y/N)"if($confirm-ne"Y"){exit}New-Item-ItemType Directory-Path$path-ForceWrite-Host"创建完成"

👉 PowerShell 在异常处理和路径处理上更安全。


七、总结

能力是否支持
递归创建目录✅ mkdir 原生支持
用户交互set /p
安全校验findstr+ 逻辑判断
防误操作✅ 多重确认
扩展能力⭐ PowerShell 更强

八、结语

虽然mkdir一行命令就能完成递归创建,但在真实工程场景中:

“安全性 + 可控性 + 可观测性”远比“能跑”更重要。

如果你是在 CI/CD、运维脚本或自动化工具中使用,建议优先考虑:

  • 增加日志
  • 限制路径范围
  • 使用 PowerShell 或更高级语言
http://www.jsqmd.com/news/673428/

相关文章:

  • 用Lua给ESP8266写个‘心跳’:手把手教你连接巴法云MQTT/TCP(附完整代码)
  • 编写程序实现非遗手作个体户低成本记账核算工具,极简收支录入+成本利润自动测算,适配小作坊零门槛使用。
  • Blender-Python脚本(材质篇)
  • ComfyUI图像处理工作流优化:WAS Node Suite 210+节点深度解析
  • 【flutter for open harmony】第三方库 Flutter 鸿蒙实战:get_it 依赖注入 + 模块化架构优化,项目秒变企业级✨
  • 告别内核自带驱动:深度折腾RTL8188EUS无线网卡,从编译到稳定上网的避坑全记录
  • 保姆级教程:用VMware 16 Pro在Windows电脑上免费体验macOS Monterey 12(附Darwin.iso工具下载)
  • 软件测试之基础篇(理论)
  • Flink状态存储选型实战:为什么生产环境更偏爱RocksDB?
  • GBFR Logs终极指南:如何用免费工具将你的《碧蓝幻想:Relink》战斗效率提升200%
  • Halcon模板匹配后怎么把结果画出来?手把手教你用vector_angle_to_rigid和affine_trans_contour_xld搞定轮廓显示
  • 革命性IoT开发工具dotnet/iot:一站式解决.NET物联网编程难题
  • 避坑指南:PCIe设备上电后Link Training失败的7个常见原因与排查思路
  • 从录音转文字到 AI 漫画生成:智在记录让知识真正 “活” 起来
  • 谈判力提升:技术人薪资博弈
  • 雀魂牌谱屋完整指南:3个技巧快速提升麻将数据分析能力
  • 《简单了解并构建LangChain》
  • jQuery 遍历
  • EM 24ai 运维必知:一招搞定用户密码重置!
  • Golang Redis Pipeline如何用_Golang Redis Pipeline教程【完整】
  • 从零学习Kafka:ZooKeeper vs KRaft
  • 告别PS!Mulimg Viewer图像拼接保姆级教程:从实验数据到期刊级Figure全流程
  • 深开鸿的开源鸿蒙OS,能不能用云固件的模式来快速安装?超多截图,有故事。第一集,故事未完,还有第二集。
  • 零基础玩转all-MiniLM-L6-v2:5分钟搞定语义搜索环境搭建
  • 如何利用backdoor-apk实现安卓应用的远程控制
  • 谢菲尔德大学发现极限压缩AI模型时,初始化才是真正的拦路虎
  • 制造业、质检类20种业务场景,SQL精写技巧
  • 从理论到代码:我是如何复现EVO的ATE/RPE计算并与官方结果对齐的(含避坑点)
  • 从宁德新能源面试官视角,拆解Halcon/OpenCV工程师的硬核技能树(附避坑指南)
  • Workrave终极指南:告别重复性劳损的完整解决方案