----------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
%%i in (%var%)
do
echo
%%~i

pause

 
 

运行一览:

 
 

 
 

 
 

再如:

@echo off

for
%%i in (a,"b c",d) do
echo
%%~i

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
"4444"44>>temp.txt

echo ^"55"55"55>>temp.txt

 
 

sublime中:

 
 

 
 

同目录批处理:

@echo off

for /f "delims="
%%i in (temp.txt) do
echo
%%~i

pause

del temp.txt

 
 

运行一览:

 
 

 
 

 
 

可见删除规则:

1、若字符串首尾同时存在引号,则删除首尾引号

2、若字符串尾不存在引号,则删除字符串首的引号

3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除

 
 

总结:无头不删,有头连尾删

 
 

 
 

再如:

@echo off

for /f "delims="
%%i in ('dir /b') do
echo
%%~i

pause

 
 

运行一览:将当前目录下的所有文件以及文件夹的名字

显示出来。Windows 规定,文件名称不能含有双引号,

所以这个代码看不出
%%~i 有什么效果

 
 

 
 

 
 

 
 

-----------------------------------------------------------------

%~fI


%I 扩充到完整路径

 
 

如:

@echo off

for /f %%i in ('dir /b') do
echo
%%~fi

pause

 
 

运行一览:

 
 

 
 

对比:

@echo off

for /f %%i in ('dir /b') do
echo
%%i

pause

 
 

运行一览:

 
 

 
 

通过对比,后者没有路径,也即 "将 %I 扩展到一个完全合

格的路径名"。即如果
%%i 变量的内容是一个文件名,就会

把这个文件所在的绝对路径显示出来,而不只显示一个文件

 
 

注意
'dir /b' 的作用,对比:

@echo off

for /f "delims="
%%i in ('dir') do
echo
%%~fi

pause

 
 

运行一览:程序不仅会显示文件的完整路径,还会显示

日期和大小等信息

 
 

 
 

 
 

-----------------------------------------------------------------

%~dI

仅将 %I 扩充到一个驱动器号

 
 

如:

@echo off

for /f %%i in ('dir /b') do
echo
%%~di

pause

 
 

运行一览:

 
 

 
 

 
 

显然,%%~di 的作用是:如果变量 %%i 的内容是一个文件或

者目录名,就会把这个文件或者目录所在盘显示出来

 
 

-----------------------------------------------------------------

%~pI

仅将 %I 扩充到一个路径

 
 

如:

@echo off

for /f %%i in ('dir /b') do
echo
%%~pi

pause

 
 

运行一览:说明
%~pI 只显示路径,不显示盘符和文件名

 
 

 
 

-----------------------------------------------------------------

%~nI

仅将 %I 扩充到一个文件名

 
 

如:

@echo off

for /f "delims=="
%%i in ('dir /b') do
echo
%%~ni

pause

 
 

运行一览:说明 %~nI 仅显示文件的主文件名,连扩展名都不显示

 
 

 
 

-----------------------------------------------------------------

%~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

 
 

运行一览:

 
 

 
 

这里运用了 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=="
%%i in ('dir /b') do
echo
%%~ai

pause

 
 

运行一览:

 
 

 
 

 
 

下面列举一些可能出现的属性:

---------

d--------

dr-------

--a------

-ra------

d-a------

 
 

表示什么意思?网上所查若干:

R 只读文件属性。

A 存档文件属性。

S 系统文件属性。

H 隐藏文件属性。

I 无内容索引文件属性。

 
 

解释:

假如一个文件的属性是隐藏的,用上面的代码不会显示出

其 H 属性,是因为根本没搜索到这个文件

 
 

假如一个文件的属性是存档,

则会显示
--a------

 
 

假如是一个文件夹,

则会显示 d--------

 
 

假如一个文件的属性是存档并且只读,

则会显示
-ra------

 
 

假如一个文件夹的属性是存档并且只读,

则会显示 dr-------

 
 

假如不是文件夹的文件,所有属性都不是,

则会显示
---------

 
 

-----------------------------------------------------------------

%~tI

将 %I 扩充到文件的日期/时间

 
 

如:显示文件建立的日期和时间

@echo off

for /f "delims=="
%%i in ('dir /b') do
echo
%%~ti

pause

 
 

运行一览:

 
 

 
 

-----------------------------------------------------------------

%~zI

将 %I 扩充到文件的大小

大小的默认单位是字节(B)

 
 

如:

@echo off

for /f "delims="
%%i in ('dir /b') do
echo
%%~zi

pause

 
 

运行一览:

 
 

 
 

-----------------------------------------------------------------

%~$PATH:I

查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个

完全合格的名称。如果环境变量名未被定义,或者没有找到文

件 ,此组合键会扩充到空字符串

 
 

如:

@echo off

for /f "delims="
%%i in ("notepad.exe") do
echo
%%~$path:i

pause

 
 

运行一览:

 
 

 
 

程序说明:


%path%
变量里指定的路径里搜索 notepad.exe
文件,

并显示第一个合格的路径,没有就显示出一个错误

 
 

 
 

%path%
的路径查看方法:

@echo off

echo
%path%

pause

 
 

 
 

再如:

@echo off

