bat 批处理从文本文件自动创建文件夹

在Windows操作系统环境中,批处理脚本(.bat文件)是一种强大而高效的自动化工具。通过简单的文本命令组合,用户可以完成文件管理、系统配置、批量操作等复杂任务。本文将深入解析一个实用的批处理脚本示例,该脚本能够读取文本文件中的每一行内容,并将其作为文件夹名称自动创建相应的目录。

一、批处理脚本基础概念

1.1 什么是批处理脚本?

批处理脚本是包含一系列DOS命令的文本文件,扩展名为.bat或.cmd。当执行时,命令解释器(cmd.exe)会按顺序执行文件中的每条命令,实现自动化操作。

1.2 批处理脚本的基本结构

  • @echo off:关闭命令回显,使脚本运行时不显示执行的命令
  • 注释 :使用::REM添加注释
  • 命令:DOS命令、控制语句和变量操作
  • 标签 :使用:label定义代码段
  • 暂停与退出pause暂停执行,exit退出脚本

二、脚本完整解析与中文注释

以下是添加了详细中文注释的完整脚本:

batch 复制代码
@echo on
:: 注意:所读取的txt文本文件编码必须为ANSI,其它格式(含UTF-8)显示为乱码。
:: Attention: The encoding of the read txt text file must be ANSI, other formats (including UTF-8) will display as garbled text.

:: 将当前目录下所有txt文件重命名为dept_list.txt
:: Rename all txt files in the current directory to dept_list.txt
Ren *.txt dept_list.txt

@echo off
:: 关闭命令回显,使界面更整洁
:: Turn off command echoing for cleaner output

:: 跳转到Note标签(注意:此处Goto Note会跳过后续代码)
:: Jump to the Note label (Note: this Goto Note will skip subsequent code)
Goto Note

:: 以下为被跳过的注释说明(实际不会执行)
:: The following are skipped comments (not actually executed)
新文件名前不可以加上盘符和路径,因为该命令只能对同一盘上的文件更换文件名;
允许使用通配符更改一组文件名或扩展名;
不能为要修改的目标文件指定新的盘符和文件夹;

:note
:: 定义标签,作为代码跳转的目标位置
:: Define a label as the target position for code jumping

:: 循环读取dept_list.txt文件中的每一行
:: Loop through each line in dept_list.txt file
for /f "delims=" %%a in (dept_list.txt) do (
    :: 开启局部环境变量,避免变量污染
    :: Start local environment variables to avoid variable pollution
    setlocal
    
    :: 将当前行内容赋值给变量str
    :: Assign the current line content to variable str
    set "str=%%a"
    
    :: 使用当前行内容作为文件夹名创建目录
    :: Create directory using current line content as folder name
    md "%%a"
    
    :: 结束局部环境变量,恢复原始环境
    :: End local environment variables, restore original environment
    endlocal
)

:: 暂停并显示"请按任意键继续...",然后退出脚本
:: Pause and display "Press any key to continue..." then exit the script
Pause&Exit

:: 以下代码不会被执行,因为前面已经退出
:: The following code will not be executed because of previous exit
Goto Note

:: 关于setlocal和endlocal的详细说明:
:: Detailed explanation about setlocal and endlocal:
:: setlocal与endlocal相当于一个局部变量,只不过它继承了原来老的变量中的值。
:: setlocal就是开启环境变量本地化,其实就是说当开启这个命令后,所有新设置的环境变量都只在本次运行时有效,
:: 而endlocal则是结束环境变量本地化,当然必须先是开启了才会起作用,当运行endlocal后,先前设置的所有变量将会被清空。

:: setlocal 或 endlocal 的情况是:
:: The situations for setlocal or endlocal are:
:: 1、变量延迟开关
::    Variable delayed expansion switch
::    setlocal enabledelayedexpansion
::    开启变量延迟
::    Enable variable delayed expansion
::    setlocal disabledelayedexpansion
::    关闭变量延迟
::    Disable variable delayed expansion
:: 2、变量本地化 如:
::    Variable localization example:

set v=123
echo %v%
pause
setlocal
set v=abc
echo %v%
pause
endlocal
echo %v%

:Note
:: 另一个标签,用于代码组织
:: Another label for code organization

三、关键命令深度解析

3.1 for /f 循环命令详解

for /f是批处理中用于处理文本文件的强大命令,其基本语法为:

batch 复制代码
for /f "options" %%variable in (file) do command
  • "delims=":指定分隔符,等号后不跟任何字符表示不使用分隔符,整行读取
  • %%a:循环变量,在批处理文件中使用两个百分号
  • (dept_list.txt):要读取的文件名

