循环上一条命令批处理怎么写( 二 )


2. 将某一文件内容或命令执行结果作为循环范围: 假如你有一个文件 todel.txt,里面是所有要删除的文件列表,现在你想将里面列出的每个文件都删掉 。假设这个文件是每个文件名占一行,象这样: c:tempa1.txt c:tempa2.txt c:tempsubdirb3.txt c:tempsubdirb4.txt 那么可以用FOR来完成: for /f %a in (todel.txt) do del %a 这个命令还可以更强大 。
比如你的 todel.txt 并不是象上面例子那么干净,而是由DIR直接生成,有一些没用的信息,比如这样: Volume in drive D is DATA Volume Serial Number is C47C-9908 Directory of D:tmp 09/26/2001 12:50 PM 18,426 alg0925.txt 12/02/2001 04:29 AM 795 bsample.txt 04/11/2002 04:18 AM 2,043 invitation.txt 4 File(s) 25,651 bytes 0 Dir(s) 4,060,700,672 bytes free for 仍然可以解出其中的文件名并进行操作: for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a DEL %a 当然,上面这个命令是在进行删除,如果你只是想看看哪些文件将被操作,把DEL换成echo: for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a echo %a 你将看到: alg0925.txt bsample.txt invitation.txt skip=5 表示跳过前5行(就是DIR输出的头部信息),tokens=5表示将每行的第5列作为循环值放入%a,正好是文件名 。在这里我加了一个文件存在判断,是因为最后一行的"free"刚好也是第5列,目前还想不出好的办法来滤掉最后两行,所以检查一下可保万无一失 。
3. 可以用 /f 参数将某一命令执行结果作为循环范围 非常有用的功能 。比如,我们想知道目前的环境变量有哪些名字(我们只要名字,不要值) 。
可是SET命令的输出是“名字=值”的格式,现在可以用FOR来只取得名字部分: FOR /F "delims==" %i IN ('set') DO @echo %i 将看到: ALLUSERSPROFILE APPDATA CLASSPATH CommonProgramFiles COMPUTERNAME 。
3.bat批处理中怎样用while循环bat常用命令 echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起 。
==== 注 =========== 首先,@ 不是一个命令,而是DOS 批处理的一个特殊标记符,仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符: CR(0D) 命令行结束符 Escape(1B) ANSI转义字符引导符 Space(20) 常用的参数界定符 Tab(09) ; = 不常用的参数界定符 + COPY命令文件连接符 * ? 文件通配符 "" 字符串界定符 | 命令管道符 >> 文件重定向符 @ 命令行回显屏蔽符 / 参数开关引导符 : 批处理标签引导符 % 批处理变量引导符 其次,:: 确实可以起到rem 的注释作用,而且更简洁有效; 但有两点需要注意: 第一,除了 :: 之外,任何以 :开头的字符行,在批处理中都被视作标号,而直接忽略其后的所有内容,只是为了与正常的标号相区别,建议使用 goto 所无法识别的标号,即在 :后紧跟一个非字母数字的一个特殊符号. 第二,与rem 不同的是,::后的字符行在执行时不会回显,无论是否用echo on打开命令行回显状态,因为命令解释器不认为他是一个有效的命令行,就此点来看,rem 在某些场合下将比 :: 更为适用; 另外,rem 可以用于 config.sys 文件中. ===================== echo 表示显示此命令后的字符 echo off 表示在此语句后所有运行的命令都不显示命令行本身 @与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行) 。call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令) 。
pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue 。的提示,等待用户按任意键后继续 rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释) 。