批处理的重点,for循环的使用

   for循环有六种用法,乍一看很复杂,其实没那么复杂。个人建议直接使用4 5 6 ,因为多了个这个"usebackq",意思就是说,可以处理 文件名的全路径或者命令语句的返回结果中有空格或& 的文件。比如这种文件 D:\Program Files\a.txt,处理这种路径带空格的文件,下面的1 2 3 是无能为力的。   下面对上面六种格式,做举例说明:  for循环详细用法,请参考此文《批处理for语句从入门到精通》。    
  
  1、for /f %%i in (文件名) do (……) 
    2、for /f %%i in ('命令语句') do (……)
   3、for /f %%i in ("字符串") do (……)
  4、for /f "usebackq" %%i in ("文件名") do (……)
  5、for /f "usebackq" %%i in (`命令语句`) do (……)
  6、for /f "usebackq" %%i in ('字符串') do (……)

 其中,4、5、6由1、2、3发展而来,他们有这样的对应关系:1-->4、2-->5、3-->6。

好在后3种情形并不常用【 编注:其实这三种情况经常会碰到,windows的文件路径通常带空格的比较多】,所以,牢牢掌握好前三种句型【 编注:最好记住后三种,因为我经常用到的都是后3种】的适用情形就可以了,否则,要在这么多句型中确定选择哪一条语句来使用,还真有点让人头脑发懵。

至于 for /f 为什么要增加usebacq参数,我只为第4条语句找到了合理的解释:为了兼容文件名中所带的空格或&。它在第5、6条语句中为什么还有存在的必要,我也不是很明白,这有待于各位去慢慢发现【编注:第五条的其实也有存在的必要,详细见下面<3.5>的解释】。

<3.5> 解释说明:请你在命令提示符下面运行dir /a-d /b /s *.exe ,其作用是打印出该文件夹下面所有的exe文件,包括子目录里面的。下面的test目录是我自己创建的。

      D:\Program Files\腾讯游戏>dir /a-d /b /s *.exe
      D:\Program Files\腾讯游戏\test\abc.exe
      D:\Program Files\腾讯游戏\test\aaa.exe
      D:\Program Files\腾讯游戏\CFSelWorld.exe
      D:\Program Files\腾讯游戏\crossfire.exe
      D:\Program Files\腾讯游戏\limingliming.exe

由上面的命令执行结果,可以看出,第5条语句里面的"usebackq"完全有存在的必要。微软搞出这么个东西来,自然也有它的用处的。举个例子c.bat内容如下:

    cd /d "D:\Program Files\腾讯游戏"
    for /f "usebackq delims=" %%i in (`dir /a-d /b /s *.exe`) do cacls "%%i" /e /c /d everyone 
c.bat目的就是,对"D:\Program Files\腾讯游戏"目录下,所有的游戏exe文件拒绝任意用户访问,不可执行,不可删除。每条命令含义如下:
cd /d                                           : 使用 /D 开关,除了改变驱动器的当前目录之外,还可改变当前驱动器。这样可以直接到D:盘。
cacls "%%i" /e /c /d everyone: cacls命令是windows处理文件权限用的。具体可查看帮助命令 cacls /? 。/d everyone表示拒绝任何用户访问。
"usebackq delims="               : usebackq的意思前面讲过了,这里说下delims=,注意等号后面什么都没有,表示for循环切分的时候按照行为单位。如果等号后面有东西,比如delims=\ 请看下面3个例子:

(1) for /f "usebackq delims=" %%i in ("d:\a.txt") do echo "%%i"   注:对a.txt按照每行进行切割,然后循环打印
       "abc\def\xyz"
       "xxxxxx"
       "yyyyy"
       "123\456\ddd"
(2) for /f "usebackq delims=\" %%i in ("d:\a.txt") do echo "%%i"   注:对a.txt按照在反斜杠'\'处进行切割,切割出来的结果只取第一个反斜杠的前面的内容,如果某行一个反斜杠则全打印出来。
        "abc"
        "xxxxxx"
        "yyyyy"
        "123"
(3) for /f "usebackq tokens=2, delims=\" %%i in ("d:\a.txt") do echo "%%i"   注: 如果想取某个地方的,比如想截取def,请使用tokens,详细用法见网页链接《 for循环详细用法,请参考此文章。》
 其中a.txt有如下内容:
            abc\def\xyz
            xxxxxx
            yyyyy
            123\456\ddd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值