3.2 setlocal与endlocal机制

这两个命令创建了一个临时的环境变量作用域,是批处理脚本中管理变量生命周期的关键工具。
开始执行脚本 setlocal命令 创建新的变量作用域 继承父作用域变量 在作用域内修改变量 endlocal命令 销毁当前作用域 恢复父作用域变量状态 继续执行后续命令

3.3 变量延迟扩展

在批处理脚本中,变量延迟扩展是处理复合语句中变量值的核心技术:

batch 复制代码
@echo off
setlocal enabledelayedexpansion
set var=初始值
for /l %%i in (1,1,3) do (
    set var=新值%%i
    echo 循环内: !var!
    echo 循环内(传统): %var%
)
echo 循环外: %var%
endlocal

四、脚本优化与扩展应用

4.1 增强的错误处理机制

原始脚本缺乏错误处理,以下是增强版本:

batch 复制代码
@echo off
chcp 65001 >nul
:: 设置代码页为UTF-8以支持中文

:: 检查是否存在txt文件
if not exist *.txt (
    echo 错误:当前目录下没有找到txt文件!
    pause
    exit /b 1
)

:: 重命名第一个找到的txt文件
for %%f in (*.txt) do (
    if not exist dept_list.txt (
        ren "%%f" dept_list.txt
        echo 已将"%%f"重命名为dept_list.txt
    ) else (
        echo dept_list.txt已存在,跳过重命名
    )
    goto :file_renamed
)

:file_renamed
:: 检查目标文件是否存在
if not exist dept_list.txt (
    echo 错误:dept_list.txt文件不存在!
    pause
    exit /b 1
)

:: 读取文件并创建文件夹
set counter=0
for /f "usebackq delims=" %%a in ("dept_list.txt") do (
    setlocal enabledelayedexpansion
    set "folderName=%%a"
    
    :: 移除可能的空白字符
    set "folderName=!folderName: =!"
    set "folderName=!folderName:    =!"
    
    if not "!folderName!"=="" (
        if not exist "!folderName!" (
            md "!folderName!"
            if exist "!folderName!" (
                echo 成功创建文件夹: "!folderName!"
                set /a counter+=1
            ) else (
                echo 警告:创建文件夹失败: "!folderName!"
            )
        ) else (
            echo 文件夹已存在: "!folderName!"
        )
    )
    endlocal
)

echo.
echo 操作完成!共创建/处理 %counter% 个文件夹。
pause

4.2 支持多种编码格式

通过添加编码检测和转换机制,使脚本支持UTF-8等格式:

batch 复制代码
:: 检测文件编码并转换
certutil -f -decodehex "dept_list.txt" temp.hex >nul
findstr /c:"EF BB BF" temp.hex >nul
if %errorlevel% equ 0 (
    echo 检测到UTF-8编码,正在转换...
    powershell -Command "Get-Content 'dept_list.txt' | Out-File 'dept_list_ansi.txt' -Encoding ASCII"
    move /y dept_list_ansi.txt dept_list.txt >nul
)
del temp.hex >nul 2>nul

4.3 日志记录功能

添加日志记录,便于追踪脚本执行情况:

batch 复制代码
set "logFile=create_folders_%date:~0,4%%date:~5,2%%date:~8,2%.log"
echo ===== 文件夹创建日志 %date% %time% ===== > "%logFile%"
echo. >> "%logFile%"

:: 在循环中添加日志记录
md "!folderName!" 2>> "%logFile%"
if exist "!folderName!" (
    echo [成功] %date% %time% 创建文件夹: "!folderName!" >> "%logFile%"
) else (
    echo [失败] %date% %time% 创建文件夹: "!folderName!" >> "%logFile%"
)

五、实际应用场景

5.1 办公自动化

  • 批量创建项目文件夹结构
  • 根据员工名单创建个人工作目录
  • 整理会议记录文件夹

5.2 系统管理

  • 自动化部署用户目录
  • 批量创建测试环境
  • 日志文件分类存储

5.3 开发工作流

  • 创建模块化代码目录
  • 初始化项目结构
  • 批量生成资源文件夹

六、最佳实践与注意事项

6.1 文件编码问题

  • 始终确保文本文件使用ANSI编码,或添加编码转换逻辑
  • 避免在文件夹名称中使用特殊字符:\/:*?"<>|
  • 处理文件名中的空格和标点符号

