C# 批量重命名文件

C# 批量重命名文件

有些时候,我们下载了一些听书的MP3文件,或者是一些美剧、网剧,下载下来之后发现这些文件具有一定的规律,比如下图。但是有些时候我们需要修改这些文件的文件名,一个一个文件重命名是非常反人类的,我们不需要重复造轮子。如果只是单纯地从文件名里替换掉一些字符,比如替换:【庆余年网剧高清】01 里面的“高清”为“HD”,变成 【庆余年网剧HD】01 ,这种方式的可以使用windows的powershell功能。
仙人指路:https://blog.csdn.net/u010295735/article/details/90054186

由上图可以发现,这些音频文件前面都有编号,后面跟着下划线的字母,本人有些许强迫症,只想保留编号,即001_a文件重命名为1,031_be文件重命名为31,手动重命名机器麻烦,况且这部小说的音频文件有247个。于是我打算用C#进行批量重命名。
先创建一个Windows窗体应用类型的项目,**项目名为:批量重命名文件(不推荐使用中文,我是为了图方便)**, 然后进行界面编辑,这个应用的界面很简单,用了一个标签控件,两个按钮控件。

“选择目录”按钮的变量名为:btnSelectFile
输入框的变量名为:textBox1
“批量修改”按钮的变量名为:btnAlter

后台代码如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Drawing;
 5 using System.Data;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10 using System.IO;
11 
12 namespace 批量重命名文件
13 {
14     public partial class UserControl1: UserControl
15     {
16         public UserControl1()
17         {
18             InitializeComponent();
19         }
20 
21         /// <summary>
22         /// 选择目录按钮响应事件
23         /// </summary>
24         /// <param name="sender"></param>
25         /// <param name="e"></param>
26         private void btnSelectFile_Click(object sender, EventArgs e)
27         {
28             FolderBrowserDialog folder = new FolderBrowserDialog();
29             if (folder.ShowDialog()==DialogResult.OK) 
30             {
31                 textBox1.Text = folder.SelectedPath;//获取目录的路径
32             }
33         }
34 
35         /// <summary>
36         /// 批量修改按钮响应事件
37         /// </summary>
38         /// <param name="sender"></param>
39         /// <param name="e"></param>
40         private void btnAlter_Click(object sender, EventArgs e)
41         {
42             DirectoryInfo directory = new DirectoryInfo(textBox1.Text);
43             var Files = directory.GetFiles(); //获取文件列表
44             try
45             {
46                 //遍历文件列表
47                 foreach (var file in Files) 
48                 {
49                     if (file.Name.Substring(0,1) == "0")
50                     {
51                         if (file.Name.Substring(1, 1) == "0")
52                         {
53                             var str = file.Name.Substring(2, 1);
54                             var hz = file.Extension;//获取文件的扩展名(后缀名)
55                             file.MoveTo(textBox1.Text + "\" + str + hz);//重命名后的文件保存在原来的目录下
56                         }
57                         else 
58                         {
59                             var str = file.Name.Substring(1, 2);
60                             var hz = file.Extension;//获取文件的扩展名(后缀名)
61                             file.MoveTo(textBox1.Text + "\" + str + hz);//重命名后的文件保存在原来的目录下
62                         }
63                     }
64                     else 
65                     {
66                         var str = file.Name.Substring(0,3);
67                         var hz = file.Extension;//获取文件的扩展名(后缀名)
68                         //修改文件名的方法。
69                         file.MoveTo(textBox1.Text + "\" + str + hz);//重命名后的文件保存在原来的目录下
70                     }
71                 }
72                 MessageBox.Show("批量重命名成功!");
73             }
74             catch (Exception ex)
75             {
76                 MessageBox.Show(ex.Message);
77             }
78         }
79     }
80 }

思路

根据这些文件名的规律以及我的需求,实现这个功能也不难,我们只需关注文件名前面3为字符即可,001改为1,031改为31,所以先获取文件名,然后截取文件名的第一位,判断是否为0,不为0证明文件名类似172_gp,我们只需把172后面的_gp去掉然后加上后缀再重命名保存在原位置即可。
第一位为0的话就继续判断第二位字符,不为0证明是031这种文件名,去掉031前面的0和后面多余的字符串进行重命名即可,为0证明是001这种,把001前面的00和后面多余的字符串去掉,然后重命名。
运行无错则提示批量修改成功。

运行

源码

百度网盘:
链接: https://pan.baidu.com/s/1I21TtTKO4DF_AnZ8_GBcSQ 提取码: s4kx

大家可以根据自己的需求和网剧名字的规律对代码进行规则修改,用来实现自己想要的功能。

原文地址:https://www.cnblogs.com/flh1/p/12409327.html