for 续7
来源:互联网 发布:c专家编程第二版 编辑:程序博客网 时间:2024/06/08 06:53
----------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%)doecho%%~i
pause
运行一览:
再如:
@echo off
for%%i in (a,"b c",d)doecho%%~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)doecho%%~i
pause
del temp.txt
运行一览:
可见删除规则:
1、若字符串首尾同时存在引号,则删除首尾引号
2、若字符串尾不存在引号,则删除字符串首的引号
3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除
总结:无头不删,有头连尾删
再如:
@echo off
for /f"delims="%%i in ('dir /b')doecho%%~i
pause
运行一览:将当前目录下的所有文件以及文件夹的名字
显示出来。Windows 规定,文件名称不能含有双引号,
所以这个代码看不出%%~i 有什么效果
-----------------------------------------------------------------
%~fI
将%I 扩充到完整路径
如:
@echo off
for /f%%i in ('dir /b')doecho%%~fi
pause
运行一览:
对比:
@echo off
for /f%%i in ('dir /b')doecho%%i
pause
运行一览:
通过对比,后者没有路径,也即 "将%I 扩展到一个完全合
格的路径名"。即如果%%i变量的内容是一个文件名,就会
把这个文件所在的绝对路径显示出来,而不只显示一个文件
名
注意'dir /b'的作用,对比:
@echo off
for /f"delims="%%i in ('dir')doecho%%~fi
pause
运行一览:程序不仅会显示文件的完整路径,还会显示
日期和大小等信息
-----------------------------------------------------------------
%~dI
仅将%I 扩充到一个驱动器号
如:
@echo off
for /f%%i in ('dir /b')doecho%%~di
pause
运行一览:
显然,%%~di的作用是:如果变量 %%i 的内容是一个文件或
者目录名,就会把这个文件或者目录所在盘显示出来
-----------------------------------------------------------------
%~pI
仅将%I 扩充到一个路径
如:
@echo off
for /f%%i in ('dir /b')doecho%%~pi
pause
运行一览:说明%~pI只显示路径,不显示盘符和文件名
-----------------------------------------------------------------
%~nI
仅将 %I 扩充到一个文件名
如:
@echo off
for /f"delims=="%%i in ('dir /b')doecho%%~ni
pause
运行一览:说明%~nI 仅显示文件的主文件名,连扩展名都不显示
-----------------------------------------------------------------
%~xI
仅将 %I 扩充到一个文件扩展名
如:
@echo off
for /f"delims=="%%i in ('dir /b')doecho%%~xi
pause
运行一览:
-----------------------------------------------------------------
%~sI
扩充的路径只含有短名
如:
@echo off
for /f"delims=="%%i in ('dir /b')doecho%%~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')doecho%%~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')doecho%%~ti
pause
运行一览:
-----------------------------------------------------------------
%~zI
将%I 扩充到文件的大小
大小的默认单位是字节(B)
如:
@echo off
for /f"delims="%%i in ('dir /b')doecho%%~zi
pause
运行一览:
-----------------------------------------------------------------
%~$PATH:I
查找列在路径环境变量的目录,并将 %I扩充到找到的第一个
完全合格的名称。如果环境变量名未被定义,或者没有找到文
件 ,此组合键会扩充到空字符串
如:
@echo off
for /f"delims="%%i in ("notepad.exe")doecho%%~$path:i
pause
运行一览:
程序说明:
在%path%变量里指定的路径里搜索notepad.exe文件,
并显示第一个合格的路径,没有就显示出一个错误
%path%的路径查看方法:
@echo off
echo%path%
pause
再如:
@echo off
for%%a in (notepad.exe calc.exe explorer.exe)doecho查找%%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")doecho%%~$a:i
pause
运行一览:
这个,似乎没什么用,因为要指定精确的路径,
不能搜索目录树,好像失去了搜索的意义
【made by siwuxie095】
- for 续7
- for 续1
- for 续2
- for 续3
- for 续4
- for 续5
- for 续6
- for 续8
- for 续9
- for 续10
- evaqq for fedora 7
- mp3 for fedora 7
- wxpython for py2.7
- NOTE 7 for Mirroring
- EPEL for Centos 7
- CentOS for mysql5.7
- Test 7 for NOIP
- for
- c语言学习之snprintf
- Java面向对象
- Java基础知识总结(入门准备)
- fastjson的常用使用方法
- webpack入门+react环境配置
- for 续7
- 线性代数-【1】行列式
- 状态寄存器PSW
- 学习笔记-HTML5-2
- 简单讨论HTML语义化(语义化标签)
- JS 函数的几个作用
- 我在CSDN的第一篇博客
- 九度OJ-1076:N的阶乘
- Leetcode 171. Excel Sheet Column Number