dos3章
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章的更多相关文章
- 《Django By Example》第五章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag注:大家好,我是新来的翻译, ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...
- 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...
- 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点
在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...
- ASP.NET Core 中文文档 第四章 MVC(4.2)控制器操作的路由
原文:Routing to Controller Actions 作者:Ryan Nowak.Rick Anderson 翻译:娄宇(Lyrics) 校对:何镇汐.姚阿勇(Dr.Yao) ASP.NE ...
- [Hadoop in Action] 第7章 细则手册
向任务传递定制参数 获取任务待定的信息 生成多个输出 与关系数据库交互 让输出做全局排序 1.向任务传递作业定制的参数 在编写Mapper和Reducer时,通常会想让一些地方可以配 ...
随机推荐
- 小程序 新建项目底部tabbar
在app.json中配置 { "pages": [ "pages/index/index", "pages/staging/staging" ...
- spring-boot log
最近也在研究项目
- 现代 PHP 新特性 —— 生成器入门(转)
原文链接:blog.phpzendo.com PHP 在 5.5 版本中引入了「生成器(Generator)」特性,不过这个特性并没有引起人们的注意.在官方的 从 PHP 5.4.x 迁移到 PHP ...
- 空list赋值
list=[] i =0 list[i] =1 Traceback (most recent call last): File "D:\ProgramData\Anaconda3\lib\s ...
- Django_URL
视图函数介绍 视图一般都写在app的views中,并且视图的第一个参数永远都是request(HttpRequest)对象.这个对象存储了请求过来的所有信息,包括携带的参数以及一些头部信息等.再视图中 ...
- vue中的路由
路由配置项: import Router from ‘vue-router’ 1.path:路径 ...
- 一个狗血的mysql编码错误
执行查询语句总是报错,某个查询语句字段编码错误. 各种修改那个表没用, 最后发现是创建schemas的时候没有加编码 应该由 CREATE SCHEMA new_schema;改为 CREATE SC ...
- vs2015 c# winfrom应用程序打包成64位
关于Winform打包过程在网上已有详细教程,参考:https://www.cnblogs.com/yinsq/p/5254893.html 此次工作中需要打包成64位的程序,网上没有查到方法,现在讲 ...
- 微信或QQ屏蔽域名,爆红域名如何在微信打开,如何进行微信域名防封?
近很多朋友都会遇到这个问题,为什么我的微信域名或者QQ域名怎么总是提示拦截呢?在这里跟大家说一下吧: 第一点:就是域名里面的内容违规或者诱导被举报而导致的拦截 第二点:就是被用户或者同行恶意举报而导致 ...
- springboot秒杀课程学习整理1-3
1)实现手机验证码功能,用户注册功能,用户登入功能(这里讲开发流程,及本人遇到的问题,具体实现请看代码) 1.拦截请求,获取请求参数(这里的consumes是个常量,可以定义在baseControll ...