zoukankan      html  css  js  c++  java
  • 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

       

    在以上例子中,%IPATH 可用其他有效数值代替。%~ 语法用

    一个有效的 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.TXTABCDEF~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%

    %IPATH 可用其他有效数值代替

       

    如:

    @echo off

    rem 本人电脑上QQ的路径

    set a=D:腾讯QQQQBin

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

    pause

       

    运行一览:

       

       

       

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

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

       

       

       

    【made by siwuxie095】

       

       

  • 相关阅读:
    JDK1.8源码之String
    C# MySQL数据库的备份 还原 初始化
    c# 校验文本框的正则
    生成条形码和二维码并实现打印的功能
    获取一张图片的字节数组及字节数组的合并
    多线程以及抓取图片。
    C#获取URL参数值(NameValueCollection)
    键值对
    SqLiter
    生成机器码
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6376505.html
Copyright © 2011-2022 走看看