Windows系统使用bat批量修改文件名的使用示例

 更新时间:2023年10月08日 09:15:01   作者:weixin_56337147  
bat是非常好用的批处理工具,很多时候需要批量的修改文件名称,本文就来介绍一下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批量修改文件名内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论