• bat批量重命名


    今天中午休息时,桌面上出现了360的休息界面,看着图片挺好看的,就设置了作为壁纸

    但是我想知道这个壁纸的存储路径,百度一下找到了:

    C:Users联想AppDataRoaming360SafeDesktopResteyek_image

    但是打开都是dat文件,需要改后缀为png才能看到图片,于是写了个bat批量改一下: 

    @echo off
    
    for /r %%i in (*.dat) do (
    echo %%~ni.png
    ren "%%~fi" %%~ni.png
    )
    
    pause

    有关bat的for命令,可以具体参见下面这个网址,看看参数都是什么意思以及如何使用:

    https://www.jb51.net/article/134025.htm 

    看下面这个例子,理解下 tokens、 delims 的作用:

    @echo off
    for /f "tokens=1,2,3* delims=-, " %%a in ("1aa 2bb,3cc-4dd 5ee") do (
    echo %%a
    echo %%b
    echo %%c
    echo %%d
    echo %%e
    )
    pause

     delims指定分割符,分隔符为三个(中划线、逗号、空格)

    tokens指定参数个数,1,2,3指定前面三个字符串依次赋值三个参数,*表示后面的全部赋值给下一个参数,再依次往后面取参数e,就已经没有任何赋值了

    网上摘抄了一段:

    https://www.cnblogs.com/lbnnbs/p/4781504.html

    详细的帮助格式为:
    FOR /F ["options"] %%variable IN (file-set) DO command [command-parameters]
    FOR /F ["options"] %%variable IN ("string") DO command [command-parameters]
    FOR /F ["options"] %%variable IN ('command') DO command [command-parameters]
    
        带引号的字符串"options"包括一个或多个
        指定不同解析选项的关键字。这些关键字为:
    
            eol=c           - 指一个行注释字符的结尾(就一个)
            skip=n          - 指在文件开始时忽略的行数。
            delims=xxx      - 指分隔符集。这个替换了空格和跳格键的
                              默认分隔符集。
            tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
                              的 for 本身。这会导致额外变量名称的分配。m-n
                              格式为一个范围。通过 nth 符号指定 mth。如果
                              符号字符串中的最后一个字符星号,
                              那么额外的变量将在最后一个符号解析之后
                              分配并接受行的保留文本。经测试,该参数最多
                              只能区分31个字段。
    
            usebackq        - 使用后引号(键盘上数字1左面的那个键`)。
    
                            未使用参数usebackq时:file-set表示文件,但不能含有空格
                                双引号表示字符串,即"string"
                                单引号表示执行命令,即'command'
    
                              使用参数usebackq时:file-set和"file-set"都表示文件
                              当文件路径或名称中有空格时,就可以用双引号括起来
                                单引号表示字符串,即'string'
                                后引号表示命令执行,即`command`
    
    以上是用for /?命令获得的帮助信息,直接复制过来的。
    
    For命令例1:****************************************
    @echo off
    rem 首先建立临时文件test.txt
    echo ;注释行,这是临时文件,用完删除 >test.txt
    echo 11段 12段 13段 14段 15段 16段 >>test.txt
    echo 21段,22段,23段,24段,25段,26段 >>test.txt
    echo 31段-32段-33段-34段-35段-36段 >>test.txt
    FOR /F "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do echo %%i %%j %%k
    Pause
    Del test.txt
    
    运行显示结果:
    
    11段 13段 14段 15段 16段
    21段 23段 24段,25段,26段
    31段 33段 34段-35段-36段
    请按任意键继续. . .
    
    为什么会这样?我来解释:
    eol=;          分号开头的行为注释行
    tokens=1,3*    将每行第1段,第3段和剩余字段分别赋予变量%%i,%%j,%%k
    delims=,-     (减号后有一空格)以逗号减号和空格为分隔符,空格必须放在最后
    
    For命令例2:****************************************
    @echo off
    FOR /F "eol= delims=" %%i in (test.txt) do echo %%i
    Pause
    
    运行将显示test.txt全部内容,包括注释行,不解释了哈。
    
    For命令例3:****************************************
    
    另外/F参数还可以以输出命令的结果看这个例子
    
    @echo off
    FOR /F "delims=" %%i in ('net user') do @echo %%i
    pause
    
    这样你本机全部帐号名字就出来了把扩号内的内容用两个单引号引起来就表示那个当命令执行,FOR会返回命令的每行结果,加那个"delims=" 是为了让我空格的行能整行显示出来,不加就只显示空格左边一列!
    
    
    For 语句里面不支持管道操作
    
    set a=ping lntf43 |find /c /i "reply" 也不行
    
    ping lntf43 |find /c /i "reply from" > reply.txt
    
    for /f %%i in (reply.txt) do set reply=%%i
    
    Echo %reply%
  • 相关阅读:
    cs硕士妹子找工作经历【阿里人搜等互联网】
    EJB到底是什么,真的那么神秘吗??
    到底EJB是什么
    安全性测试:
    掌握 Promise 的逻辑方法
    VS2019 不能下载的解决办法
    Java8基础系列-Stream
    周期模型(典型的几种):
    软件生存周期及其模型是什么?
    试述软件的概念和特点?软件复用的含义?构件包括哪些?
  • 原文地址:https://www.cnblogs.com/LcxSummer/p/13891385.html
Copyright © 2020-2023  润新知