[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 关于批处理变量扩充:%~$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文件,则输入该文件的完全限定名(包括路径和文件名)。

本帖最后由 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一定会返回结果(
不管这个文件存不存在),但这个一旦找不到,就会返回空字符串。
1

评分人数

TOP

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

TOP

回复 1# lidongyang


    不是每一个,是“第一个”

TOP

返回列表