for 续7
----------siwuxie095
 
 
 
 
 
 
 
 
for 中的变量:
 
 
FOR 变量参照的替换已被增强。您现在可以使用下列选项语法:
~I
- 删除任何引号(") ,扩充 %I
%~fI
- 将 %I 扩充到一个完全合格的路径名
%~dI
- 仅将 %I 扩充到一个驱动器号
%~pI
				- 仅将 %I 扩充到一个路径
%~nI
- 仅将 %I 扩充到一个文件名
%~xI
- 仅将 %I 扩充到一个文件扩展名
%~sI
- 扩充的路径只含有短名
%~aI
- 将 %I 扩充到文件的文件属性
%~tI
- 将 %I 扩充到文件的日期/时间
%~zI
- 将 %I 扩充到文件的大小
%~$PATH:I
				- 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个完全合格的名称。如果环境变量名未被定义,
或者没有找到文件,此组合键会扩充到空字符串
 
 
 
 
 
 
可以组合修饰符来得到多重结果:
%~dpI
- 仅将 %I 扩充到一个驱动器号和路径
%~nxI
- 仅将 %I 扩充到一个文件名和扩展名
%~fsI
- 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i
				- 查找列在路径环境变量的目录,并将 %I 扩
充到找到的第一个驱动器号和路径
%~ftzaI
- 将 %I 扩充到类似输出线路的 DIR
 
 
在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法用
一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名比较易
读,而且避免与不分大小写的组合键混淆
 
 
说明:
上面就是 for 帮助里关于变量的中的内容。上面每行后面都有一个大写
字母 I,这个 I 其实就是在 for 代入的变量。for 语句代入的变量名是什么,
这里就写什么,不能仅仅局限于一个字母 I ,不过,前后字母的大小
写一定要一致
 
 
如:
for /f %%t in ('set') do @echo %%t
这里我们要代入的变量名是 t,就是帮助里的那个 I 改成了 t
 
 
再如:
for /f %%d in ('set') do @echo %%~dd
类似 dd 这样重复写两个变量字符的例子是可以的,但不建议这么写
 
 
但不能这么写:
for /f %%t in ('set') do @echo %%T
前后两个 T 变量大小写不一致,计算机认为是不同的两个变量
 
 
至于 I 前面的,如 "%~fl" 中的 "%~f",是有固定含义的语法,
字母不能随便改,但大小写无所谓,如:%~fi 和 %~Fi 是一样
 
 
注意:% 符号,在批处理文本里要使用两个,但在 CMD 窗口直接
输入执行,只要一个即可
 
 
 
 
以下测试,均以
			F盘根目录下文件和文件夹:
 
 

 
 
下面对每个变量逐个探究:
 
 
~I
对操作内容删除双引号后扩充到
			%I
 
 
注意:单引号不会被删除
 
 
如:
| @echo off set var=">>" for pause | 
 
 
运行一览:
 
 

 
 
 
 
再如:
| @echo off for pause | 
 
 
运行一览:
 
 

 
 
 
 
再如:文本
			temp.txt 的内容:
 
 

 
 
也可以通过批处理创建
			temp.txt:
| @echo off rem 注意不成对的引号要加转义字符 ^ rem 重向符号 >> 前不要留空格 rem 第一个 ^"1111 后只加一个 > 也可以全部显示 rem 最好全部写成 >> rem 后面的如果只加一个 > 就会被截断,只显示当前行及以后行 rem 一个 > 会覆盖,两个 >> 才是追加 echo ^"1111>>temp.txt echo "2222">>temp.txt echo 3333^">>temp.txt echo echo ^"55"55"55>>temp.txt | 
 
 
sublime中:
 
 

 
 
同目录批处理:
| @echo off for /f "delims=" pause del temp.txt | 
 
 
运行一览:
 
 

 
 
 
 
可见删除规则:
1、若字符串首尾同时存在引号,则删除首尾引号
2、若字符串尾不存在引号,则删除字符串首的引号
3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除
 
 
总结:无头不删,有头连尾删
 
 
 
 
再如:
| @echo off for /f "delims=" pause | 
 
 
运行一览:将当前目录下的所有文件以及文件夹的名字
显示出来。Windows 规定,文件名称不能含有双引号,
所以这个代码看不出
			%%~i 有什么效果
 
 

 
 
 
 
 
 
-----------------------------------------------------------------
%~fI
将
			%I 扩充到完整路径
 
 
如:
| @echo off for /f %%i in ('dir /b') do pause | 
 
 
运行一览:
 
 

 
 
对比:
| @echo off for /f %%i in ('dir /b') do pause | 
 
 
运行一览:
 
 

 
 
通过对比,后者没有路径,也即 "将 %I 扩展到一个完全合
格的路径名"。即如果
			%%i 变量的内容是一个文件名,就会
把这个文件所在的绝对路径显示出来,而不只显示一个文件
名
 
 
注意
			'dir /b' 的作用,对比:
| @echo off for /f "delims=" pause | 
 
 
运行一览:程序不仅会显示文件的完整路径,还会显示
日期和大小等信息
 
 

 
 
 
 
-----------------------------------------------------------------
%~dI
仅将 %I 扩充到一个驱动器号
 
 
如:
| @echo off for /f %%i in ('dir /b') do pause | 
 
 
运行一览:
 
 

 
 
 
 
显然,%%~di 的作用是:如果变量 %%i 的内容是一个文件或
者目录名,就会把这个文件或者目录所在盘显示出来
 
 
-----------------------------------------------------------------
%~pI
仅将 %I 扩充到一个路径
 
 
如:
| @echo off for /f %%i in ('dir /b') do pause | 
 
 
运行一览:说明
			%~pI 只显示路径,不显示盘符和文件名
 
 

 
 
-----------------------------------------------------------------
%~nI
仅将 %I 扩充到一个文件名
 
 
如:
| @echo off for /f "delims==" pause | 
 
 
运行一览:说明 %~nI 仅显示文件的主文件名,连扩展名都不显示
 
 

 
 
-----------------------------------------------------------------
%~xI
仅将 %I 扩充到一个文件扩展名
 
 
如:
| @echo off for /f "delims==" pause | 
 
 
运行一览:
 
 

 
 
-----------------------------------------------------------------
%~sI
扩充的路径只含有短名
 
 
如:
| @echo off for /f "delims==" pause | 
 
 
运行一览:
 
 

 
 
这里运用了 DOS 的显示规则,当文件名超过 8 个字符时,
采用
				"ABCDEF~1" 短名形式显示出来,即显示出原来名字
的前六个字符,然后是字符~,再加上一个数字,共计还是
8 个字符。数字是为了区分前六个字符完全相同的文件名
 
 
如:
有两个文件的名字为
			Abcdefghijk.txt
				和
			Abcdefgh.txt,
缩减后显示为 ABCDEF~1.TXT,ABCDEF~2.TXT,缩减
后的名字,连同扩展名都会采用全部大写的形式
 
 
一个中文文字占用两个字符大小,如果是
			新建文本文档.txt,
则缩减后的名字为
			新建文~1.TXT
 
 
文件的名字比较短的,即未缩减的,还显示全名,
文件名包括扩展名的大小写不变
 
 
-----------------------------------------------------------------
%~aI
将 %I 扩充到文件的文件属性
 
 
如:
| @echo off for /f "delims==" pause | 
 
 
运行一览:
 
 

 
 
 
 
下面列举一些可能出现的属性:
---------
d--------
dr-------
--a------
-ra------
d-a------
 
 
表示什么意思?网上所查若干:
R 只读文件属性。
A 存档文件属性。
S 系统文件属性。
H 隐藏文件属性。
I 无内容索引文件属性。
 
 
解释:
假如一个文件的属性是隐藏的,用上面的代码不会显示出
其 H 属性,是因为根本没搜索到这个文件
 
 
假如一个文件的属性是存档,
则会显示
			--a------
 
 
假如是一个文件夹,
则会显示 d--------
 
 
假如一个文件的属性是存档并且只读,
则会显示
			-ra------
 
 
假如一个文件夹的属性是存档并且只读,
则会显示 dr-------
 
 
假如不是文件夹的文件,所有属性都不是,
则会显示
			---------
 
 
-----------------------------------------------------------------
%~tI
将 %I 扩充到文件的日期/时间
 
 
如:显示文件建立的日期和时间
| @echo off for /f "delims==" pause | 
 
 
运行一览:
 
 

 
 
-----------------------------------------------------------------
%~zI
将 %I 扩充到文件的大小
大小的默认单位是字节(B)
 
 
如:
| @echo off for /f "delims=" pause | 
 
 
运行一览:
 
 

 
 
-----------------------------------------------------------------
%~$PATH:I
查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个
完全合格的名称。如果环境变量名未被定义,或者没有找到文
件 ,此组合键会扩充到空字符串
 
 
如:
| @echo off for /f "delims=" pause | 
 
 
运行一览:
 
 

 
 
程序说明:
在
			%path%
				变量里指定的路径里搜索 notepad.exe
				文件,
并显示第一个合格的路径,没有就显示出一个错误
 
 
 
 
%path%
				的路径查看方法:
| @echo off echo pause | 
 
 
 
 
再如:
| @echo off for pause | 
 
 
运行一览:程序会将目标文件逐一搜索并显示
 
 

 
 
 
 
 
 
进一步分析:
%~$path:i 可以将其分解为
			%i 和
			%path%,
%I 和 PATH 可用其他有效数值代替
 
 
如:
| @echo off rem 本人电脑上QQ的路径 set a=D:\腾讯QQ\QQ\Bin for /f "delims=" pause | 
 
 
运行一览:
 
 

 
 
 
 
这个,似乎没什么用,因为要指定精确的路径,
不能搜索目录树,好像失去了搜索的意义
 
 
 
 
 
 
【made by siwuxie095】
 
 
 
 
for 续7的更多相关文章
- .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入
		上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ... 
- [.NET] C# 知识回顾 - 委托 delegate (续)
		C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ... 
- iOS 开发者账号到期续费流程
		1.登录developer.apple.com,查看到期时间 2.到期提醒通知,点击Renew Membership续费(一般提前一个月提醒续费) 3.个人开发者账号续费需要支付 688人民币/年(9 ... 
- 微信公众号开发系列教程一(调试环境部署续:vs远程调试)
		http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ... 
- CI-持续集成(1)-软件工业“流水线”概述
		CI-持续集成(1)-软件工业“流水线”概述 1 概述 持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次, ... 
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)
		ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ... 
- [译]Godot系列教程三 - 场景实例化(续)
		场景实例化(续) 要点 场景实例化带来很多便利的用法,总体来说有: 将场景细分,更便于管理 相对于某些引擎中的Prefab组件更灵活,并且在许多方面更强大 是一种设计更复杂的游戏流程甚至UI的方式 这 ... 
- 【小白的CFD之旅】13 敲门实例【续3】
		接上文[小白的CFD之旅]12 敲门实例[续2] 4 Results4.1 计算监测图形4.2 Graphics4.2.1 壁面温度分布4.2.2 创建截面4.2.3 显示截面物理量4.2.4 Pat ... 
- 【小白的CFD之旅】12 敲门实例【续2】
		接上文[小白的CFD之旅]敲门实例[续] 主要内容 3 Solution3.1 Solution Methods3.2 Solution Controls3.3 Monitors3.4 Report ... 
- jquery实现简单瀑布流布局(续):图片懒加载
		# jquery实现简单瀑布流布局(续):图片懒加载 这篇文章是jquery实现简单瀑布流布局思想的小小扩展.代码基于前作的代码继续完善. 图片懒加载就是符合某些条件时才触发图片的加载.最常见的具体表 ... 
随机推荐
- react中findDOMNode
			在使用react过程中,大家有时会那么这里的findDomNode是做什么的呢? import { findDomNode } from 'react-dom'; 简单来说是用来得到实际Dom的,因为 ... 
- Linux升级nodejs及多版本管理
			最近要用到开发要用到nodejs,于是跑到开发机运行了下node,已经安装了,深感欣慰,是啥版本呢?再次运行了下node -v,原来是0.6.x的.估计是早先什么时候谁弄的.那么来升级下node吧. ... 
- Bakery
			Masha wants to open her own bakery and bake muffins in one of the n cities numbered from 1 to n. The ... 
- office 2013母版保存并调用
			如果觉得某个ppt的母版不错,想保存下来以后使用的话,那么执行 开始->另存为-> 选择位置和格式,注意格式选择potx. 之后如果想要使用这组母版,怎么办呢? 浏览主题,打开之前保存的 ... 
- table中tr间距的设定table合并单元格 colspan(跨列)和rowspan(跨行)
			table中的tr的默认display:table-row,虽然可以修改为display:block但是就失去了tr特有的显示效果,如(td自动对齐): 并且在tr中对起设定padding是有用的,可 ... 
- MYSQL中写SQL语句,取到表中按ID降序排列(最新纪录排在第一行)
			'select * from bugdata where id>0 order by id desc' 
- gridview 绑定多个格式相同的数据源(数据查询合并)
			在做项目时,要求在同一个GridView中同时显示不同分组中的前若干条数据 几个技术要点: 1.数据分组,本方法中未用group by 2.几个结果格式相同的查询合并绑定 3.取查询结果的前或后若干条 ... 
- bzoj 4006 [JLOI2015]管道连接——斯坦纳树
			题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4006 除了模板,就是记录 ans[ s ] 表示 s 合法的最小代价.合法即保证 s 里同一 ... 
- oracle 锁表/解锁 杀进程
			一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE中杀不 ... 
- SpringCloud初体验:四、API GateWay 服务网关
			网关服务很多,比如:Zuul.Kong.spring cloud gateway ……, 这里不纠结哪种性能好,本次体验是用的 spring cloud gateway 更多网关比较可以了解这篇文章: ... 
