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.txt2. 权限检测
尝试在目标路径写入临时文件,验证权限。
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 或更高级语言
