Windows系统使用bat批量修改文件名的使用示例
编写运行.bat文件
新建文本文档,输入如下内容:
@echo off chcp 65001 setlocal enabledelayedexpansion rem 设置要查找和替换的字符串 set "search=aaa" set "replace=bbb" rem 设置文件名匹配模式,例如*.txt表示修改.txt文件,*.*表示修改所有文件 set "filePattern=*.txt" rem 设置目标文件夹的路径 set "folderPath=C:\YourFolderPath" rem 切换到目标文件夹 cd /d "%folderPath%" rem 遍历文件并重命名 for %%f in (%filePattern%) do ( set "filename=%%~nf" set "newFilename=!filename:%search%=%replace%!" ren "%%f" "!newFilename!%%~xf" ) echo 文件名修改完成。 pause
请按照以下步骤执行此批处理脚本:
- 打开记事本或其他文本编辑器,将上述代码复制粘贴到新建的文本文件中。
- 在代码中,将
search
变量设置为要查找的字符串,将replace
变量设置为要替换的字符串。 - 如果需要修改特定类型的文件,请将
filePattern
变量设置为相应的文件扩展名。如果要修改所有文件,可以将其设置为*.*
。 - 将
folderPath
变量设置为包含要重命名文件的目标文件夹的路径。 - 将文本文件保存为批处理文件,例如
rename_files.bat
。 - 双击批处理文件以执行脚本,它将遍历目标文件夹中的文件并按照您指定的规则重命名它们。
请谨慎操作,并在执行之前备份文件,以防需要还原。
folderPath设置为bat文件所在的文件夹
@echo off chcp 65001 setlocal enabledelayedexpansion rem 获取批处理文件所在的文件夹路径 for %%I in ("%~dp0.") do set "folderPath=%%~fI" rem 设置要查找和替换的字符串 set "search=aaa" set "replace=bbb" rem 设置文件名匹配模式,例如*.txt表示修改.txt文件,*.*表示修改所有文件 set "filePattern=*.txt" rem 切换到目标文件夹 cd /d "%folderPath%" rem 遍历文件并重命名 for %%f in (%filePattern%) do ( set "filename=%%~nf" set "newFilename=!filename:%search%=%replace%!" ren "%%f" "!newFilename!%%~xf" ) echo 文件名修改完成。 pause
在上述代码中,"%~dp0"
用于获取批处理文件所在的文件夹路径,然后将其赋给 folderPath
变量,以便在后续的操作中使用。这样,脚本将工作在批处理文件所在的文件夹中,您可以在该文件夹中执行文件名修改操作。
代码解释
for %%I in ("%~dp0.") do set "folderPath=%%~fI"
这段批处理脚本的目的是获取包含批处理文件的文件夹的路径,并将该路径存储在名为 folderPath
的变量中。让我解释其中的几个关键部分:
%~dp0
:这是批处理文件内置的特殊变量,它表示当前批处理文件的完整路径,其中%~d
表示驱动器,%~p
表示路径。因此,%~dp0
表示当前批处理文件的文件夹路径。for %%I in ("%~dp0.")
:这是一个for
循环,它遍历一个项列表,其中%%I
是循环变量。在这里,我们使用for
循环来处理%~dp0
的值,因为%~dp0
可能包含空格或特殊字符,需要将其引号括起来。set "folderPath=%%~fI"
:在for
循环内部,%%~fI
表示对循环变量%%I
的扩展,其中%~f
表示取得完整的路径。因此,set "folderPath=%%~fI"
将folderPath
变量设置为包含批处理文件的文件夹的完整路径。
总之,这段代码的作用是获取批处理文件所在文件夹的完整路径,并将其存储在 folderPath
变量中,以便在脚本的后续部分中使用该路径。这对于需要在批处理脚本中引用脚本所在文件夹的情况非常有用,因为它允许脚本在不考虑具体位置的情况下访问其所需的资源或文件。
for %%f in (%filePattern%) do
for %%f in (%filePattern%) do
是一个批处理中的循环结构,它的目的是遍历满足指定文件模式的文件,并对每个文件执行一组命令。让我解释其中的几个关键部分:
for %%f
:这是一个for
循环的开始,其中%%f
是循环变量的名称。在批处理中,通常使用%%
来表示循环变量,而不是单独的%
。in (%filePattern%)
:这部分定义了要遍历的文件列表。%filePattern%
是一个变量,它应该包含一个文件模式,用于匹配要处理的文件。例如,如果%filePattern%
的值为*.txt
,那么循环将遍历所有扩展名为.txt
的文件。do
:在do
后面的是要在每次迭代中执行的一组命令。这些命令可以是批处理脚本中的任何有效命令,例如重命名文件、复制文件、执行操作等。
综合起来,for %%f in (%filePattern%) do
的作用是遍历满足文件模式 %filePattern%
的文件,并对每个文件执行 do
后面的一组命令。这使得批处理脚本能够对一组文件执行相同的操作,例如批量重命名、复制或删除文件等。
set "filename=%%~nf"
set "newFilename=!filename:%search%=%replace%!"
ren "%%f" "!newFilename!%%~xf"
这个批处理文件中的代码用于重命名文件名中的部分文本。让我解释一下每一行代码的含义:
set "filename=%%~nf"
:这一行代码将当前文件的名称(不包括扩展名)存储在变量filename
中。%%~nf
是一个批处理文件中用于获取文件名部分的特殊语法,其中%%~n
表示获取文件名,f
表示当前文件的占位符。所以%%~nf
将被替换为当前文件的名称。set "newFilename=!filename:%search%=%replace%!"
:这一行代码将在filename
变量中查找并替换文本。具体来说,它会查找filename
中的所有%search%
文本,并将其替换为%replace%
文本。!filename:%search%=%replace%!
是批处理文件中用于进行文本替换的语法。ren "%%f" "!newFilename!%%~xf"
:这一行代码使用ren
命令(缩写为rename
)来重命名文件。%%f
表示当前文件的占位符。!newFilename!
是上一行代码中计算出的新文件名,%%~xf
表示当前文件的扩展名。因此,这一行代码将当前文件的名称从%%f
更改为!newFilename!
,并保留原始文件的扩展名。
总之,这个批处理文件用于查找文件名中的特定文本(%search%
)并将其替换为其他文本(%replace%
),然后将文件重命名为新的文件名,同时保留原始文件的扩展名。
bat的输出终端乱码
如果您在运行批处理文件时在终端中看到乱码,这可能是由于字符集或编码问题引起的。
字符集不匹配:确保终端和批处理文件都使用相同的字符集,通常是 UTF-8。可以通过在批处理文件的开头添加以下行来设置字符集:
@echo off chcp 65001 (将字符集设置为 UTF-8)
到此这篇关于Windows系统使用bat批量修改文件名的使用示例的文章就介绍到这了,更多相关bat批量修改文件名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
dos 环境变量延迟扩展enabledelayedexpansion详解
这篇文章主要介绍了dos 环境变量延迟扩展的相关知识,需要的朋友可以参考一下2016-11-11批处理中setlocal enabledelayedexpansion的作用详细整理
设置本地为延迟扩展。其实也就是:延迟变量,全称延迟环境变量扩展, 想进阶,变量延迟是必过的一关!所以这一部分希望你能认真看。2011-12-12让DOS下输入命令时也可以象Linux一样用Tab键进行命令自动填充
这篇文章主要介绍了当有有两个目录分别叫abcdefg和bcdefgh,想进abcdefg就cd a*就进了,想进bcdefgh时就cd b*就进了,确实比较方便2013-07-07
最新评论