FOR命令中有一些变量,他们的用法许多新手朋友还不太了解,今天给大家讲解他们的用法,需要的朋友可以参考下

FOR命令中有一些变量,他们的用法许多新手朋友还不太了解,今天给大家讲解他们的用法!

先把FOR的变量全部列出来:

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


我们可以看到每行都有一个大写字母"I",这个I其实就是我们在FOR带入的变量,我们FOR语句代入的变量名是什么,这里就写什么.

比如:FOR /F  %%z IN ('set') DO @echo %%z

这里我们代入的变量名是z那么我们就要把那个I改成z,例如%~fI改为%~fz

至于前面的%~p这样的内容就是语法了!

好开始讲解:

一、 ~I  - 删除任何引号("),扩展 %I

这个变量的作用就如他的说明,删除引号!
我们来看这个例子:
首先建立临时文件temp.txt,内容如下
"1111
"2222"
3333"
"4444"44
"55"55"55

可建立个BAT文件代码如下:

@echo off
echo ^"1111>temp.txt
echo "2222">>temp.txt
echo 3333^">>temp.txt
echo "4444"44>>temp.txt
echo ^"55"55"55>>temp.txt

rem 上面建立临时文件,注意不成对的引号要加转义字符^,重定向符号前不要留空格

FOR /F "delims=" %%i IN (temp.txt) DO echo %%~i
pause
del temp.txt

执行后,我们看CMD的回显如下:
  #字符串前的引号被删除了
  #字符串首尾的引号都被删除了
3333"  #字符串前无引号,后面的引号保留
4444"44  #字符串前面的引号删除了,而中间的引号保留
55"55"55 #字符串前面的引号删除了,而中间的引号保留
请按任意键继续. . .

和之前temp.txt中的内容对比一下,我们会发现第1、2、5行的引号都消失了,这就是删除引号~i的作用了!
删除引号规则如下(BAT兄补充!)
1、若字符串首尾同时存在引号,则删除首尾的引号;
2、若字符串尾不存在引号,则删除字符串首的引号;
3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除。

二、 %~fI  - 将 %I 扩展到一个完全合格的路径名

看例子:
把代码保存放在随便哪个地方,我这里就放桌面吧.

FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~fi
pause

执行后就会显示以下内容:
test.bat
test.vbs

通过对比,我们很容易就看出没有路径了,这就是"将 %I 扩展到一个完全合格的路径名"的作用也就是如果%i变量的内容是一个文件名的话,他就会把这个文件所在的绝对路径打印出来,而不只单单打印一个文件名,自己动手动实验下就知道了!

三、 %~dI  - 仅将 %I 扩展到一个驱动器号

看例子:
代码如下,我还是放到桌面执行!

FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~di
pause

执行后我CMD里显示如下
C:
C:
我桌面就两个文件test.bat,test.vbs,%%~di作用是,如果变量%%i的内容是一个文件或者目录名,他就会把他这文件
或者目录所在的盘符号打印出来!

四、 %~pI  - 仅将 %I 扩展到一个路径

这个用法和上面一样,他只打印路径不打印文件名字

FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~pi
pause

我就不打结果了,大家自己复制代码看结果吧,下面几个都是这么个用法,代码给出来,大家自己看结果吧!

五、 %~nI  - 仅将 %I 扩展到一个文件名

只打印文件名字

FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ni
pause

六、 %~xI  - 仅将 %I 扩展到一个文件扩展名

只打印文件的扩展名

FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~xi
pause

七、 %~sI  - 扩展的路径只含有短名

打印绝对短文件名

FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~si
pause

八、 %~aI  - 将 %I 扩展到文件的文件属性

打印文件的属性

FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ai
pause

九、 %~tI  - 将 %I 扩展到文件的日期/时间

打印文件建立的日期

FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ti
pause

十、 %~zI  - 将 %I 扩展到文件的大小

打印文件的大小

FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~zi
pause

上面例子中的"delims=="可以改为"delims=",即不要分隔符

十一、 %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串

这是最后一个,和上面那些都不一样,我单独说说!

然后在把这些代码保存为批处理,放在桌面。

@echo off
FOR /F "delims=" %%i IN (“notepad.exe”) DO echo %%~$PATH:i
pause

龙卷风补充:上面代码显示结果为C:\WINDOWS\system32\notepad.exe

他的意思就在PATH变量里指定的路径里搜索notepad.exe文件,如果有notepad.exe则会把他所在绝对路径打印出来,没有就打印一个错误!
好了,FOR的的变量就介绍到这了!

最新资讯
神州租车有救了?北汽或接盘 股价一度大涨8%

神州租车有救了?北汽或

北汽集团将收购神州优车不多于4.51亿股股份,占神州租车
睡觉玩耍手动驾驶,宇航员在美国“龙”飞船上都做了什么?

睡觉玩耍手动驾驶,宇航

北京时间6月1日凌晨1点22分,搭乘美国SpaceX载人龙飞船
一季度亏损收窄,但蔚来并未走出泥潭

一季度亏损收窄,但蔚来

蔚来释放的种种信号都是想说明,蔚来正在走出泥潭,并且未
SpaceX载人航天发射成功 有望提升特斯拉电动汽车销量

SpaceX载人航天发射成

美国太空探索技术公司(SpaceX)的载人龙飞船,在当地时间5
一种蛋白质 会导致乳腺癌加快恶化

一种蛋白质 会导致乳

南澳大利亚大学5月26日发布公报说,该校研究人员发现,一
网易入场费约12727港元 在香港市值将超过200亿港元

网易入场费约12727港

不计及超额配股权,按照118.71港元计算,港股市值为203亿
最新文章
dos之net创建管理员用户的实现

dos之net创建管理员用

这篇文章主要介绍了dos之net创建管理员用户的实现,文中
DOS的重定向命令使用方法以及在安全方面的应用

DOS的重定向命令使用

大家知道,DOS下有一个不为大家所常用的命令——重定向
BAT 批处理脚本教程(详细篇爱安网补充)

BAT 批处理脚本教程(

这篇文章主要介绍了BAT 批处理脚本教程详细篇,并且爱安
Windows CMD命令大全(值得收藏)

Windows CMD命令大全(

虽然随着计算机产业的发展,Windows 操作系统的应用越来
批处理FTP上传文件

批处理FTP上传文件

这篇文章主要介绍了批处理FTP上传文件的相关资料,非常
DOS批处理高级教程 第六章 if命令讲解

DOS批处理高级教程 第

最近发现有些朋友一老问IF命令的用法,IF命令个人觉得