前言
前面我们已经熟悉了基本的命令和基本符号, 对简单的DOS批处理脚本都已经有了初步的了解, 本节, 我们来讲述FOR命令用法及相关的实例, 写出更好的、可视性更强的脚本。
上一章的链接
DOS批处理高级教程(一) 批处理基础
第二章 FOR命令详解
一、基本格式
FOR %%variable IN (set) DO command [command-parameters]
下面的各自参数, 就不加赘述了, 直接通过实例描述运行理解。
二、参数 /d 主要搜索匹配目录
@echo off
for /d %%i in (c:\*) do echo %%i
pause
三、参数 /R 搜索指定目录树中的匹配文件
@echo off
for /d %%i in (???) do echo %%i
pause
枚举C盘下所有的 .exe 程序, 如果不带c:\ 则表示为当前目录
@echo off
for /r c:\ %%i in (*.exe) do echo %%i
pause
四、参数 /L 按数字序列(start,step,end)循环
有过编程经验, 知道lispace, 或者 seq 的 知道这个列表推导式是什么了
@echo off
for /l %%i in (1,1,5) do @echo %%i
pause
五、参数 /F 处理命令输出、字符串及文件内容
\迭代及文件解析
使用文件解析来处理命令输出、字符串及文件内容。使用迭代变量定义要检查的内容或字符串,并使用各种options选项进一步修改解析方式。使用options令牌选项指定哪些令牌应该作为迭代变量传递。请注意:在没有使用令牌选项时,/F 将只检查第一个令牌。
文件解析过程包括读取输出、字符串或文件内容,将其分成独立的文本行以及再将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代变量值,调用 for 循环。默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。
@echo off
rem 首先建立临时文件test.txt
echo ;注释行,这是临时文件,用完删除 >test.txt
echo 11段 12段 13段 14段 15段 16段 >>test.txt
echo 21段,22段,23段,24段,25段,26段 >>test.txt
echo 31段-32段-33段-34段-35段-36段 >>test.txt
FOR /F "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do echo %%i %%j %%k
Pause
Del test.txt
'''-> demo2.bat'''
@echo off
FOR /F "eol= delims=" %%i in (test.txt) do echo %%i
Pause
'''demo3.bat '''
@echo off
FOR /F "delims=" %%i in ('net user') do @echo %%i
pause
第三章 FOR命令中的变量
都不一一列举了, 都根据格式试验下即可。 另外也可以在控制台中查询。
一、 ~I - 删除任何引号(“),扩展 %I
FOR /F "delims=" %%i IN (temp.txt) DO echo %%~i
pause
del temp.txt
二、 %~fI - 将 %I 扩展到一个完全合格的路径名
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~fi
pause
三、 %~dI - 仅将 %I 扩展到一个驱动器号
四、 %~pI - 仅将 %I 扩展到一个路径
五、 %~nI - 仅将 %I 扩展到一个文件名
六、 %~xI - 仅将 %I 扩展到一个文件扩展名
七、 %~sI - 扩展的路径只含有短名
八、 %~aI - 将 %I 扩展到文件的文件属性
九、 %~tI - 将 %I 扩展到文件的日期/时间
十、 %~zI - 将 %I 扩展到文件的大小
十一、 %~$PATH:I
第六章 IF命令讲解
略
主要是熟悉, if和增强if即可; 前面已经举过不少例子了
@echo off
if not exist "c:\test" (echo 存在文件) ELSE echo 不存在文件
pause
//2
@echo off
set /p var=请输入一个数字:
if %var% LEQ 4 (echo 我小于等于4) ELSE echo 我不小于等于4
pause
后记
以后有相关非常好的脚本, 并且能充分表达出含义的补上, 目前没有这么多需求
参考文章
http://blog.csdn.net/lanbing510/article/details/7461073
关于更深入的DOS批处理教程请看下一章, 都有大致了解, 回来查询相关命令并熟悉也不失为一个方法。