For本身就是一个为了阻止重复或类似代码所存在的语句,像是以下的代码,我们可以用l参数来节省代码。 Echo.这是第1个 Echo.这是第2个 Echo.这是第3个 Echo.这是第4个 Echo.这是第5个 ...... Echo.这是第100个 我们就可以用以下的代码来节省他。 For /l %%i in (1,1,100) Do (Echo.这是第%%i个) For /l %%a in (开始,每次循环跳的范围,终点) Do (执行代码) 值得注意的有三点 1.不管是%%i还是%%a,只能使用一个字节,例如%%b,如果使用超过一个字节的变量,可能会出错。 2.一般变量都是%variable%,可是如果是在For中,就要变成%%variable 3.如果我们要得到%%a下一个循环的值,我们可以用%%b;如果我们要得到%%b下一个循环的值,我们可以用%%c。以此类推。
在第十四楼的时候说过,CMD什么命令都是到下一行才开始做功到,而复合语句(例如If或For),都算同一行语句,所以在其中的变量,就不能 正确的 使用。 我们该如何解决这个问题?我们就必须使用一个叫“变量延迟”的东西。 setlocal EnableDelayedExpansion 延迟变量开启 这一长串是setlocal中最多使用的地方,当然甚至很多人都以为setlocal只能做这件事情,setlocal的事以后会详说。 有了开始延迟变量,就要有关闭延迟变量 setlocal disabledelayedexpansion 延迟变量解释 具体延迟变量是什么呢?我们用下列代码进行解说。 For %%i in (1,1,100) Do ( set /a a=%%i*2 echo.%a%) 试试看,相信大部分人的电脑都会出错,此时就需要使用延迟变量。 setlocal EnableDelayedExpansion For %%i in (1,1,100) Do ( set /a a=%%i*2 echo.!a!) 就像这样,在使用变量的时候把%%换成!!。 值得注意的是,%%i在此For语句中本来就会变动,所以不需要!!i。
是时候讲For /f了, For /f和文本有关,我们就先将CMD中的字符串处理吧。 @echo off set a=Hello World echo.%a:Hello=Hi% pause 你们可以把上面代码储存到bat中试试看 这就是字符串处理中最简单的一个Replace的运用。 %变量:被替换者=替换者% 例如%a:Hello=Hi%的意思就是在变量a中的Hello替换成Hi
当然,CMD中的文本处理不只Replace,不过我们要讲的只有两个,一个是Replace没问题,另外一个就是类似VB中的mid。 @echo off set a=Hello World echo.%a:~0,5% pause 同样执行以上代码,会发现他只输出Hello,这就是~的用处,截取字符串,从第0个开始截到第5个。还有一个用法,请看以下示例。 @echo off set a=Hello World echo.%a:~0,-2% pause 会发现我把5改成了-2,这并不是从第0开始截到第-2个,这是从0开始截到倒数第二个,当然你可以随意的修改,没有问题,不过要注意的是,":"绝对不能漏掉。