批处理for命令的用法_批处理for命令详解

批处理for命令的用法_批处理for命令详解for/?1.对一组文件中的每一个文件执行某个特定命令。for%variablein(set)docommand[command-parameters]for%%variablein(set)docommand [command-parameters]%variable指定一个单一字母可替换的参数。set表示字符串或变量,当表示多个变量时,中间可以,空格等隔开…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

for /?
1.对一组文件中的每一个文件执行某个特定命令。

for %variable in (set) do command [command-parameters]
for %%variable in (set) do command [command-parameters]
%variable 指定一个单一字母可替换的参数。
set 表示字符串或变量,当表示多个变量时,中间可以, 空格等隔开
注:变量可以用通配符?*
command 表示字符串、变量或命令语句
command-parameters
为特定命令指定参数或命令行开关。
在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable
下面实例皆以批处理脚本中为准
变量名称是区分大小写的
for循环:
for 语句依次提取set中的每一个元素,把它赋值给%%variable,
然后把它发给do后的command 中参与命令的执行,并且每次只提取一个元素
类似于常见编程语言的循环
例如批处理中
@echo off 
for %%i in (1,2,3) do echo %%i
pause>nul
就会依次把1,2,3赋值给i
结果输出
1
2
3

for 后 可以 加/d /f /r /l 这四个 参数
1.for/d
set中为目录名或者文件名
如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。
例如
@echo off
for /d %%i in (3*) do echo %%i
pause>nul
结果就是显示当前路径的所有3开头的文件夹

————————————-分割线————————————–

2.for /f
用于文本解析,提取文本信息
for /f  是以行为单位处理文本文件的,每次赋值给参数%%i一行
例如
有123.txt内容如下
1111111111
222222222
333333333
@echo off
for /f %%i in (123.txt) do echo %%i&pause
pause>nul
结果是
111111111
请按任意键继续. . .
222222222
请按任意键继续. . .
333333333
请按任意键继续. . .

如何提取一行文字指定符号前的内容那
1) delims
在批处理中,指定分隔符号的方法是:添加一个如  “delims=符号列表”  的开关,这样,被处理的每行字符串都会被符号列表中罗列出来的符号切分开来。 
这个符号列表可以一次指定很多符号
像这样
for /f “delims=,.” %%i in (123.txt) do echo %%i
pause>nul
他就会把每一行第一个,或第一个.之前的内容都提取出来了
把符号隔开的内容分为节

2) 定点提取:tokens= 
tokens=  后面一般跟的是数字,如  tokens=2,也可以跟多个,但是每个数字
之间用逗号分隔,如  tokens=4,7,9 含义是提取第2节字符串节和提取4,7,9三节
节是由我们对 delims=  这个开关的定义来划分的

实例:
@echo off 
for /f “delims=,  tokens=3” %%i in (123.txt) do echo %%i 
pause>nul
这样就把以,为节 每一行的第三节输出了

提取多个节
   如果  tokens=  后面指定了多个数字,如果形式变量为%%i,那么,第一个
数字指代的内容用第一个形式变量%%i 来接收,第二个数字指代的内容用第二
个形式变量%%j 来接收,第三个数字指代的内容用第三个形式变量%%k 来接
收„„第N 个数字指代的内容用第N 个形式变量来接收,其中,形式变量遵循
字母的排序,第 N 个形式变量具体是什么符号,由第一个形式变量来决定:如
果第一个形式变量是%%i,那么,第二个形式变量就是%%j;如果第一个形式
变量用的是%%x,那么,第二个形式变量就是%%y。 

@echo off 
for /f “delims=,  tokens=2,5” %%i in (test.txt) do echo %%i %%j 
pause>nul
这样子,就把每行以,为节的2,5两节提取出了

多个节
tokens=1,2,3,4,5  可以简写为  tokens=1-5  。 
 
   还可以把这个表达式写得更复杂一点:tokens=1,2-5 或tokens=1-3,4,5
以及tokens=1-4,5 等等

*号的表达
tokens=后面所接的星号表示:字符串从左往右被切分成紧跟在*
之前的数值所表示的节数之后,字符串的其余部分保持不变,整体被*所表示的
一个变量接收。 
@echo off 
for /f “delims=,  tokens=1,*” %%i in (123.txt) do echo %%i %%j 
pause 

就是把第一节 输出 以及第一节之后的所有节作为一个节用%%j来输出

3) 条转行 skip=n 

