bat脚本的for语句

一、for在cmd和批处理中的差异
在cmd窗口中,for之后的形式变量I必须使用单百分号引用,即%i;for %i in (command1) do command2 
在批处理文件中,引用形式变量I必须使用双百分号,即%%i。for %%i in (command1) do command2
 
二、for语句基本构成
  1.for、in和do是for语句的关键字,它们三个缺一不可;
  2.%%i是for语句中对形式变量的引用,即使变量l在do后的语句中没有参与语句的执行,也是必须出现的;
   形式变量i,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量;形式变量i还可以换成其他的字符,
但是,为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0~%%9中的任意一个;
  3.in之后,do之前的括号不能省略;
   in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,用空格键、跳格键、逗号、分号或等号分隔;
  4.command1表示字符串或变量,command2表示字符串、变量或命令语句;
  for语句依次提取command1中的每一个元素,把它的值赋予形式%%i,带到do后的command2中参与命令的执行;并且每次只提取一个元素,然后执行一次do后的命令语句,
而无论这个元素是否被带到command2中参与了command2的运行;当执行完一次do后的语句之后,再提取command1中的下一个元素,再执行一次command2,
如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执行结束。
 
三、for 参数/d /r /l /f
/d : 仅用于目录搜索
  for /d %%i in (*) do @echo %%i 会将当前目录下的所有目录名打印出来
/r : 递归
  for /r %%i in (*) do @echo %%i 会将当前目录及子目录下的所有文件名打印出来
/l(L): 迭代 从start开始步进step到超出end结束,l是指loop
  for /l %% Variable in (Start#,Step#,End#) do Command  
/f : 解析文本,用来处理文件和一些命令的输出结果
  FOR /F ["options"] &variable IN (file-set/‘command’/“string”) DO command [command-parameters]
  for /f %%i in (文件名/‘命令语句’/“字符串”) do (...) 
  a. options可选参数:eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq
    eol=c 忽略以指定字符开头的行(只能指定一个字符)。
      for /f "eol=#" %%i in (test.txt) do echo %%i       忽略test.txt文件中以#开头的行。
    skip=n 在文件开始时忽略的行数,从第一行开始,跳过n行,从n+1行开始显示,n是正整数。
      for /f "skip=2" %%i in (test.txt) do echo %%i     跳过前两行,从第三行开始显示。
    delims=xxx 指定分隔符,可以指定多个符号进行文本分隔。替换默认的空格和制表符的分隔。 
      for /f "delims=:" %%i in (test.txt) do echo %%i     以“:”作为分隔符对test.txt内容进行分隔。
    for /f "eol=#" %%i in (test.txt) do echo %%i
    for /f "eol=#" %%i in (test.txt) do echo %%i
 
 
四、示例
a.搜索当前目录所有文件: for %%i in (*.*) do echo "%%i"
  只要文件名不要路径的把%%i替换成%%~nxi   n是名字,x是扩展名/后缀
b.搜索当前目录所有.so格式后缀的文件: for %%i in (*.so) do echo "%%i"
c.如需同时搜索当前目录下子文件中可在for 后加 /r。命令: for /r %%i in (*.*) do echo "%%i",会将当前目录及当前目录所有子目录的下所有文件遍历一遍。
 
posted @   abs8023  阅读(395)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示