bat批量重命名

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

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

C:\Users\联想\AppData\Roaming\360Safe\DesktopRest\eye\bk_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%

 

posted @ 2020-10-28 15:31  1156740846  阅读(792)  评论(0编辑  收藏  举报