先上代码(替换特定字符为指定字符)
@echo off
setlocal enabledelayedexpansion
for /r . %%i in (*.mp4) do (
set str=%%i
set str=!str:mp4=txt!
ren "%%i" "!str!"
)
pause
以上代码作用是修改当前以及所有子文件夹下面的mp4文件名,将文件名(包含扩展名)中mp4替换为txt。
@echo off 为关闭命令回显命令,即运行时候dos窗口不会显示运行代码。
setlocal enabledelayedexpansion 为设置本地为延迟扩展。即可使用!variable!这种形式获取动态赋的值。更深层次的可以自行了解。
for /r . 表示对当前所在位置目录树遍历。%%i in (*.mp4) 表示 目标中的mp4文件的文件名赋值到%%i do () 括号里面是循环体内部命令的地方。
set str=!str:mp4=txt! 表示将 文件名字符串中的mp4替换为txt,知道这个用法,可以触类旁通,可以将你想要的替换的字符串替换为你想要的模样。
ren "%%i" "!str!" 表示将原文件名修改为替换后的新文件名
如果需要统一去掉倒数后面几个字符,或者开头几个字符等
@echo off
setlocal enabledelayedexpansion
for %%F in (*.mp4) do (
rem 获取文件名 不包含扩展名
set filename=%%~nF
set suf=.mp4
rem 去掉后面1位字符, filename=%%~nF 默认后面会多个空格
set filename=!filename:~0,-2!
set filename=!filename!!suf!
echo !filename!
rem 修改文件名
ren "%%F" "!filename!"
)
echo "end"
pause
核心代码 set filename=!filename:~0,-2! 替换后面两个字符,注意set filename=%%~nF获取不含扩展名的文件名时候,后面会默认多个空格,需要细心留意处理。
还有就是字符串拼接为set filename=!filename!!suf! 而不是我们熟悉其他语言的那种用+号连接。这里需要注意。
关于 set filename=%%~nF 获取文件名 不包含扩展名 有更多扩展如下(这里两个%是因为以上代码是写在xx.bat文件中的,而不是直接在dos窗口写的命令,其中一个%为转义符号。%为特殊符号,dos中很多符号为特殊符号,不同特殊符号转义符号不同,文本编辑时候需要注意转义问题):
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
也可以为扩展名指定子字符串。
%PATH:~10,5%
会扩展 PATH 环境变量,然后只使用在扩展结果中从第 11 个(偏
移量 10)字符开始的五个字符。如果没有指定长度,则采用默认
值,即变量数值的余数。如果两个数字(偏移量和长度)都是负数,
使用的数字则是环境变量数值长度加上指定的偏移量或长度。
%PATH:~-10%
会提取 PATH 变量的最后十个字符。
%PATH:~0,-2%
会提取 PATH 变量的所有字符,除了最后两个。
关于DOS命令详细使用说明可以使用 命令名 /? 这种方式获取,例如:我想知道set 命令的详细使用 只需要在dos 窗口(windows键+R调出运行窗口输入cmd回车即可调出dos窗口) 输入:set /? 回车即可