for
%%a in (notepad.exe calc.exe explorer.exe) do
echo
查找
%%a
的第一个结果是:%%~$PATH:apause

pause

 
 

运行一览:程序会将目标文件逐一搜索并显示

 
 

 
 

 
 

 
 

进一步分析:

%~$path:i 可以将其分解为
%i 和
%path%,

%I 和 PATH 可用其他有效数值代替

 
 

如:

@echo off

rem 本人电脑上QQ的路径

set a=D:\腾讯QQ\QQ\Bin

for /f "delims="
%%i in ("qq.exe") do
echo
%%~$a:i

pause

 
 

运行一览:

 
 

 
 

 
 

这个,似乎没什么用,因为要指定精确的路径,

不能搜索目录树,好像失去了搜索的意义

 
 

 
 

 
 

【made by siwuxie095】

 
 

 
 

for 续7的更多相关文章

  1. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入

    上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...

  2. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  3. iOS 开发者账号到期续费流程

    1.登录developer.apple.com,查看到期时间 2.到期提醒通知,点击Renew Membership续费(一般提前一个月提醒续费) 3.个人开发者账号续费需要支付 688人民币/年(9 ...

  4. 微信公众号开发系列教程一(调试环境部署续:vs远程调试)

    http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...

  5. CI-持续集成(1)-软件工业“流水线”概述

    CI-持续集成(1)-软件工业“流水线”概述 1   概述 持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次, ...

  6. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)

    ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...

  7. [译]Godot系列教程三 - 场景实例化(续)

    场景实例化(续) 要点 场景实例化带来很多便利的用法,总体来说有: 将场景细分,更便于管理 相对于某些引擎中的Prefab组件更灵活,并且在许多方面更强大 是一种设计更复杂的游戏流程甚至UI的方式 这 ...

  8. 【小白的CFD之旅】13 敲门实例【续3】

    接上文[小白的CFD之旅]12 敲门实例[续2] 4 Results4.1 计算监测图形4.2 Graphics4.2.1 壁面温度分布4.2.2 创建截面4.2.3 显示截面物理量4.2.4 Pat ...

  9. 【小白的CFD之旅】12 敲门实例【续2】

    接上文[小白的CFD之旅]敲门实例[续] 主要内容 3 Solution3.1 Solution Methods3.2 Solution Controls3.3 Monitors3.4 Report ...

  10. jquery实现简单瀑布流布局(续):图片懒加载

    # jquery实现简单瀑布流布局(续):图片懒加载 这篇文章是jquery实现简单瀑布流布局思想的小小扩展.代码基于前作的代码继续完善. 图片懒加载就是符合某些条件时才触发图片的加载.最常见的具体表 ...

随机推荐

  1. ReactNative 问题集合

    在线流畅播放视频 (建议调用原生的视频组件, 或者在成熟的安卓 ios组件封装一层) 如何指定页面横屏 (在这个组件react-native-orientation基础上改写) webSocket不和 ...

  2. ASP.NET MVC 使用NPOI导出Excel 无法访问已关闭的流(转)

    第一步重写MemoryStream , 让它不能自动关闭. //新建类 重写Npoi流方法 public class NpoiMemoryStream : MemoryStream { public ...

  3. HDU2870 最大窗口面积(单调队列优化)

    HDU1506 HDU2870 HDU4328 以前做的是单调队列的方法,现在试一试DP 注意的是对于i,向左延伸的L[i]到i不一定是单调的,比如1 3 2 1 2,对于i=4,L[i]=1而是2所 ...

  4. webapi 文件下载输出接口

    public async ask<HttpResponseMessage> GetGuidingPrincipleDownload(string name ) { bool status ...

  5. C语言使用pthread多线程编程(windows系统)二

    我们进行多线程编程,可以有多种选择,可以使用WindowsAPI,如果你在使用GTK,也可以使用GTK实现了的线程库,如果你想让你的程序有更多的移植性你最好是选择POSIX中的Pthread函数库,我 ...

  6. 在Chrome调试器中引入jQuery

    在Console中输入以下代码并回车,Console显示"function (a,b){return new m.fn.init(a,b)}"说明导入成功,就可以在Console中 ...

  7. 转 --自然语言工具包(NLTK)小结

    原作者:http://www.cnblogs.com/I-Tegulia/category/706685.html 1.自然语言工具包(NLTK) NLTK 创建于2001 年,最初是宾州大学计算机与 ...

  8. redis位图

    <?php function frstr($str){ return str_pad($str,8,'0',STR_PAD_LEFT); } $php=''; $p= frstr(decbin( ...

  9. HTTP Error: 413 Request Entity Too Large的解决

    昨天在使用PHP的CURL调用另一个项目的API:A时,出现了HTTP Error: 413 Request Entity Too Large的错误.而调用另一个API:B则没有这个错误. A的API ...

  10. pycharm -- 小技巧1 (显示文件的代码结构以及错误提示)

    背景介绍 今天上午,在调用同事昨天给的算法程序时出了点问题,于是请同事来我这边一起调代码.大致场景描述如下: 我:B神,你昨天下班前给我的那个算法程序我这边调用的时候出现错误啦,请你过来看下呗. 同事 ...