6.2 错误处理

  • 检查文件是否存在
  • 验证文件夹是否创建成功
  • 处理权限问题
  • 提供有意义的错误消息

6.3 性能优化

  • 对于大量文件夹创建,考虑添加进度显示
  • 避免不必要的变量操作
  • 合理使用setlocalendlocal减少内存占用

七、进阶学习资源

7.1 推荐学习路径

  1. 基础阶段:掌握常用DOS命令
  2. 进阶阶段:学习控制结构(if、for、goto)
  3. 高级阶段:理解变量延迟扩展、函数模拟
  4. 专家阶段:复杂脚本编写、错误处理、优化技巧

7.2 实用工具推荐

  • Notepad++:优秀的文本编辑器,支持多种编码
  • BatchRunner:批处理脚本调试工具
  • ConEmu:增强型控制台,提供更好的批处理开发环境

八、总结

本文详细解析了一个实用的批处理脚本,该脚本通过读取文本文件自动创建文件夹。我们从基础概念入手,逐步深入讲解了每个命令的作用,添加了详细的中文注释,并提供了优化版本和扩展功能。批处理脚本虽然语法相对简单,但通过巧妙组合,能够完成许多自动化任务,极大提高工作效率。

掌握批处理脚本编写不仅有助于日常办公自动化,也是理解Windows系统底层操作的重要途径。随着对批处理脚本的深入理解,读者可以将其应用于更复杂的场景,打造个性化的自动化工具集。


附录

单词短语表

单词/短语 音标 词性 词根/词缀 释义 搭配 例句
batch processing /bætʃ ˈprəʊsesɪŋ/ n. batch(批量)+processing(处理) 批处理 batch processing system Batch processing automates repetitive tasks.
encoding /ɪnˈkəʊdɪŋ/ n. en-(使)+code(代码)±ing 编码 file encoding, character encoding UTF-8 encoding supports international characters.
delimiter /dɪˈlɪmɪtə®/ n. de-(强调)+limit(限制)±er 分隔符 string delimiter, field delimiter The comma is commonly used as a delimiter in CSV files.
variable /ˈveəriəbl/ n. vari(变化)±able(能...的) 变量 environment variable, variable expansion In programming, variables store data values.
expansion /ɪkˈspænʃn/ n. ex-(出)+pand(扩展)±sion 扩展 variable expansion, delayed expansion Variable expansion occurs when retrieving a variable's value.
setlocal /setˈləʊkl/ v. set(设置)+local(本地) 设置局部环境 setlocal command, setlocal enabledelayedexpansion Use setlocal to isolate environment variable changes.
endlocal /endˈləʊkl/ v. end(结束)+local(本地) 结束局部环境 endlocal command Endlocal restores the previous environment state.
loop /luːp/ n./v. 来自古英语 循环 for loop, infinite loop The script uses a loop to process each line in the file.
directory /dəˈrektəri/ n. direct(指导)±ory(场所) 目录 create directory, working directory The md command creates a new directory in Windows.

这些关键词涵盖了文章的核心主题,帮助读者快速理解批处理脚本的基本概念、关键技术和实际应用。

相关推荐
一水鉴天13 小时前
整体设计 定稿 之23 dashboard.html 增加三层次动态记录体系仪表盘 之2 程序 (Q199 之1)
人工智能·架构·自动化
嘻哈baby15 小时前
Ansible自动化运维入门:从手工到批量部署
运维·自动化·ansible
科立分板机源头厂家16 小时前
第51集科立分板机:选择适合PCB板切割的全自动激光分板机?
自动化·分板机·激光分板机·科立分板机·pcb分板机
测试人社区-小明18 小时前
洞察金融科技测试面试:核心能力与趋势解析
人工智能·科技·面试·金融·机器人·自动化·github
掌心向暖RPA自动化18 小时前
如何用影刀RPA自动化采集小红书作品评论?支持"视频图文+折叠评论"采集
经验分享·自动化·新媒体运营·rpa·影刀rpa
纪伊路上盛名在19 小时前
文献阅读自动化1-批量检索、更新文献
python·自动化·文献阅读·科研日常·流程化
测试人社区-千羽19 小时前
Apple自动化测试基础设施(XCTest/XCUITest)面试深度解析
运维·人工智能·测试工具·面试·职场和发展·自动化·开源软件
秋刀鱼 ..19 小时前
第二届电气、自动化与人工智能国际学术会议(ICEAAI 2026)
大数据·运维·人工智能·机器人·自动化
查拉图斯特拉面条19 小时前
UI自动化断言完全指南:从基础到高级的断言表达式实战
python·自动化