BZ易风

导航

 

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

 

posted on 2022-06-21 09:20  BZ易风  阅读(100)  评论(0编辑  收藏  举报