for  /f  允许你跳
过这些无用的行,直接从第N+1 行开始处理,这个时候,就需要使用参数  skip=n,
其中,n 是一个正整数,表示要跳过的行数。

@echo off 
for /f “skip=2” %%i in (123.txt) do echo %%i 
pause 
 
   这段代码将跳过头两行内容,从第3 行起显示test.txt 中的信息。 

4)忽略以指定字符打头的行:eol= 

@echo off 
for /f “eol=,” %%i in (test.txt) do echo %%i 
pause 
 
   结果是以,打头的行没有显示出来。 
eol只能有一个符号

如果 123.txt 中有以分号打头的行,那么,这些行
在代码[code14]的执行结果中将凭空消失。 
 
for /f  语句是默认忽略以分号打头的行内容的,正如它默认以空格键
或跳格键作为字符串的切分字符一样。 

如果要取消这个默认设置,可选择的办法是: 
 
   1、为eol=指定另外一个字符; 
   2、使用  for /f “eol=”  语句,也就是说,强制指定字符为空


   for /f %%i in („„) do („„)  语句有好几种变形语句,不同之处在于第一个
括号里的内容:有的是用单引号括起来,有的是用双引号包住,有的不用任何符
号包裹,具体格式为: 
 
 
  1、for /f %%i in (文件名) do („„) 
   2、for /f %%i in (‘命令语句’) do („„) 
   3、for /f %%i in (“字符串”) do („„) 

下面是usebackq增强型参数 不常用
4、for /f “usebackq” %%i in (“文件名”) do („„) 
   5、for /f “usebackq” %%i in (`命令语句`) do („„) 
   6、for /f “usebackq” %%i in (‘字符串’) do („„) 


1、
当你希望读取文本文件中的内容的话,第一个括号中不用任何符号包裹,
应该使用的是第1 条语句;例如:你想显示test.txt 中的内容,那么,就使用  
for 
/f %%i in (123.txt) do echo %%i; 

   2、
当你读取的是命令语句执行结果中的内容的话,第一个括号中的命令语
句必须使用单引号包裹,应该使用的是第2 条语句;例如:你想显示当前目录下
文件名中含有test 字符串的文本文件的时候,应该使用
 for /f %%i in (‘dir /a-d 
/b *test*.txt’) do echo %%i  这样的语句; 

  3、当你要处理的是一个字符串的时候,第一个括号中的内容必须用双引号
括起来,应该是用的是第 3 条语句;例如:当你想把 bbs.bathome.cn 这串字符
中的点号换为短横线并显示出来的话,可以使用  for  /f  “delims=. 
tokens=1-3″  %%i  in  (”
http://blog.csdn.net/Turbo_J“)  do  echo  %%i-%%j-%%k  这样的语
句。 
 
   很显然,第一个括号里是否需要用符号包裹起来,以及使用什么样的符号包
裹,取决于要处理的对象属于什么类型:如果是文件,则无需包裹;如果是命令
语句,则用单引号包裹;如果是字符串,则使用双引号括起来。 


usebackq  是一个增强型参数,当使用了这个参数之后,原来的for
语句中第一个括号内的写法要做如下变动:如果第一个括号里的对象是一条命
令语句的话,原来的单引号’要改为后引号`;如果第一个括号里的对象是字符串
的话,原来的双引号”要改为单引号’;如果第一个括号里的对象是文件名的话,
要用双引号”括起来。 

当路径中含有特殊字符的时候比如空格和& 用usebackq 增强型参数
如 不常见
@echo off 
for /f “usebackq” %%i in (“qwe 1.txt”) do echo %%i 
pause>nul

————————————-分割线————————————–

3.for/r  
进入根目录树[Drive:]Path,在树的每个目录中执行for语句。如果在/R后没有指定目录,则认为是
当前目录。如果Set只是一个句点(.),则只枚举目录树
for /r [[drive:]path] %%variable in (set) do command [command-parameters]

检查以 [drive:]path 为根的目录树,指向每个目录中的for语句。
如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,
则枚举该目录树。
tips:
for /r c:\123 %%f IN (456.txt) Do del %%f
结果
即是在c:\123 路径下删除456.txt文件

————————————-分割线————————————–

4.FOR /L
FOR /L %%variable IN (start,step,end) DO command [command-parameters]

该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列
1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1)
这个就和常见编程语言一致了

例如
@echo off
for /l %%i in (1,1,5) do echo %%i
pause>nul
结果
1
2
3
4
5



for循环跳出
简单的可以通过exit来实现或者pause暂停
goto break

:break
exit /b



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194188.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号