bat批处理从文本文件自动创建文件夹的详细过程

作者:

文章目录
  • 以下是添加了详细中文注释的完整脚本: @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
  • 本文详细解析了一个实用的批处理脚本,该脚本通过读取文本文件自动创建文件夹。我们从基础概念入手,逐步深入讲解了每个命令的作用,添加了详细的中文注释,并提供了优化版本和扩展功能。批处理脚本虽然语法相对简单,但通过巧妙组合,能够完成许多自动化任务,极大提高工作效率。 掌握批处理脚本编写不仅有助于日常办公自动化,也是理解Windows系统底层操作的重要途径。随着对批处理脚本的深入理解,读者可以将其应用于更复杂的场景,打造个性化的自动化工具集。 以上就是bat批处理从文本文件自动创建文件夹的详细过程的详细内容,更多关于bat批处理文本文件自动创建文件夹的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: 批处理脚本(.bat)实现实时监测文件夹并执行命令 (假设有新文件则拷贝到远程文件夹内) 批处理定时删除指定文件夹及子文件夹 bat脚本 批处理(Bat)批量解压文件夹并提取及合并文件 利用bat批处理程序通过DOS命令行删除所有的空文件夹的方法 批处理统计文件夹内的所有文件的数量和总大小的bat
  • 目录
    • 一、批处理脚本基础概念
      • 1.1 什么是批处理脚本?
      • 1.2 批处理脚本的基本结构
    • 二、脚本完整解析与中文注释
      • 三、关键命令深度解析
        • 3.1 for /f 循环命令详解
        • 3.2 setlocal与endlocal机制
        • 3.3 变量延迟扩展
      • 四、脚本优化与扩展应用
        • 4.1 增强的错误处理机制
        • 4.2 支持多种编码格式
        • 4.3 日志记录功能
      • 五、实际应用场景
        • 5.1 办公自动化
        • 5.2 系统管理
        • 5.3 开发工作流
      • 六、最佳实践与注意事项
        • 6.1 文件编码问题
        • 6.2 错误处理
        • 6.3 性能优化
      • 七、进阶学习资源
        • 7.1 推荐学习路径
        • 7.2 实用工具推荐
      • 八、总结

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

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

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

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

        @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
        

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

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

        这两个命令创建了一个临时的环境变量作用域,是批处理脚本中管理变量生命周期的关键工具。

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

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

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

        @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
        

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

        :: 检测文件编码并转换
        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
        

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

        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%"
        )
        

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

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

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

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

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

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

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

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

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

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

        以上就是bat批处理从文本文件自动创建文件夹的详细过程的详细内容,更多关于bat批处理文本文件自动创建文件夹的资料请关注风君子博客其它相关文章!

        您可能感兴趣的文章:

        • 批处理脚本(.bat)实现实时监测文件夹并执行命令 (假设有新文件则拷贝到远程文件夹内)
        • 批处理定时删除指定文件夹及子文件夹 bat脚本
        • 批处理(Bat)批量解压文件夹并提取及合并文件
        • 利用bat批处理程序通过DOS命令行删除所有的空文件夹的方法
        • 批处理统计文件夹内的所有文件的数量和总大小的bat

        站内搜索