FOR命令中的一些变量
~I - 删除任何引号("),扩展 %I
%~fI - 将 %I 扩展到一个完全合格的路径名
%~dI - 仅将 %I 扩展到一个驱动器号
%~pI - 仅将 %I 扩展到一个路径
%~nI - 仅将 %I 扩展到一个文件名
%~xI - 仅将 %I 扩展到一个文件扩展名
%~sI - 扩展的路径只含有短名
%~aI - 将 %I 扩展到文件的文件属性
%~tI - 将 %I 扩展到文件的日期/时间
%~zI - 将 %I 扩展到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串
注:%如果在cmd命令行中使用变量一个 %变量名 如果在.bat或.cmd中需要两个 %%变量名。
我们可以看到每行都有一个大写字母"I",这个I其实就是我们在FOR带入的变量,我们FOR语句代入的变量名是什么,这里就写什么.
比如:FOR /F %%z IN ('set') DO @echo %%z
这里我们代入的变量名是z那么我们就要把那个I改成z,例如%~fI改为%~fz
至于前面的%~p这样的内容就是语法了!
~I - 删除任何引号("),扩展 %I
test.txt文件
"1111
2222"
"3333"
44"44
bat文件
@echo off FOR /F "delims=" %%i IN (test.txt) DO @echo %%~i pause
可以看出,删除引号规则:
1、若字符串首尾同时存在引号,则删除首尾的引号;
2、若字符串尾不存在引号,则删除字符串首的引号;
3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除。
%~fI - 将 %I 扩展到一个完全合格的路径名
如:
@echo off FOR /F "delims=" %%i IN ('dir /b') DO @echo %%~fi pause
对比下,如果是:
@echo off FOR /F "delims=" %%i IN ('dir /b') DO @echo %%i pause
通过对比,我们很容易就看出没有路径了,这就是"将 %I 扩展到一个完全合格的路径名"的作用也就是如果%i变量的内容是一个文件名的话,他就会把这个文件所在的绝对路径打印出来,而不只单单打印一个文件名
%~dI - 仅将 %I 扩展到一个驱动器号
只显示文件所在的盘符
@echo off FOR /F "delims=" %%i IN ('dir /b') DO @echo %%~di pause
%~pI - 仅将 %I 扩展到一个路径
这个用法和上面一样,他只打印路径不打印文件名字,也不打印盘符
@echo off FOR /F "delims=" %%i IN ('dir /b') DO @echo %%~pi pause
%~nI - 仅将 %I 扩展到一个文件名
只打印文件名字,不打印路径和扩展名
@echo off FOR /F "delims=" %%i IN ('dir /b') DO @echo %%~ni pause
%~xI - 仅将 %I 扩展到一个文件扩展名
只打印文件的扩展名
@echo off FOR /F "delims=" %%i IN ('dir /b') DO @echo %%~xi pause
%~sI - 扩展的路径只含有短名
打印绝对短文件名
@echo off FOR /F "delims=" %%i IN ('dir /b') DO @echo %%~si pause
%~aI - 将 %I 扩展到文件的文件属性
打印文件的属性
@echo off FOR /F "delims=" %%i IN ('dir /b') DO @echo %%~ai pause
%~tI - 将 %I 扩展到文件的日期/时间
打印文件建立的日期
%~zI - 将 %I 扩展到文件的大小
打印文件的大小,用字节表示,0为文件夹
@echo off FOR /F "delims=" %%i IN ('dir /b') DO @echo %%~zi pause
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串
通白理解其实就是在环境变量PATH中指定的路径里查找指定文件,有点象索引搜索.
@echo off FOR /F "delims=" %%i IN ("net.exe") DO @echo %%~$PATH:i pause
CMD指令echo %path% 可以查看环境变量PATH中有哪些路径
组合用法
@echo off FOR /F "delims=" %%i IN ('dir /b') DO @echo %%~dpnxatzi pause
加路径搜索
@echo off FOR /F "delims=" %%i IN ("net.exe") DO @echo %%~dpnxatz$PATH:i pause