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

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

~I          - 删除任何引号("),扩展 %I
     %~fI        - 将 %I 扩展到一个完全合格的路径名
     %~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文件代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
@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 扩展到一个完全合格的路径名

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

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

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

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

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

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

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

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

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

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

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

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

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

只打印文件名字

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

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

只打印文件的扩展名

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

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

打印绝对短文件名

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

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

打印文件的属性

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

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

打印文件建立的日期

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

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

打印文件的大小

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

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

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

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

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

1
2
3
@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的的变量就介绍到这了!

dos3章的更多相关文章

  1. 《Django By Example》第五章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag注:大家好,我是新来的翻译, ...

  2. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  3. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  4. 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...

  5. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  6. 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

  7. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

    在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...

  8. ASP.NET Core 中文文档 第四章 MVC(4.2)控制器操作的路由

    原文:Routing to Controller Actions 作者:Ryan Nowak.Rick Anderson 翻译:娄宇(Lyrics) 校对:何镇汐.姚阿勇(Dr.Yao) ASP.NE ...

  9. [Hadoop in Action] 第7章 细则手册

    向任务传递定制参数 获取任务待定的信息 生成多个输出 与关系数据库交互 让输出做全局排序   1.向任务传递作业定制的参数        在编写Mapper和Reducer时,通常会想让一些地方可以配 ...

随机推荐

  1. 小程序 新建项目底部tabbar

    在app.json中配置 { "pages": [ "pages/index/index", "pages/staging/staging" ...

  2. spring-boot log

    最近也在研究项目

  3. 现代 PHP 新特性 —— 生成器入门(转)

    原文链接:blog.phpzendo.com PHP 在 5.5 版本中引入了「生成器(Generator)」特性,不过这个特性并没有引起人们的注意.在官方的 从 PHP 5.4.x 迁移到 PHP ...

  4. 空list赋值

    list=[] i =0 list[i] =1 Traceback (most recent call last): File "D:\ProgramData\Anaconda3\lib\s ...

  5. Django_URL

    视图函数介绍 视图一般都写在app的views中,并且视图的第一个参数永远都是request(HttpRequest)对象.这个对象存储了请求过来的所有信息,包括携带的参数以及一些头部信息等.再视图中 ...

  6. vue中的路由

           路由配置项:        import Router from ‘vue-router’                          1.path:路径              ...

  7. 一个狗血的mysql编码错误

    执行查询语句总是报错,某个查询语句字段编码错误. 各种修改那个表没用, 最后发现是创建schemas的时候没有加编码 应该由 CREATE SCHEMA new_schema;改为 CREATE SC ...

  8. vs2015 c# winfrom应用程序打包成64位

    关于Winform打包过程在网上已有详细教程,参考:https://www.cnblogs.com/yinsq/p/5254893.html 此次工作中需要打包成64位的程序,网上没有查到方法,现在讲 ...

  9. 微信或QQ屏蔽域名,爆红域名如何在微信打开,如何进行微信域名防封?

    近很多朋友都会遇到这个问题,为什么我的微信域名或者QQ域名怎么总是提示拦截呢?在这里跟大家说一下吧: 第一点:就是域名里面的内容违规或者诱导被举报而导致的拦截 第二点:就是被用户或者同行恶意举报而导致 ...

  10. springboot秒杀课程学习整理1-3

    1)实现手机验证码功能,用户注册功能,用户登入功能(这里讲开发流程,及本人遇到的问题,具体实现请看代码) 1.拦截请求,获取请求参数(这里的consumes是个常量,可以定义在baseControll ...