版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/29 批处理BAT脚本中for命令的使用在线视频分享约定专心听就行了,不用着急做笔记。视频和文档会放到网上供大家免费下载。请不要使用音箱等外放设备,以免有回声影响其他人,最好使用耳机。理论知识介绍完之后,随机从论坛上找几个帖子现场演示分析问题、解决问题的过程。内容概要•for处理文件•for/d处理文件夹•for/r枚举目录树处理文件•for/l处理数字序列•for/f处理字符串、命令输出和文本内容for命令的基本语法命令关键字:不区分大小写命令关键字:不区分大小写for%%variablein(set)docommand控制变量:控制变量:•区分大小写•推荐使用单个英文字母•不建议使用数字•BAT脚本里面使用%%i•CMD窗口里面使用%i•仅在for循环内部有效文件集合:•一个或多个文件•可以使用通配符•需要放在圆括号里面•不判断文件是否真实存在需要执行的命令:•多行命令需要放在圆括号里面•BAT脚本里面使用@echooff之后不需要使用多余的@来关闭回显for命令处理文件@echooff@echoofffor%%iin(a.txt"bc.txt")do(echo正在处理:%%i)pause@echoofffor%%iin(*.txt??.log)do(echo正在处理:%%i)pauseC:\Test>test.bat正在处理:a.txt正在处理:"bc.txt"请按任意键继续...C:\Test>test.bat正在处理:a.txt正在处理:bc.txt正在处理:1.log正在处理:20.log请按任意键继续...➢问号?表示零个或一个任意字符。➢星号*表示零个或一个或多个任意字符。➢这里的问号?和星号*是通配符,不是正则表达式。for命令的变量扩展@echooff@echoofffor%%iin("C:\ProgramFiles\7-Zip\(7z.exe")doecho文件:%%iecho删除引号:%%~iecho文件所在的驱动器:%%~diecho文件所在的路径:%%~piecho文件名:%%~niecho文件扩展名:%%~xiecho文件路径的短名:%%~siecho文件的日期/时间:%%~tiecho文件的大小:%%~zi)pause@echoofffor%%iin("C:\ProgramFiles\7-Zip\z.exe")do(7echo文件:%%iecho文件所在的驱动器路径:%%~dpiecho文件名和扩展名:%%~nxi)pause文件:"C:\ProgramFiles\7-Zip\7z.exe"删除引号:C:\ProgramFiles\7-Zip\z.exe7文件所在的驱动器:C:文件所在的路径:\ProgramFiles\7-Zip\文件名:7z文件扩展名:.exe文件路径的短名:C:\PROGRA~1\7-Zip\7z.exe文件的日期/时间:2010/11/1821:08文件的大小:284160请按任意键继续...文件:"C:\ProgramFiles\7-Zip\7z.exe"文件所在的驱动器路径:C:\ProgramFiles\7-Zip\文件名和扩展名:z.exe7➢在CMD窗口中执行for/?可以查看完整列表forfor命令的小技巧(1)❖for命令不判断文件是否真实存在@echoofffor%%iin()do(echoIP地址的前三段:%%~ni)pauseC:\Test>test.batIP地址的前三段:127.0.0请按任意键继续...@echoofffor%%iin(3.1415926)do(echo浮点数的整数部分:%%~ni)pauseC:\Test>test.bat浮点数的整数部分:3请按任意键继续...@echoofffor%%iin("C:\ProgramFiles\7-Zip")do(echo目录的最后一级文件夹名称:%%~nxi)pauseC:\Test>test.bat目录的最后一级文件夹名称:7-Zip请按任意键继续...@echoofffor%%iin("C:\ProgramFiles\7-Zip\z.exe7\..")do(echo文件所在的文件夹:%%~nxi)pauseC:\Test>test.bat文件所在的文件夹:7-Zip请按任意键继续...for命令的小技巧(2)@echooff@echoofffor%%iin(test.bat)doecho%%~ni❖BAT脚本里面使用%%i❖BAT脚本里面使用@echooff之后不需要使用多余的@关闭回显for%iin(test.bat)do@echo%~ni❖CMD窗口里面使用%i❖命令前面可以使用@关闭回显@echoofffor%%iin(*.txt)do(echo正在处理:%%iren"%%i""new_%%i")pause❖小心文件集合重复处理的问题C:\Test>dir/b*.txt_1.txt00_2.txt_3.txt0C:\Test>test.bat正在处理:0_1.txt正在处理:0_2.txt正在处理:0_3.txt正在处理:new_0_1.txt请按任意键继续...C:\Test>dir/b*.txtnew_0_2.txtnew_0_3.txtnew_new_0_1.txt经常有人在论坛求助类似的问题/thread-34670-1-1.html内容概要•for处理文件•for/d处理文件夹•for/r枚举目录树处理文件•for/l处理数字序列•for/f处理字符串、命令输出和文本内容for/d命令的基本语法for/d%%variablein(set)docommand❖❖结合通配符处理文件夹•不处理文件•不枚举子文件夹•不处理隐藏文件夹❖添加/r可以枚举子文件夹@echoofffor/d%%iin("C:\Test\*")do(echo%%i)pause@echoofffor/r"C:\Test\"/d%%iin(*)do(echo%%i)pauseC:\Test>test.batC:\Test\Folder1C:\Test\Folder2请按任意键继续...C:\Test>attribFolder3HC:\Test\Folder3C:\Test>test.batC:\Test\Folder1C:\Test\Folder2C:\Test\Folder1\Sub1_1请按任意键继续...内容概要•for处理文件•for/d处理文件夹•for/r枚举目录树处理文件•for/l处理数字序列•for/f处理字符串、命令输出和文本内容for/r命令的基本语法for/r[[drive:]path]%%variablein(set)docommand❖使用星号枚举文件(遍历子文件夹)❖使用点号枚举文件夹(遍历子文件夹) @echooff @echoofffor/r"C:\Test\"%%iin(*.txt)do( for/r"C:\Test\"%%iin(.)do(echo%%i echo%%i ) ) pause pauseC:\Test>test.batC:\Test>test.batC:\Test\0.txt C:\Test\. C:\Test\Folder1\1_1.txt C:\Test\Folder1\. C:\Test\Folder1\Sub1_1\1_1_1.txt C:\Test\Folder1\Sub1_1\.C:\Test\Folder2\2_1.txt C:\Test\Folder2\.请按任意键继续... C:\Test\Folder3\.请按任意键继续...➢不处理隐藏文件和文件夹。➢小心文件集合重复处理的问题。➢如果/r后面不指定路径,默认处理当前文件夹。for/r命令的应用实例@echooffset"FileName=qq.exe"set"AllDrive=CDEFGHIJKLMNOPQRSTUVWXYZ"echo正在全盘搜索%FileName%,请稍候...for%%ain(%AllDrive%)do(ifexist%%a:\(pushd%%a:\for/r%%bin("*%FileName%")do(if/i"%%~nxb"equ"%FileName%"(echo,%%b))➢echo命令和变量中间使用逗号,可以防止变量popd为空以及变量值是on或off的时候发生异常。➢本文所有的脚本主要是为了展示语法,不一定是实现某个功能的最好的方法。))pause内容概要•for处理文件•for/d处理文件夹•for/r枚举目录树处理文件•for/l处理数字序列•for/f处理字符串、命令输出和文本内容for/l命令的基本语法for/l%%variablein(start,step,end)docommand起始值起始值步长终止值❖死循环❖步长不一定是1❖步长可以是负数❖遍历完集合才退出@echoofffor/l%%iin()do(echoHello)pause@echooffecho1到10之间的偶数:for/l%%iin(1,2,10)do(echo%%i)pause@echooffecho1到10倒序:for/l%%iin(10,-1,1)do(echo%%i)pause@echoofffor/l%%iin(1,1,999999)do(echo%%iif%%iequ4(goto:end)):endpausefor/l命令的应用实例@echooff ➢\h/viewthread.php?tid=3774#pid2388使用set/p可以实现不换行输出 \h8REM输出九九乘法表for/l%%iin(1,1,9)do(setlocalenabledelayedexpansionfor/l%%jin(1,1,%%i)do(set/an=%%j*%%iset/p=%%j*%%i=!n!<nul ) ➢在真正需要的时候才打开变量延迟扩展endlocal➢及时关闭变量延迟扩展(尤其是在for循环内部)echo,\h/thread\h-\h1224\h-\h1\h-\h1.html)➢使用echo命令输出空行的方法pause \h/thread\h-\h13860\h-\h1\h-\h1.html内容概要•for处理文件•for/d处理文件夹•for/r枚举目录树处理文件•for/l处理数字序列•for/f处理字符串、命令输出和文本内容for/f命令的基本语法for/f["options"]%%variablein(file-set)docommand文件集合文件集合for/f["options"]%%variablein("string")docommand字符串字符串for/f["options"]%%variablein('command')docommand命令的执行结果命令的执行结果for/f命令的选项eoleol=c 中文版系统帮助文档太(Zhen)任(Keng)性(Die)指一个行注释字符的结尾(就一个)specifiesanendoflinecommentcharacter(justone)@echooff @echooffREM默认忽略分号开头的行 REM忽略指定字符开头的行for/f%%iin(test.txt)do(for/f"eol=#"%%iin(test.txt)do(echo,%%i echo,%%i) )pause pauseC:\Test>typetest.txt C:\Test>test.bat C:\Test>typetest.txt C:\Test>test.bat;第1行默认注释 #第2行自定义注释 ;第1行默认注释 ;第1行默认注释#第2行自定义注释 第3行正文 #第2行自定义注释 第3行正文第3行正文 请按任意键继续...第3行正文 请按任意键继续...➢所谓的endoflinecomment是一个专有名词,它是一种注释方法。意思是,如果某行以指定字符开头,那么整行都是注释。比如LinuxShell脚本里面的井号,VBS脚本里面的单引号,等等。与之相对应的,是类似C语言里面的/*xyz*/这种可以放到一行代码中间的注释方法。for/f命令的选项skipskip=nskip=n-指在文件开始时忽略的行数。@echooffREM跳过前两行for/f"skip=2"%%iin(test.txt)do(echo,%%i)pause@echooffREM把两个文件逐行合并成一列setn=0for/f%%iin(a.txt)do(call:MergeColumn%%n%%%%iset/an+=1)pausegoto:eof:MergeColumnif%1==0(set"myskip="(else)set"myskip=skip=%1")for/f"%myskip%"%%jin(b.txt)do(echo,%2%%jgoto:eof)C:\Test>typea.txt文件a第1行文件a第2行文件a第3行C:\Test>typeb.txt文件b第1行文件b第2行文件b第3行C:\Test>typetest.txt第1行第2行第3行第4行第5行C:\Test>test.bat文件a第1行文件b第1行文件a第2行文件b第2行文件a第3行文件b第3行请按任意键继续...C:\Test>test.bat第3行第4行第5行请按任意键继续...for/f命令的选项tokenstokens=x,y,mtokens=x,y,m-n-指定需要获取的列C:\Test>typea.txtABCDEFGHIJKLMN@echooffREM默认获取第一列for/f%%iin(a.txt)do(echo,%%i)pause@echooffREM逗号间隔,减号表示范围for/f"tokens=1,3,5-7"%%iin(a.txt)do(echo,%%i%%j%%k%%l%%m)pause@echooffREM星号表示后面的所有列for/f"tokens=1,*"%%iin(a.txt)do(echo,%%iecho,%%j)pauseC:\Test>test.batA请按任意键继续...C:\Test>test.batACEFG请按任意键继续...C:\Test>test.batABCDEFGHIJKLMN请按任意键继续...➢列很多的情况:\h/thread\h-\h5548\h-\h1\h-\h1.html➢获取最后一列:\h/thread\h-\h13000\h-\h1\h-\h1.htmlfor/f命令的选项delimsdelims=xxxdelims=xxx-指定分隔符集。用来替换空格和跳格键(制表符)的默认分隔符集。-tokens和delims同时出现时,建议把delims放在tokens后面。C:\Test>typea.txtABC:D:EFG+H-IABCMNABCXYZ@echooffREM默认分隔符是空格和制表符for/f"tokens=3"%%iin(a.txt)do(echo,%%i)pause@echooffREM设置冒号为分隔符for/f"tokens=3delims=:"%%iin(a.txt)do(echo,%%i)pauseC:\Test>test.batC:D:E请按任意键继续...C:\Test>test.batEFG+H-IABCMNABCXYZ请按任意键继续...@echooffREM设置加号和减号为分隔符(如有空格请放在最后)for/f"tokens=3delims=+-"%%iin(a.txt)do(echo,%%i)pause@echooffREM不要企图把字符串作为一个整体分隔符for/f"tokens=3delims=ABC"%%iin(a.txt)do(echo,%%i)pauseC:\Test>test.batIABCMNABCXYZ请按任意键继续...C:\Test>test.bat:D:EFG+H-I请按任意键继续...for/f命令tokens和delims小技巧C:C:\Test>typea.txtABC"DEF"Gabc"def"g123"456"7@echooffREM删除空行并且删除行首的空格或制表符for/f"tokens=*"%%iin(a.txt)do(echo,%%i)pauseC:\Test>test.batABC"DEF"Gabc"def"g1723"456"请按任意键继续...@echooffREM删除空行但是不删除行首的空格或制表符for/f"delims="%%iin(a.txt)do(echo,%%i)pauseC:\Test>test.batABC"DEF"Gabc"def"g1723"456"请按任意键继续...@echooffREM以双引号作为列分隔符for/ftokens^=2^delims^=^"%%iin(a.txt)do(echo,%%i)pauseC:\Test>test.batDEFdef564请按任意键继续...for/f命令的选项usebackqusebackqusebackq-允许在file-set中使用双引号扩起文件名称。C:\Test>type"a1.txt"ABCDEFG@echooffREM默认把双引号里面的内容当做字符串处理for/f"tokens=2"%%iin("a1.txt")do(echo,%%i)pause@echooffREM正确处理文件名包含空格的情况for/f"usebackqtokens=2"%%iin("a1.txt")do(echo,%%i)pauseC:\Test>test.bat1.txt请按任意键继续...C:\Test>test.batB请按任意键继续...➢极少用到的usebackq知识点(不建议使用这种写法):原来的("string")要把双引号改为单引号('string')原来的('command')要把单引号改为后引号(`command`)for/f命令里面特殊字符要转义@echoofffor/f"delims="%%iin('dir/b*.txt^|findstr"[0@echoofffor/f"delims="%%iin('dir/b*.txt^|findstr"[0-9]"')do(echo,%%i)pause@echoofffor/f"delims="%%iin('wmicLogicalDiskwhereDriveType^="3"getDeviceID')do(echo,%%i)pause@echoofffor/f"delims="%%iin('wmicNicConfiggetIPAddress^,MACAddress/value')do(echo,%%i)pause@echoofffor/f"delims="%%iin('dir/b/s/a-d"*.jpg"2^>nul')do(echo%%i)pause/thread-1290-2-16306.html#pid/thread-56922-1-232844.html#pid1/thread-56922-1-1.html#pid232844/thread-57460-1-1.html#pid234531小心处理文件扩展名❖❖扩展名可能让你处理到本来不想处理的文件@echoofffor/f"delims="%%iin('dir/b"*.htm"')do(echo,%%i)pauseC:\Test>test.bat1.htm2.html请按任意键继续...@echoofffor/f"delims="%%iin('dir/b"*.htm"^|findstr"htm$"')do(echo,%%i)C:\Test>test.bat1.htm请按任意键继续...☺实际例子:\h/thread\h-\h32507\h-\h1\
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届安徽省县域合作共享联盟高三上学期期末质量检测历史试题(含答案)
- 试题研究中考生物试卷及答案
- 山西安管再培训试题及答案
- 企业内部控制试题及答案
- 2025 小学二年级科学下册认识动物翅膀飞行高度测试报告总结课件
- 2026 年初中英语《短文改错》专项练习与答案 (100 题)
- 2026年深圳中考语文二模仿真模拟试卷(附答案可下载)
- 2026年大学大二(康复治疗学)康复治疗技术基础测试题及答案
- 肺心病护理团队协作模式
- 2026年深圳中考化学有关化学式的计算试卷(附答案可下载)
- 广东省汕尾市2024-2025学年高二上学期期末教学质量监测地理试题(解析版)
- 病历书写基本规范培训
- 2026年大学生传统文化素养竞赛基础题库含答案
- 2026年职业生涯规划学习题目含答案
- 2026年医务科工作计划
- 模具工程师年终设计总结及维修计划
- 2026年江西青年职业学院单招职业技能考试备考试题附答案详解
- 免疫联合局部治疗在实体瘤中的临床应用
- 老年痴呆科普课件整理
- 2022年钴资源产业链全景图鉴
- GB/T 22900-2022科学技术研究项目评价通则
评论
0/150
提交评论