Windows系统使用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。请谨慎操作,并在执行之前备份文件,以防需要还原。
- @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%),然后将文件重命名为新的文件名,同时保留原始文件的扩展名。
如果您在运行批处理文件时在终端中看到乱码,这可能是由于字符集或编码问题引起的。
字符集不匹配:确保终端和批处理文件都使用相同的字符集,通常是 UTF-8。可以通过在批处理文件的开头添加以下行来设置字符集:
- @echo off
- REM 将字符集设置为 UTF-8
- chcp 65001
Windows系统使用bat文件批量修改文件名。