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