zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    刷题[极客大挑战 2019]HardSQL
    刷题[安洵杯 2019]不是文件上传
    归并排序算法及其JS实现
    快速排序算法原理及其js实现
    圣杯布局
    什么是文档流
    AngularJs四大特性
    call,apply,bind的区别
    计算给定数组 arr 中所有元素的总和的几种方法
    es6之Decorator
  • 原文地址:https://www.cnblogs.com/flh1/p/12409327.html
Copyright © 2011-2022 走看看