批处理_基础补充、文件和文件夹处理_02

张开发
2026/5/12 10:38:40 15 分钟阅读

分享文章

批处理_基础补充、文件和文件夹处理_02
0、前言0.1、从编程语言学习的四个维度审视批处理数据结构批处理没有现代意义上的数据结构本质是纯文本 字符串处理所谓 “数组” 是模拟出来的。仅支持变量、环境变量、参数、返回值% errorlevel%。语法规则批处理语法非常原始、怪异、容错差核心规则是逐行执行一行一条命令可 连接变量延迟扩展setlocal enabledelayedexpansion !var! 注释用rem 或 ::后者在括号块内会出错代码块用 ( ) 包裹但语法敏感换行、空格都可能报错。流程控制有if 判断、for 循环最复杂、最强大、goto 跳转、call 调用子程序、转义字符^ 转义 | ( 等。字符串操作通过截取、替换、拼接全靠内置语法无函数。批处理完全没有自主内存管理由系统托管变量存在进程环境块PEB / 环境内存不由脚本管理。批处理不是编译型批处理是通过cmd.exe解释器执行的 → 调用系统 API / 外部命令 → 执行。执行外部命令时会创建子进程执行完返回。语言特性和编程范式批处理是极其受限的过程式脚本语言几乎不支持现代范式。弱类型、无类型系统无函数只有 :label call 模拟子程序无递归深度保障无异常处理只有 %errorlevel% 判断返回码极强的系统调用能力文件、注册表、网络、进程管理都靠外部命令天生面向系统自动化、批量任务。批处理是过程式编程面向命令一切都是 “执行命令”本质是系统外壳胶水语言不是通用编程语言。0.2、这篇文章重点学习批处理常见命令基础补充1、批处理中和的区别命令1 命令2 命令3 表示依次执行性三条命令不论前面的命令执行成功还是失败都执行后一条是只有在前面成功之后才执行后面的命令。2、批处理中for命令中的/f参数批处理里只有 for /f 才有 “文本切割、截取、提取” 的功能所以只是执行一条命令也要用for。for /F 解析 / 读取循环File2.1、命令样式for/f选项%%iin(文件名/命令/字符串)do命令2.1、常用选项说明delims指定分隔符默认是空格、Tab。比如delims, 表示按逗号切分。tokens指定取第几列数据。tokens1取第1列tokens1,3取第1、3 列tokens1-5 取1~5 列skipn跳过前 n 行常用于跳过标题行。2.2、案例echo offfor/ftokens1-3 delims-/. %%ain(%date%)do(setyear%%asetmonth%%bsetday%%c)echoyear: %year%echomonth: %month%echoday: %day% pause2.3、补充echo【内存信息】for/ftokens2 delims%%ain(wmic computersystem get TotalPhysicalMemory /value)dosetmemB%%aset/amemGBmemB /1073741824echo物理内存!memGB!GB echo. remfor/f:读取文本、解析命令输出常见写法for /ftokens2 delims%%ain(命令)do... rem 作用是执行一条命令 → 拿到输出文本 → 按符号切割 → 取出你要的那一段 remtokens2 delims表示用作为分隔符把一行切成两段取第2段 rem 总结for/ftokens段数 delims符号%%ain(某条命令)do…先执行引号里的命令拿到输出的每一行文本按某个符号切割取其中的第n段给到%%a。3、批处理中for命令中的/l参数专门用来循环数字比如从 1 数到 10从 0 数到 100。for /L 数字循环Loop3.1、命令样式for/L %%变量in(起始值,步长,结束值)do命令3.2、案例下面案例就是从1打印到5每行打印一个数字for/L %%iin(1,1,5)doecho%%i下面案例就是从1打印到5打印在一行echo off setlocal enabledelayedexpansionsetoutputfor/L %%iin(1,1,5)dosetoutput!output! %%iecho结果%output%4、批处理中条件中只有两种类型的值的比较写法总结如下4.1、数字比较数字比较中 equ 等于 (equal)数字比较中 gtr 大于 (greater than)数字比较中 lss 小于 (less than)数字比较中 geq 大于等于 (greater or equal)数字比较中 leq 小于等于 (less or equal)数字比较中 neq 不等于 (not equal)只要用上面这套关键字cmd解释器会优先尝试转整数再比。4.2、字符串比较只有一个比较符号字符串比较中 等于 (equal)只干字符串比对不转数字、不做数值运算。5、批处理中两种条件语句的写法批处理条件判断中条件的标准写法if “%变量%” 比较符号 “内容”因为批处理中可能还有数字的比较这种写法就不用加双引号了if %变量% 比较符号 内容注意区分if中写条件和set中给变量赋值的区别set “var内容” 加了参数/p和参数/a的也可以加在后面给表达式整体加双引号。批处理中不论是set还是if后面的表达式都最好加上双引号。6、批处理 | 和 || 核心区别| 管道符的作用把左边命令的输出传给右边命令当输入|| 容错或符作用左边命令执行失败才执行右边对比左边执行成功才执行右边。小结 不管成败前后都执行| 管道传输出给下一条命令左边成功才执行右边||左边失败才执行右边7、批处理中标签书写规范以及goto和call的区别批处理中不论是goto的标签还是call的标签标签不能写在if或者for的模块当中这是一种默认书写规范批处理中给goto用的标签也可以给call用goto 不回头call 会返回。文件和文件夹相关1、批处理文件和文件夹基础1.1、批处理文件路径变量%~dp0只在批处理.bat/.cmd里有用是专门用来拿「当前这个 bat 文件所在目录」的内置语法。其实就是位置参数的拓展其中~表示去除引号dp参数表示路径%0表示当前文件的文件名。1.2、删除文件和文件夹删除文件del 文件名删除文件夹rmdir 文件夹名2、用批处理给文件夹换图标2.1、代码echo off chcp65001nulecho正在设置文件夹图标为海绵宝宝...echo[.ShellClassInfo]desktop.iniechoIconFileE:\CLearn\batch_do\hai_mian_baobao.icodesktop.iniechoIconIndex0desktop.ini attrib s%cd%attrib h s desktop.iniecho搞定刷新就能看到海绵宝宝图标啦 pause2.2、相关知识只要文件夹里有一个叫 desktop.ini 的文件并且里面写了[.ShellClassInfo]系统就知道这个文件夹要自定义显示desktop.ini 文件夹的 “外观配置单”[.ShellClassInfo] 标记我要改图标 / 文件夹信息。IconFile 的意思就是文件夹图标 后面这个 .ico 文件。一个ICO 文件里可能包含 多个尺寸图标16×16、32×32、256×256IconIndex0 意思是用第 0 个第一个图标。普通文件夹 → 不读取 desktop.ini加了 系统属性s 的文件夹 → 才会读取 desktop.ini。h 隐藏desktop.ini文件不让你看见避免误删s 把desktop.ini标记为系统文件。总结Windows 资源管理器并不是 “智能识别” 你要改图标而是严格按照一套固定规则去读取配置。文件夹里要有 desktop.ini里面要写图标路径文件夹必须标记为 系统文件夹 (s)配置文件要隐藏且系统属性 (h s)。就是说可以自己建一个文本文档叫desktop.ini然后在里面写上这些东西不通过批处理通过手动操作的方式改文件夹图标但是给文件夹和desktop.ini加属性还是要在cmd中进行。3、批处理给文件创建快捷方式3.1、代码echo off chcp65001nul ::你只改这里:: 【你要给哪个文件创建快捷方式】setTARGET_FILEfor_f_data.bat:: 【快捷方式要生成到哪里去】这里可以随便写路径setSAVE_PATHC:\Users\用户名\Desktop\我的快捷方式.url:: 创建一个变量名字叫 SAVE_PATH,变量的值一个文件路径 :::: 核心代码不用动echo[InternetShortcut]%SAVE_PATH%::echo内容变量存放的文件路径,本质就是把这个内容写入到文件中。 :: 本质就是echo[InternetShortcut]C:\Users\xxx\Desktop\我的快捷方式.urlechoURLfile:///%~dp0%TARGET_FILE%%SAVE_PATH%echo快捷方式已创建到%SAVE_PATH% pause3.2、相关知识在 Windows 里用 .url 这种方式创建快捷方式本质就是新建一个文本文件后缀名改成 .url里面写上固定格式的配置[InternetShortcut] 关联文件路径。系统看到这个文件就把它当成快捷方式。写成 file:///Windows 才知道这是本地电脑里的文件。file: 表示 “本地文件协议”/// 固定格式表示本地本机不是网络电脑。\\ip Windows 局域网路径file:/// 本地文件 URL 格式file://ip 局域网文件 URL 格式。4、文本文件相关批处理操作4.1、文本文件中指定内容替换关键知识批处理内置字符串替换可以把变量里所有 aaa 换成 bbb。范式!变量名:查找内容替换内容!代码echo off setlocal enabledelayedexpansionsetoldStr12345setnewStr09876settxtFileab.txt:: 遍历每一行for/fdelims%%ain(%txtFile%)do(setline%%a:: 替换本行内容setline!line:%oldStr%%newStr%!:: 写入临时文件echo!line!temp.tmp):: 覆盖原文件 move /y temp.tmp %txtFile%nulecho替换完成 pause结果4.2、文本文件之前插入内容在文本之后插入内容可以用那么该如何在文本之前插入内容move命令move [选项] 源文件/源文件夹 目标路径/目标文件名作用是文件从原来的地方消失跑到新的地方去了相当于你在电脑上剪切文件再粘贴到别的地方。例如move /y temp.tmp ab.txt执行完之后temp.tmp 就没了只剩下 ab.txt。代码echo off setlocal enabledelayedexpansion :: 要处理的文件setfileab.txt:: 要插入到【开头】的内容setinsert_content我是插入到最前面的内容:: 第一步先写插入的内容到临时文件echo%insert_content%temp.tmp :: 第二步把原文件内容追加到后面type%file%temp.tmp :: 第三步覆盖原文件 move /y temp.tmp%file%nulecho已在文件开头插入内容 pause结果补充copy命令copy [选项] 源文件 目标路径/目标文件名作用是原文件还在同时生成一个一模一样的副本相当于你在电脑上复制文件再粘贴到别的地方。例如copy a.txt D:\就是把 a.txt 复制一份到 D:\ 盘原文件 a.txt 还在原地。

更多文章