批处理for命令详解

在cmd窗口中的写法:

FOR %variable IN (set) DO command [command-parameters]
循环 %变量 进入 (集中,设置) 执行 命令 [命令-参数]

在批处理文件中:

FOR %%variable IN (set) DO command [command-parameters]

循环 %%变量 进入 (集中,谁知) 执行 命令 [命令-参数]
具体例子:

for %%i in (1 2 3) do @echo %i

for 同时具有查找盘符,以及文件的功能 并支持通配符

for %%i in (*.*) do echo %%i 显示当前文件夹下的所有文件 按照dir默认顺序进行排列

for %%i in (*txt) do echo %%i 显示当前文件夹下的所有txt文件 按照dir默认顺序进行排列

for %%i in (????.txt) do echo %%i 显示当前文件夹下文件名小于或等于三的txt文件。
(for命令是否作为查找文件的功能,是根据in 后的(command)来决定的 当command的值是为通配符时,for便查找当前文件夹下的所有与之匹配的文件)

注:for命令下的查找文件功能,默认不显示隐藏文件。
练习:用for语句建立test1.txt、test2.txt和test3.txt三个文本文件。

@echo off
for %%i in (nul) do type %%i>test1.txt&type %%i>test2.txt&type %%i>test3.txt
pause

以上代码可行 请选择其他的方法 就是一条命令执行了三次

@echo off
for %%i in (.)do cd%%i >1.txt&cd%%i >2.txt&cd%%i >3.txt
pause

for命令的用法在我看来是什么都可以的啊。。。 查找文件它可以,显示文本它也在行
显示文本我们常常会想到以下命令 type more sort find findstr 等命令,不过这里for也可以的哦。

使用
@echo off
for /f %%i in (1.txt) do echo %%i
pause

逐行分析文本文件的内容。
便是 for /f 最为强大的一个功能。

@echo off
for /f %%i in (1.txt) do echo %%i&pause
pause>nul
==================================================================
使用
@echo off
for /f "delims=、" %%i in (ck.txt) do echo %%i
pause

提取ck.txt文本中每行"、”第一节的所有内容,并显示出来。

再来

使用
@echo off
for /f "delims=。" %%i in (ck.txt) do echo %%i
pause>nul

提取每行"。"第一节的所有内容,并显示出来。

delims可同时指定多个符号,例如:
@echo off
for /f "delims=,。" %%i in (ck.txt) do echo %%i
pause>nul

提取每行",。"第一节的所有内容,并显示出来。

详解:逐行读取ck.txt中的内容,以逗号和句号切分每一行的内容(不存在逗号和句号的行,则不再切分,为了描述的方便,我们把被逗号或句号切分的一个一个的字符串片段,称之为节),然后,for /f 会提取第一节的内容作为最终结果,显示在屏幕上。需要注意的是,在这里,所有行的字符串被切分成了两个以上的节,但是,代码只会提取第一节字符串的内容,因为 for /f 语句默认只提取第一节的符串。

=============================================

========================

使用

@echo off
for /f "delims=, tokens=3" %%i in (cs.txt) do echo %%i
pause>nul

@echo off
for /f "delims=, tokens=3,4" %%i in (cs.txt) do echo %%i %%j
pause>nul

@echo off
for /f "delims=,tokens=1,2" %%i in (ck.txt) do echo %%i %%j
pause>nul

这里的节是基于符号来谈的,即指定符号之前的字符串的一小节,含有指定符号的所有节为总节数。
统计一个符号在一行中出现了几次,这个几次就是几节。
for /f 在提取时tokens 的数字,是基于你所要提取的符号而言的,
如上面的例子:
在ck.txt文本中每行含有“,”的第二节以及第三节。
没有达到要求的保存原样
达到要求的则按规定显示。

根据for /f "delims=? tokens=?"的特性,可以了解到,for 在提取完毕字符后 会出现一个 " " 空格。
可以达到替换的目的。
这里以 ck.txt 为例子。
@echo off
for /f "delims=、tokens=1,*" %%i in (ck.txt) do echo %%i %%j
pause

提取以"、"为基础的所有节中的第一节,并保留其后的字符串。
并导入1.txt文本中。

@echo off
for /f "delims=、 tokens=1,*" %%i in (ck.txt) do echo %%i %%j>>1.txt
pause

@echo off
for /f "delims=, tokens=1-5" %%i in (cs.txt) do echo %%i %%j %%k %%l %%m
pause>nul

@echo off
for /f "delims=、 tokens=1,3-4,*" %%i in (cs.txt) do echo %%i %% j %%k %%l
pause>nul

关闭echo off 回显 ,关闭命令回显
在cs.txt中提取每行、符号的第1、3、4、节,并保存第、符号第四节之后的所有字符串。
关闭pause显示,按任意键退出。

for /f 跳过指定行数,skip(跳过,略过)=
@echo off
for /f "skip=2" %%i in (ck.txt) do echo %%i
echo.or, &pause>nul
显示第二行之后的所有信息。

for /f "eol=?" 文字列结尾


for /f %%i in (filenames) do echo %%i
for /f %%i in ('command') do echo %%i
for /f %%i in ("string) dor echo %%i

查找f盘共有多少个exe文件

dir /s /b /l /aa /od f:\*exe|find /c "exe"

拆分
dir /s /b /l /aa /od f:\*exe >1.txt
find /c "exe" 1.txt

dir /s /b /l /aa-s-h-r /on d:\*mp3|find /c "mp3"

==============================================

重要提示
注意for句式的用法
以免搞混

for %%i in (str sri sin,sng;sst=ssr) do ( ) %%i
使用不加任何参数的for 语句可提取元素
分隔符 为 空格键 Spacebar 制表符 Tab 逗号 , 分号 ; 等号 =
五种分隔方式。
每一个字符串都是一个独立的元素。
可以再do后面的%%i中被引用!
!!!独立元素 引用 分析 操作!!!

for %%i in (*.*or*txtor*or??.txt..) do ( )%%i

in 后 do前的括号中可以是通配符,这是的for具有了查找文件的功能,但是。。只能查找当前文件夹下的内容。
子目录中的文件无法查找,并且不显示隐藏文件。

for /f %%i in ('command') do ( ) %%i
for /f %%i in (filename) do ( ) %%i
for /f %%i in ("string") do

( ) %%i
for /f 不适用与读取元素内容。
!!!逐行进行分析、引用、操作!!!






相关文档
最新文档