找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24099|回复: 2

[其他] 这两个批处理语句的用法是怎样的?

[复制链接]
发表于 2013-7-23 16:33:54 | 显示全部楼层 |阅读模式
刚学批处理,今天在论坛上看到一个贴子,有两句没看懂,求大神讲解下 %%~和dir /a-d /s /b "%%a:\*%FileName%" 2^>nul 不是很明白
其一%%b不是就可以直接引用参数b了,为什么还要加上~nx   
其二 dir /a-d   这个参数是什么意思。 dir /?中没看到   后面接 %%a:\*%FileName%" 2 这个 * 和后面2 是什么意思。 整句有点不明白。
原帖子内容如下:
  1. @echo off
  2. rem 指定待搜索的文件
  3. set "FileName=log.txt"
  4. echo 正在搜索,请稍候...
  5. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  6.   if exist %%a:\nul (
  7.     for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
  8.       if /i "%%~nxb" equ "%FileName%" (
  9.         echo.%%b
  10.       )
  11.     )
  12.   )
  13. )
  14. pause
复制代码
发表于 2013-7-23 18:22:03 | 显示全部楼层
在这个格式中:
for /f "参数" %%a in ('命令') do 复合语句
执行 命令 的时候实际上是启动了一个 cmd,并把 命令 作为参数传递给 cmd,实际执行的是像这样的:
cmd /c 命令
你例子中的 > 是参数的一部分,所以需要转义为普通字符串,把它保留到 for /f 启动的那个 cmd 中去解析,否则会引起语法错误。
因为双引号也有转义效果,所以也可以写成这样:
  1. for /f "delims=" %%b in ('"dir /a-d /s /b "%%a:\*%FileName%" 2>nul"') do
复制代码
%%~nxb 的意思是获取 %%b 的文件全名(含文件名与后缀名),可参阅 for /f 中的解释:
另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:

     %~I          - 删除任何引号("),扩展 %I
     %~fI        - 将 %I 扩展到一个完全合格的路径名
     %~dI        - 仅将 %I 扩展到一个驱动器号
     %~pI        - 仅将 %I 扩展到一个路径
     %~nI        - 仅将 %I 扩展到一个文件名
     %~xI        - 仅将 %I 扩展到一个文件扩展名
     %~sI        - 扩展的路径只含有短名
     %~aI        - 将 %I 扩展到文件的文件属性
     %~tI        - 将 %I 扩展到文件的日期/时间
     %~zI        - 将 %I 扩展到文件的大小
     %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩展
                   到找到的第一个完全合格的名称。如果环境变量名
                   未被定义,或者没有找到文件,此组合键会扩展到
                   空字符串

可以组合修饰符来得到多重结果:

     %~dpI       - 仅将 %I 扩展到一个驱动器号和路径
     %~nxI       - 仅将 %I 扩展到一个文件名和扩展名
     %~fsI       - 仅将 %I 扩展到一个带有短名的完整路径名
     %~dp$PATH:I - 搜索列在路径环境变量的目录,并将 %I 扩展
                   到找到的第一个驱动器号和路径。
     %~ftzaI     - 将 %I 扩展到类似输出线路的 DIR

在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。
发表于 2013-7-23 18:25:09 | 显示全部楼层
for 是最难学也是最有用的命令,学会之后再回头看看其实也是很简单的,只要理解了几个概念就易如反掌
学 for 建议看这个:
http://bbs.bathome.net/thread-2189-1-1.html

评分

参与人数 1技术 +1 收起 理由
441857769@qq.co + 1 非常感谢~! for循环确实很难。还要继续学习 ...

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 10:59 , Processed in 0.083741 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表