DOS批处理高级教程:第三章 FOR命令中的变量
- 格式:doc
- 大小:28.00 KB
- 文档页数:6
CMD命令行高级教程[收集整理]CMD命令行高级教程精选合编(上){尽量用中文(中国)输入法,errorlevel的使用不精通少用}目录第一章批处理基础第一节常用批处理内部命令简介1、REM 和::2、ECHO 和@3、PAUSE4、ERRORLEVEL5、TI TLE6、COLOR7、mode 配置系统设备8、GOTO 和:9、FIND10、STAR T11、assoc 和ftype12、pushd 和popd13、CALL14、shift15、IF16、setlocal 与变量延迟(ENABLEDELAYEDEXPA NSION / DISABLEDELAYEDEXPA NSION启动或停用延缓环境变量扩展名。
)17、ATTRIB 显示或更改文件属性第二节常用特殊符号1、@ 命令行回显屏蔽符2、% 批处理变量引导符3、> 重定向符4、>> 重定向符5、<、>&、<& 重定向符6、| 命令管道符7、^ 转义字符8、& 组合命令9、&& 组合命令10、|| 组合命令11、"" 字符串界定符12、, 逗号13、; 分号14、() 括号15、! 感叹号第二章FOR命令详解一、基本格式二、参数/d 仅为目录三、参数/R 递归(文件名)四、参数/L 迭代数值范围五、参数/F 迭代及文件解析第三章FOR命令中的变量一、~I - 删除任何引号("),扩展 %I二、%~fI - 将%I 扩展到一个完全合格的路径名三、%~dI - 仅将%I 扩展到一个驱动器号四、%~pI - 仅将%I 扩展到一个路径五、%~nI - 仅将%I 扩展到一个文件名六、%~xI - 仅将%I 扩展到一个文件扩展名七、%~sI - 扩展的路径只含有短名八、%~aI - 将%I 扩展到文件的文件属性九、%~tI - 将%I 扩展到文件的日期/时间十、%~zI - 将%I 扩展到文件的大小十一、%~$PATH:I第四章批处理中的变量一、系统变量二、自定义变量第五章set命令详解一、用set命令设置自定义变量二、用set命令进行简单计算三、用set命令进行字符串处理1、字符串替换2、字符串截取第六章if命令讲解第一种用法:IF [NOT] ERRORLEVEL number command第二种用法:IF [NOT] string1==string2 command第三种用法:IF [NOT] EXIST filename command第四种用法:IF增强的用法第七章DOS编程高级技巧一、界面设计二、if…else…条件语句三、循环语句四、子程序五、用ftp命令实现自动下载六、用7-ZIP实现命令行压缩和解压功能七、调用VBScript程序八、将批处理转化为可执行文件九、时间延迟1、利用ping命令延时2、利用for命令延时3、利用vbs延迟函数,精确度毫秒,误差1000毫秒内4、仅用批处理命令实现任意时间延迟,精确度10毫秒,误差50毫秒内十、模拟进度条十一、特殊字符的输入及应用十二、随机数(%random%)的应用技巧十三、变量嵌套与命令嵌套1、更正了所有的错别字,适当排版,增加条理性。
【dos命令之for用法详解】dos命令for用法详解dos命令之for用法详解工具/原料DOS方法/步骤for帮助文档对一组文件中的每一个文件执行某个特定命令。
FOR %variable IN (set) DO command [command-parameters]%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。
可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters为特定命令指定参数或命令行开关。
在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable而不要用 %variable。
变量名称是区分大小写的,所以 %i 不同于 %I.如果命令扩展被启用,下列额外的 FOR 命令格式会受到支持:FOR /D %variable IN (set) DO command [command-parameters] 如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。
如果在 /R 后没有指定目录,则使用当前目录。
如果集仅为一个单点(.)字符,则枚举该目录树。
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)。
FOR /F [options] %variable IN (file-set) DO command [command-parameters]FOR /F [options] %variable IN (string) DO command [command-parameters] FOR /F [options] %variable IN (‘command’) DO command [command-parameters]或者,如果有 usebackq 选项:FOR /F [options] %variable IN (file-set) DO command [command-parameters]FOR /F [options] %variable IN (string) DO command [command-parameters] FOR /F [options] %variable IN (‘command’) DO command [command-parameters]filenameset 为一个或多个文件名。
for命令使用方法
for命令是一种循环命令,可以帮助我们在批处理脚本中重复执行同一段代码。
它的格式如下:
for 变量名 in (列表) do (
要执行的代码
)
其中,变量名为自定义变量,在循环执行过程中会逐个取出列表中的元素,将其赋值给变量,然后执行相应的代码块。
代码块需要用圆括号括起来,并在最后加上一个结束符“)”。
列表可以是一组数据,也可以是一个文件名或者目录名。
对于数据,我们可以使用逗号分隔符或空格分隔符来定义;对于文件名或目录名,我们需要使用通配符来匹配文件名或目录名。
除了基本的循环功能,for命令还可以配合其他命令来实现一些高级功能,比如批量重命名文件、批量修改文件属性等。
我们可以通过在代码块中调用其他命令来实现这些功能。
总之,for命令是批处理脚本中非常实用的一种命令,掌握它的使用方法可以提高我们编写批处理脚本的效率和灵活性。
- 1 -。
批处理命令行中for循环基本用法for循环是在办公自动化中非常实用的语句之一,本节讨论DOS语言中for循环的各种模式:如/r,/d,/l,/f等,以及各种参数:如tokens,delims,usebackq等的基本用法。
我们须要根据实际情况选择不同的模式和参数来配置for循环以达到我们的目的。
1、【for语句的常规用法】形式1:for %%i in (字符串集合/数字列表/…) do 命令语句@echo offfor %%i in (aa,bb,cc) do echo %%ipause结果为:aabbcc注:这里如果用点进行分割,字符串会作为一个整体输出如果用逗号分割,则会一次一个单次进行打印。
判断某个磁盘是否存在,如果盘符存在,则输出它:@echo offecho 存在有驱动器:for %%i in (a,b,c,d,e,f,g) if exist %%i: echo %%ipause显示当前目录下的文件名称(非文件夹,文件夹将不会被列出):@echo offfor %%i in (*.*) do echo "%%i"pause仅显示当前目录下的txt文件名称(通配符*.txt的用法):@echo offfor %%i in (*.txt) do echo "%%i"pause把txt换成其他扩展名亦可仅列出其他格式的文件名仅显示当前目录下的txt文件名称(通配符?规定字符个数):@echo offfor %%i in (??.txt) do echo "%%i"pause仅会输出当前目录下文件名为2个字符的txt文件名2、【关于for语句的/f模式(遍历文件内容模式)】①/f模式/f模式用于遍历文件中的内容:@echo offfor /f %%i in (test.txt) do echo %%ipause运行的结果,会逐行打印test.txt文件中的内容②delims参数(表示分隔符)使用delims提取每一行在特定符号之前的内容;当设置delims为逗号(,)时,只显示每一行逗号之前内容;@echo offfor /f "delims=," %%i in (test.txt) do echo %%i pause如果识别切分的符号有多个,则可以直接继续在第一个后面写,例如:"delims=.,"此时会先判定是否有英文句号,如果没有则再判断有没有英文逗号。
批处理FOR命令之FOR的参数批处理FOR命令之FOR的参数OS.W.BAT2 2008-05-31 16:20:40 阅读129 评论0字号:大中小订阅一、不带参数的FOR格式为:for %%i in (set) do command%%i 为变量set为一个文件或者一组文件,其实就是一个集合。
可用通配符,比如*.txt。
command 是要执行的命令。
看个例子:有个文件夹,有如下文件:a.txtb.mp3c.mp3c.wmaa.rme.bat你想显示里面的扩展名为mp3的文件,你会用什么命令呢?当然是dir了,dir *.mp3。
同样的,for也可以来实现,如下:for %%i in (*.mp3) do echo %%i这如何理解?for会先从括号里面执行,因为括号里面是*.mp3,所以for会先得到当前目录下所有的扩展名是mp3的文件,并把它们作为一个集合,而每个文件名就是一个元素,像这样{b.mp3,c.mp3},然后用%%i依次代替每个元素,之后做do后面的命令。
具体过程如下:用%%i代替b.mp3,然后执行echo %%i,显示b.mp3用%%i代替c.mp3,再执行echo %%i,显示c.mp3没有元素了,for就停止了。
当然,()里面不局限于一个文件或者通配符,可以有多个,比如:for %%i in (*.mp3,*.wma) do echo %%i 也是可以的。
注意:do 后面可以跟任何命令,不要局限于echo,这里只是演示。
二、FOR的-l参数格式为:for /L %%i in (start,step,end) do command这个表示以增量形式从start到end的一个数字序列,步长是step,就是每次的增量是step比如:(1,1,5) 将产生序列1 2 3 4 5,(1,2,9) 将产生1 3 5 7 9序列。
这有什么用呢?举个例子,你想同时打开3个记事本程序,可以这样:for /L %%i in (1,1,3) do notpad.exe如何理解?还是从括号先执行,产生集合{1,2,3},然后用%%i依次代替集合中的每个元素,之后执行do后面的命令。
FOR对一组文件逐一运行一条命令。
该命令可用在批处理文件中,也可命令提示符下直接调用。
语法:FOR在批处理程序中的使用语法如下:FOR %%变量IN (集合) DO 命令[命令参数]FOR在命令提示符下的使用语法如下:FOR %变量IN (集合) DO 命令[命令参数]参数:%%变量或%变量代表一个可替换的变量。
FOR命令将用指定的一组文件中的每一个文本字符串来替换%%变量(或%变量),直到此命令(在命令参数中指定的)处理完所有的文件为止。
用%%变量来执行一批处理程序中的FOR命令。
用%变量来执行命令提示符下的FOR命令。
集合指定一个或多个要用特定命令对其进行处理的文件或文本字符串。
圆括号必须得有。
命令指定要对一组文件中每一文件进行处理的命令。
命令参数指定要用于指定命令(如果指定的命令使用了任何参数或开头)的任何参数或开关。
FOR─注解使用关键字IN及DOIN和DO并不是参数,但FOR命令中要求这两个关键字。
如果省略了这两个关键字,则MS-DOS将显示一错误信息。
使用可替代变量除了数字0到9之外,你可把任何字符用作变量,以避免与批处理参数%0到%9的混淆。
对简单的批处理程序来说,象%%F这样的一个单一字符就足够了。
在复杂的批处理程序中,你可把多个值用于变量以区分不同的可替换变量。
然而,在同一命令行上不能嵌套(增加)多个FOR命令。
指定一组文件集参数可代表一组文件或几组文件。
你可用通配符(*及?)来指定一文件集。
下面是合法的文件集:(*.doc)(*.doc *.txt *.me)(jan*.doc jan*.rpt feb*.doc feb*.rpt)(ar??1991.* ap??1991.*)当你使用FOR命令时,集中的第一个值将代替%%变量(或%变量),而为了处理此值MS-DOS将执行指定的命令;此过程一直持续进行,直到MS-DOS将对应于集中的值(或多值)的所有文件(或多组文件)处理完毕为止。
计算机DOS操作系统常用命令讲解计算机DOS操作系统常用命令讲解读书欲精不欲博,用心欲专不欲杂。
以下是店铺为大家搜索整理的计算机DOS操作系统常用命令讲解,希望对正在关注的您有所帮助!批处理命令与变量for命令及变量基本格式:FOR /参数%variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的`参数,如:%i ,而指定一个变量则用:%%i ,而调用变量时用:%i% ,变量是区分大小写的(%i 不等于 %I)。
批处理每次能处理的变量从%0—%9共10个,其中%0默认给批处理文件名使用,%1默认为使用此批处理时输入的的第一个值,同理:%2—%9指输入的第2-9个值;例:net use \\ip\ipc$ pass /user:user 中ip为%1,pass为%2 ,user为%3(set):指定一个或一组文件,可使用通配符,如:(D:\user.txt)和(1 1 254)(1 -1 254),{“(1 1 254)”第一个"1"指起始值,第二个"1"指增长量,第三个"254"指结束值,即:从1到254;“(1 -1 254)”说明:即从254到1}command:指定对第个文件执行的命令,如:net use命令;如要执行多个命令时,命令这间加:& 来隔开command_parameters:为特定命令指定参数或命令行开关IN (set):指在(set)中取值;DO command :指执行command参数:/L 指用增量形式{(set)为增量形式时};/F 指从文件中不断取值,直到取完为止{(set)为文件时,如(d:\pass.txt)时}。
用法举例:@echo offecho 用法格式:test.bat *.*.* > test.txtfor /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \\%1.%%G /user:administrator | find "命令成功完成" >>test.txt存为test.bat 说明:对指定的一个C类网段的254个IP依次试建立administrator密码为空的IPC$连接,如果成功就把该IP存在test.txt中。
for语句可以在命令行提示符中使用,也可以在批处理文件中使用。
这两种情况下唯一的区别是%和%%,参加下文说明。
一、for语句的格式:for [参数] 变量in (集合) do 命令[命令的参数]二、for语句的作用:对集合内的元素逐一执行后面的命令。
1、如:for %%i in (你好) do echo %%i将在屏幕上显示“你好”2个字。
这里集合是“你好”,执行的命令是“echo”。
由于集合中只有1个元素,因此循环只运行一次。
如果改成for %%i in (你好朋友) do echo %%i将会显示2行文字,第一行为“你好”,第二行为“朋友”。
因为2个词之间有空格,因此集合中就有了2个元素,循环将运行2次。
2、注意:以上for语句的运行方式是新建一个批处理文件,即扩展名为“.bat”的文件,内容为上面的命令,然后运行。
为了批处理执行完不退出,可在最后加上一条pause>null命令,这样能看到执行的结果。
要想通过cmd命令行执行的话,必须将%%换成%,即去掉一个%,如下:for %i in (你好) do echo %i3、以下所有例子都是这样,若要在命令行提示符下执行,请将所有的%%改成一个%。
三、for语句详细说明:上面语句格式中有的加了中括号[],表示这个语句元素不是必须的,只在需要时使用。
像刚才显示“你好”的命令中就没有使用[参数]这个语句元素。
所有语句元素间用空格隔开。
各语句元素的写法:for、in、do这3个符号是固定不变的1、[参数]的种类:只有4种,分别是/d、/r、/l、/f(即目录Directory、递归recursion、序列list、文件file),他们用于对后面的集合的含义做出解释,请与下面的集合解释结合来看。
这4个参数不区分大小写,可以联合使用,即一条for语句可以出现多个参数。
2、变量:除10个数字外(0-9)的所有符号(因为0-9往往作为形参使用,为了与此区别),变量名一般用单个字母表示即可,而且变量名区分大小写,即A和a是两个不同的变量。
For命令详解(最后校正 2012-06-04 )作者:namejm () 最后校正:Maozi ( M.z. Tec.)QQ:364700492开贴时间:2008 / 10封贴更新:2010 / 10 – 2011 / 02最后校正:2012 / 05 / 28 – 06 / 04一概述与前言二 for语句的基本用法三 for /f 含变量延迟四 for /r五 for /d六 for /l一概述与前言1、概述我是在今年5月底学习过程中接触到这篇文章的,从内容上来说作者对FOR命令的理解以及对其具体含义与用法的阐述都很到位、细致。
对于个别含义说明和例证确实很精彩。
在阅读和学习这篇文章的同时,我也对其内容做了一定的整理与注释,算不上什么校正吧。
对一些重点要点做了标色醒目注明,个别例证的地方稍加了个人观点与理解。
这篇文章主要针对正在学习批处理的童鞋们对FOR命令有更直白和更深刻的理解与领悟,对其操作性的灵活与强大有更好的认知。
也可为其他对批处理较熟悉的朋友们提供一种参考。
由于本人主要是以学习的心态为基础对这篇文章稍作整理与批注的,人工码字,难免会有缺失与疏漏,还请不吝指正与谅解。
很多童鞋在批处理的学习过程中,for与其他几大高级命令(如:if)便成了童鞋们的拦路虎,对基础甚少的新人来说,学习这个几大高级命令确实是他们最难跨过也最头痛的门槛。
其中for便成了之最,因为for是最为强大的命令,它的出现,使得解析文本内容、遍历文件路径、数值递增/递减等操作成为可能;配合if、call、goto等流程控制语句,更是可以实现脚本复杂的自动化、智能化操作;合理使用for语句,还能使代码大为简化,免除各位编写大量重复语句之苦。
而能否熟练使用for语句,已经成为衡量一个人批处理水平高低最主要的标准。
2、前言(作者)在这篇教程中,我将通过实际应用中频繁出现的例子,带领大家步入for语句的神奇之门,一步步迈向for语句的魔幻殿堂,使得大家在实际的应用中,能独立写出简洁高效的代码,在批处理的世界里自由驰骋。
批处理命令及运行目录表批处理命令与变量1:for命令及变量基本格式:FOR /参数%variable IN (set) DO command [command_parameters]%variable:指定一个单一字母可替换的参数,如:%i ,而指定一个变量则用:%%i ,而调用变量时用:%i% ,变量是区分大小写的(%i 不等于%I)。
批处理每次能处理的变量从%0—%9共10个,其中%0默认给批处理文件名使用,%1默认为使用此批处理时输入的的第一个值,同理:%2—%9指输入的第2-9个值;例:netuse \\ip\ipc$ pass /user:user 中ip为%1,pass为%2 ,user 为%3(set):指定一个或一组文件,可使用通配符,如:(D:\user.txt)和(1 1 254)(1 -1 254),{ "(1 1 254)"第一个"1"指起始值,第二个"1"指增长量,第三个"254"指结束值,即:从1到254;"(1 -1 254)"说明:即从254到1 }command:指定对第个文件执行的命令,如:net use命令;如要执行多个命令时,命令这间加:& 来隔开command_parameters:为特定命令指定参数或命令行开关IN (set):指在(set)中取值;DO command :指执行command参数:/L 指用增量形式{ (set)为增量形式时};/F 指从文件中不断取值,直到取完为止{ (set)为文件时,如(d:\pass.txt)时}。
用法举例:@echo offecho 用法格式:test.bat *.*.* > test.txtfor /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \\%1.%%G/user:administrator | find "命令成功完成" >>test.txt存为test.bat说明:对指定的一个C类网段的254个IP依次试建立administrator密码为空的IPC$连接,如果成功就把该IP存在test.txt 中。
批处理之for命令简述for命令是cmd中功能最强⼤的命令之⼀,for命令作⽤来执⾏迭代任务。
下⾯是msdn中关于for命令语法的参考,建议中⽂和英⽂对照阅读,如果只看中⽂的话。
有⼀些地⽅的翻译会难以理解,直接看英⽂原⽂就很清晰。
语法基本语法:for命令的基础语法如下:for %i|%%i in (set) do command [commandlineoptions]其中%i|%%i为在for中使⽤的迭代变量。
即使在后⾯的command命令中没有使⽤到变量%i,变量也是必须声明的,变量名可以使⽤除%0~%9之外的任意字母,例如%j,%k,%l都是合法的。
set可以表⽰⼀个需要for循环进⾏搜索的集合,它可以是字符串,⽂件路径,或者⼀系列的值,在set中可以使⽤通配符 '*'和'?'。
如果直接在命令⾏中输⼊使⽤%i,如果是写在批处理⽂件中则需要写作%%i。
for语句中的变量名是区分⼤⼩写,%i和%I会被视为不同的变量。
command表⽰在每次循环中执⾏名的命令,commandlineoptions表⽰某些command命令在运⾏时使⽤的开关参数,为⾮必要参数。
下⾯是⼀个基本⽤法的实例。
在我们的e:\test\路径中存在⼀些⽂件,我们可以使⽤for循环带搜索此路径中的所有⽂件,并打印出⽂件名。
for %i in (e:\test\*.txt) do @echo %i该命令的执⾏效果如图所⽰,会列⼊该⽬录中所有txt类型的⽂件,并打印⽂件名。
或者⽤for来迭代⼀系列的值,实例如下:扩展语法: 在启⽤命令扩展的情况下(默认为启⽤状态),for会有如下⼏种额外的形式⽀持:仅⽬录查找 for /d {%%|%}<Variable> in (<Set>) do <Command> [<CommandLineOptions>]迭代⽬录 for /r [[<drive>:]<path>] {%%|%}<variable> in (<set>) do <command> [<commandlinepptions>]迭代⼀系列值 for /l {%%|%}<variable> in (<start#>,<step#>,<end#>) do <command> [<commandlinepptions>]⽂件,字符串解析 for /f [<parsingkeywords>] {%%|%}<variable> in (<set>) do <command> [<commandlinepptions>] for /f [<parsingkeywords>] {%%|%}<variable> in (<literalstring>) do <command> [<commandlinepptions>] for /f [<parsingkeywords>] {%%|%}<variable> in ('<command>') do <command> [<commandlinepptions>] for /f的语法较为复杂,理解起来有⼀定的难度,for /f中的解析关键字[parsingkeywords]允许使⽤下⾯的形式:eol指定在解析⽂本⽂件的⾏结束符delims指定解析⽂件时使⽤的分隔符,默认的分隔符为空格或制表符tokens指定在每⾏中要传递给%i的标记的索引,如果制定了多个标记,for 语句会分配额外的变量来接受内容,如果最后⼀个标记为*,for会多分配⼀个额外的字符串接收*之后额字符串内容。
DOS之for循环⽤法说明Windows bat脚本的for语句基本形态如下:1 2在cmd窗⼝中:for%I in(command1) do command2在批处理⽂件中:for%%I in(command1) do command2之所以要区分cmd窗⼝和批处理⽂件两种环境,是因为在这两种环境下,命令语句表现出来的⾏为虽然基本⼀样,但是在细节上还是稍有不同,最明显的⼀个差异就是:在cmd窗⼝中,for之后的形式变量I必须使⽤单百分号引⽤,即%I;⽽在批处理⽂件中,引⽤形式变量I必须使⽤双百分号,即%%I。
为了⽅便起见,若不是特别强调,以下的讲解都以批处理⽂件环境为例。
我们先来看⼀下for语句的基本要素都有些什么:1. for、in、do 是for语句的关键字,它们三个缺⼀不可;2. %%I是for语句中对形式变量的引⽤,即使变量l在do后的语句中没有参与语句的执⾏,也是必须出现的;3. in之后,do之前的括号不能省略;4. command1表⽰字符串或变量,command2表⽰字符串、变量或命令语句;下⾯来看⼀个Windows bat脚本的demo(记为demo1):1 2 3@echo offfor%%I in(ABC) do echo%%I pause保存为.bat⽂件(批处理⽂件)并执⾏,将会在弹出的批处理窗⼝中看到这样的信息:对批处理⽂件的for循环就是这样简单,下⾯来看看for语句的注意事项,并运⾏更复杂的for循环实例。
for语句的形式变量I,可以换成26个字母中的任意⼀个,这些字母会区分⼤⼩写,也就是说,%%I和%%i会被认为不是同⼀个变量;形式变量I还可以换成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发⽣冲突,请不要随意把%%I替换为%%0~%%9中的任意⼀个;in和do之间的command1表⽰的字符串或变量可以是⼀个,也可以是多个,每⼀个字符串或变量,我们称之为⼀个元素,每个元素之间,⽤空格键、跳格键、逗号、分号或等号分隔;for语句依次提取command1中的每⼀个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执⾏;并且每次只提取⼀个元素,然后执⾏⼀次do后的命令语句,⽽⽆论这个元素是否被带到command2中参与了command2的运⾏;当执⾏完⼀次do后的语句之后,再提取command1中的下⼀个元素,再执⾏⼀次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执⾏结束。
DOS批处理高级教程1.批处理基础1.1.第一节常用批处理内部命令简介批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。
这些命令统称批处理命令。
小知识:可以在键盘上按下Ctrl+C组合键来强行终止一个批处理的执行过程。
了解了大概意思后,我们正式开始学习.先看一个简单的例子!1.@echo off2.echo "欢迎来到非常BAT!"3.pause复制代码把上面的3条命令保存为文件test.bat或者test.cmd然后执行,他就会在屏幕上显示以下二行话:欢迎来到非常BAT!请按任意键继续. . .这就是一个简单批处理文件了,这个批处理文件一共就用了2条命令 "echo" 和"pause" 还有一个特殊符号"@"从上面这个简单的批处理中,我们可以发现其实批处理就是运用一些含有特殊意义的符号和一些完成指定功能的命令组合而成,那么在批处理中有多少这样的特殊符号和功能命令呢?我们现在就来仔细了解一下一些最常用的!批处理的常见命令(未列举的命令还比较多,请查阅帮助信息)1、REM 和 ::2、ECHO 和 @3、PAUSE4、ERRORLEVEL5、TITLE6、COLOR7、mode 配置系统设备8、GOTO 和 :9、FIND10、START11、assoc 和 ftype12、pushd 和 popd13、CALL14、shift15、IF16、setlocal 与变量延迟17、ATTRIB 显示或更改文件属性介绍命令1、REM 和 ::REM为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显。
其次, :: 也可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意:第一, 任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。
DOS批处理高级教程精选合编_整理1.变量和参数在DOS批处理中,您可以使用变量来存储和操作数据。
使用set命令可以定义变量,例如:```set variable=value```使用%variable%的形式来引用变量,例如:```echo %variable%```除了自定义的变量,还有一些特殊变量可用于批处理脚本。
例如,%0表示脚本文件的名称,%1-%9表示传递给脚本的参数。
2.循环和条件语句在DOS批处理中,您可以使用for循环和if条件语句来实现重复执行和条件判断。
例如,以下是一个使用for循环打印文件夹中所有文件的示例:```for %%i in (*.txt) doecho %%i```以下是一个使用if条件语句判断文件是否存在的示例:```if exist filenameecho File existselseecho File does not exist```3.执行外部命令和程序```call script.bat```以下是一个使用start命令打开一个程序的示例:```start program.exe```您还可以使用其他命令来执行文件操作、网络操作等。
4.错误处理和日志记录在DOS批处理中,您可以使用关键字2>nul将错误消息重定向到空设备,以忽略错误。
例如:``````还可以使用>>将输出追加到日志文件中,以便进行日志记录。
例如:``````5.用户交互```set /p name=Enter your name:```点击用户输入后,变量name将包含输入的值。
以上是DOS批处理的一些高级技巧和常用操作。
希望这些信息对您有所帮助,并能在您的DOS批处理脚本中发挥作用。
当然,DOS批处理具有广泛的功能和用途,您可以根据自己的需求进一步探索和学习。
FOR命令中有一些变量,他们的用法许多新手朋友还不太了解,今天给大家讲解他们的用法!
先把FOR的变量全部列出来:
~I - 删除任何引号("),扩展%I
%~fI - 将%I 扩展到一个完全合格的路径名
%~dI - 仅将%I 扩展到一个驱动器号
%~pI - 仅将%I 扩展到一个路径
%~nI - 仅将%I 扩展到一个文件名
%~xI - 仅将%I 扩展到一个文件扩展名
%~sI - 扩展的路径只含有短名
%~aI - 将%I 扩展到文件的文件属性
%~tI - 将%I 扩展到文件的日期/时间
%~zI - 将%I 扩展到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将%I 扩展到找到的第一个完全合格的名称。
如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串
我们可以看到每行都有一个大写字母"I",这个I其实就是我们在FOR带入的变量,我们FOR语句代入的变量名是什么,这里就写什么.
比如:FOR /F %%z IN ('set') DO @echo %%z
这里我们代入的变量名是z那么我们就要把那个I改成z,例如%~fI改为%~fz
至于前面的%~p这样的内容就是语法了!
好开始讲解:
一、~I - 删除任何引号("),扩展%I
这个变量的作用就如他的说明,删除引号!
我们来看这个例子:
首先建立临时文件temp.txt,内容如下
"1111
"2222"
3333"
"4444"44
"55"55"55
可建立个BAT文件代码如下:@echo off
2echo ^"1111>temp.txt
3echo "2222">>temp.txt
4echo 3333^">>temp.txt
5echo "4444"44>>temp.txt
6echo ^"55"55"55>>temp.txt
复制代码
rem 上面建立临时文件,注意不成对的引号要加转义字符^,重定向符号前不要留空格
7FOR /F "delims=" %%i IN (temp.txt) DO echo %%~i
8pause
9del temp.txt
复制代码
执行后,我们看CMD的回显如下:
1111 #字符串前的引号被删除了
2222 #字符串首尾的引号都被删除了
3333" #字符串前无引号,后面的引号保留
4444"44 #字符串前面的引号删除了,而中间的引号保留
55"55"55 #字符串前面的引号删除了,而中间的引号保留
请按任意键继续. . .
和之前temp.txt中的内容对比一下,我们会发现第1、2、5行的引号都消失了,这就是删除引号~i的作用了!
删除引号规则如下(BA T兄补充!)
1、若字符串首尾同时存在引号,则删除首尾的引号;
2、若字符串尾不存在引号,则删除字符串首的引号;
3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除。
二、%~fI - 将%I 扩展到一个完全合格的路径名
看例子:
把代码保存放在随便哪个地方,我这里就放桌面吧.
10FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~fi
11pause
复制代码
执行后显示内容如下
C:\Documents and Settings\Administrator\桌面\test.bat
C:\Documents and Settings\Administrator\桌面\test.vbs
当我把代码中的%%~fi直接改成%%i
12FOR /F "delims==" %%i IN ('dir /b') DO @echo %%i
13pause
复制代码
执行后就会显示以下内容:
test.bat
test.vbs
通过对比,我们很容易就看出没有路径了,这就是"将%I 扩展到一个完全合格的路径名"的作用也就是如果%i变量的内容是一个文件名的话,他就会把这个文件所在的绝对路径打印出来,而不只单单打印一个文件名,自己动手动实验下就知道了!
三、%~dI - 仅将%I 扩展到一个驱动器号
看例子:
代码如下,我还是放到桌面执行!
14FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~di
15pause
复制代码
执行后我CMD里显示如下
C:
C:
我桌面就两个文件test.bat,test.vbs,%%~di作用是,如果变量%%i的内容是一个文件或者目录名,他就会把他这文件
或者目录所在的盘符号打印出来!
四、%~pI - 仅将%I 扩展到一个路径
这个用法和上面一样,他只打印路径不打印文件名字
FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~pi
pause
我就不打结果了,大家自己复制代码看结果吧,下面几个都是这么个用法,代码给出来,大家自己看结果吧!
五、%~nI - 仅将%I 扩展到一个文件名
只打印文件名字
16FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ni
17pause
复制代码
六、%~xI - 仅将%I 扩展到一个文件扩展名
只打印文件的扩展名
18FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~xi 19pause
复制代码
七、%~sI - 扩展的路径只含有短名
打印绝对短文件名
20FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~si 21pause
复制代码
八、%~aI - 将%I 扩展到文件的文件属性
打印文件的属性
22FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ai 23pause
复制代码
九、%~tI - 将%I 扩展到文件的日期/时间
打印文件建立的日期
24FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ti 25pause
复制代码
十、%~zI - 将%I 扩展到文件的大小
打印文件的大小
26FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~zi
27pause
复制代码
上面例子中的"delims=="可以改为"delims=",即不要分隔符
十一、%~$PATH:I - 查找列在路径环境变量的目录,并将%I 扩展到找到的第一个完全合格的名称。
如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串
这是最后一个,和上面那些都不一样,我单独说说!
然后在把这些代码保存为批处理,放在桌面。
28@echo off
29FOR /F "delims=" %%i IN (“notepad.exe”) DO echo %%~$PATH:i
30pause
复制代码
龙卷风补充:上面代码显示结果为C:\WINDOWS\system32\notepad.exe
他的意思就在PATH变量里指定的路径里搜索notepad.exe文件,如果有notepad.exe则会把他所在绝对路径打印出来,没有就打印一个错误!
好了,FOR的的变量就介绍到这了!。