Board logo

标题: [文本处理] 关于批处理变量扩充:%~$PATH:I的个人总结 [打印本页]

作者: lidongyang    时间: 2021-5-14 12:00     标题: 关于批处理变量扩充:%~$PATH:I的个人总结

首先,看一下官方的说明文本:
  1. %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩展
  2.                                 到找到的第一个完全合格的名称。如果环境变量名
  3.                                 未被定义,或者没有找到文件,此组合键会扩展到
  4.                                 空字符串
复制代码
可以说是相当晦涩难懂,我是看了多少遍也不能从字面上理解它,只能自己慢慢尝试。
第一步:准备两个bat文件:test.bat、a.bat(取名称你随意,从简是原则,毕竟是测试使用),
第二步:在命令行或者直接从“我的电脑”>属性>高级系统设置>高级>环境变量里获取,从中取得前两个路径:比如我的是C:\Program Files (x86)\Intel\iCLS Client\;
C:\Program Files\Intel\iCLS Client\;
第三步:编辑test.bat,在其中输入:
  1. @echo off
  2.             echo %~$PATH:0,%~$PATH:1
  3.             echo.
  4.             pause
复制代码
并把它放到目录C:\Program Files (x86)\Intel\iCLS Client\下,把a.bat放到目录C:\Program Files\Intel\iCLS Client\
第四步:执行 test.bat,a.bat 会得到这样的结果:C:\Program Files (x86)\Intel\iCLS Client\test.bat,C:\Program Files\Intel\iCLS Client\a.bat
总结:%~$PATH:I实际应用时就是把I换成数字0~9,PATH就是指系统环境变量,带个表达式的意思就是遍历环境变量中的每一个值项,如果每个值项代表的目录中有test.bat及a.bat文件,则输入该文件的完全限定名(包括路径和文件名)。
作者: newswan    时间: 2021-5-14 12:29

回复 1# lidongyang


    不是每一个,是“第一个”
作者: lidongyang    时间: 2021-5-14 17:43

回复 2# newswan
它首先就是要依次遍历环境变量中的每个值,直到那个目录下有这个文件。实际情况是它可能需要全部遍历也可能一次就完成了。
作者: Renekton    时间: 2023-9-5 10:35

本帖最后由 Renekton 于 2023-9-5 10:45 编辑

本来还想自己写遍历PATH的,结果仔细看了看for的文档,居然已经有了。。
chcp切换代码页到65001(utf-8)就是英文的了,我帮阿三软翻译:
----------------
  1. %~$PATH:I - 在PATH环境变量列表中的文件夹搜索,找到第一个与%I匹配的结果时,就将此变量替换扩展为该结果。
  2.             若找不到结果,就扩展为空字符串
复制代码
说白了就是官方给的遍历PATH的方法,但是和控制台中查找命令的行为相同,就是只会顺序遍历PATH并且只找第一个。
在~$之间可以像%~dI,%~pI这样插入dpfn之类的说明。
另外,并不局限于搜索PATH,任何与PATH类似的变量,只要是以分号分隔、结尾"\0"的
字符串都可以参与。
比如以下都是可以的:
  1. %~dp$PATH:6
  2. %~$abaaba:1
  3. rem abaaba=C:\;D:\;D:\xiaojiejie\
复制代码
注意到%~$path:I扩展出来的结果是一定带完整路径的,相当于自动%~dpfI. 并且,%~其它I一定会返回结果(
不管这个文件存不存在),但这个一旦找不到,就会返回空字符串。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2