效果图:
 
 
 
源代码:
  1 using System;
  2 using System.Drawing;
  3 using System.Windows.Forms;
  4 using System.Threading;
  5 using System.IO;
  6 
  7 namespace ReSetFileNameByList
  8 {
  9     public partial class Form1 : Form
 10     {
 11         public Form1()
 12         {
 13             InitializeComponent();
 14         }
 15 
 16         Thread threadShowMessageToUser = null;
 17         public delegate void ShowMessageToUser();
 18         public ShowMessageToUser myDelegate;
 19         private void Form1_Load(object sender, EventArgs e)
 20         {
 21             rabtn_ReSetNameByRule.Checked = true;//默认选择按重命名规则命名
 22             pan_reNameRule.Visible = true;//显示重命名区域
 23             cob_FirstName.SelectedIndex = 0;
 24             cob_SecendName.SelectedIndex = 0;
 25             cob_ThirdName.SelectedIndex = 0;
 26 
 27             myDelegate = new ShowMessageToUser(SetMsgShowToUser);
 28             ShowMessageOnLable("", MessageType.None);
 29             pan_reNameRule.Update();
 30 
 31         }
 32 
 33         //打开选择文件路径对话框
 34         private void btn_OpenFileDialog_Click(object sender, EventArgs e)
 35         {
 36             //选择文件夹对话框
 37             //SaveFileDialog allFiles = new SaveFileDialog();
 38             //allFiles.Title = "选择文件夹-为其中所有文件重命名";
 39             //DialogResult result = allFiles.ShowDialog();
 40 
 41             FolderBrowserDialog allFiles = new FolderBrowserDialog();
 42             allFiles.ShowNewFolderButton = false;//不可以有“新建文件夹”按钮
 43             allFiles.Description = "选择文件夹-将为其中的所有文件重命名";
 44             DialogResult result = allFiles.ShowDialog();
 45 
 46             if (result == DialogResult.Yes || result == DialogResult.OK)
 47             {
 48                 txt_FilePathSource.Text = allFiles.SelectedPath;
 49                 allFiles.Dispose();
 50             }
 51             ShowMessageOnLable("", MessageType.None);
 52 
 53         }
 54 
 55         //开始执行
 56         private void btn_BeginReSetName_Click(object sender, EventArgs e)
 57         {
 58             #region 空值判断
 59             if (txt_FilePathSource.Text.Length <= 0)
 60             {
 61                 ShowMessageOnLable("请先填写目标文件夹!", MessageType.Error);
 62                 //MessageBox.Show("请先填写源文件夹!","小博提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
 63                 return;
 64             }
 65             if (rabtn_ReSetNameByRule.Checked == true)
 66             {
 67                 if (cob_FirstName.Text.Length <= 0 && cob_SecendName.Text.Length <= 0 && cob_ThirdName.Text.Length <= 0)
 68                 {
 69                     ShowMessageOnLable("请填写重命名规则!", MessageType.Error);
 70                     //MessageBox.Show("请填写重命名规则!", "小博提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
 71                     return;
 72                 }
 73             }
 74             if (rabtn_DelWords.Checked == true)
 75             {
 76                 if (txt_delByWord.Text.Length <= 0)
 77                 {
 78                     ShowMessageOnLable("请填写文件名中包含的要删除的词!", MessageType.Error);
 79                     //MessageBox.Show("请填写文件名中包含的要删除的词!", "小博提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
 80                     return;
 81                 }
 82             }
 83             #endregion
 84             ShowMessageOnLable("正在执行....", MessageType.Ready);
 85             //lal_msg.Invoke(myDelegate);
 86             threadShowMessageToUser = new Thread(ThreadFunction);
 87             threadShowMessageToUser.IsBackground = true;//设置为后台线程
 88             threadShowMessageToUser.Start();
 89         }
 90         //线程的方法
 91         private void ThreadFunction()
 92         {
 93             if (InvokeRequired)//判断是否调用控件方法时是否必须调用Invoke方法
 94             {
 95                 //lal_msg.Invoke(new ShowMessageToUser(ThreadFunction));
 96                 lal_msg.Invoke(myDelegate);
 97             }
 98             else
 99             {
100                 SetMsgShowToUser();
101             }
102         }
103         //委托的方法
104         public void SetMsgShowToUser()
105         {
106             string filePath = txt_FilePathSource.Text.Trim();
107             ReSetFileName(filePath);
108         }
109         /// <summary>
110         /// 重命名文件
111         /// </summary>
112         /// <param name="filePath">文件的文件夹路径</param>
113         public void ReSetFileName(string filePath)
114         {
115             if (!Directory.Exists(filePath))
116             {
117                 ShowMessageOnLable("文件夹路径不正确!", MessageType.Error);
118                 return;
119             }
120             if ((cob_FirstName.Text.Length <= 0 && cob_ThirdName.Text.Length <= 0) || (cob_FirstName.Text == "(不使用前缀)" && cob_ThirdName.Text == "(不使用后缀)"))
121             {
122                 ShowMessageOnLable("前缀或后缀必须有一个!", MessageType.Error);
123                 return;
124             }
125             //else if (!cob_FirstName.Text.Contains("一") && cob_ThirdName.Text.Contains("一"))
126             //{
127             //    ShowMessageOnLable("前缀或后缀的格式不正确必须得含有\"一\"!", MessageType.Error);
128             //    return;
129             //}
130             try
131             {
132                 string[] files = Directory.GetFiles(filePath);
133                 for (int i = 0; i < files.Length; i++)
134                 {
135                     string ext = Path.GetExtension(files[i]);
136 
137                     string filePathNoExtension = Path.GetFileNameWithoutExtension(files[i]);
138                     //MessageBox.Show(filePathNoExtension);
139                     string newFileName = GetFileNewName(filePathNoExtension, i + 1);
140 
141                     string resultFileName = Path.Combine(filePath, newFileName + ext);
142                     if (!String.Equals(files[i], resultFileName))
143                     {
144                         Directory.Move(files[i], resultFileName);
145                     }
146                     int precent = Convert.ToInt32((((i + 1) * 1.00) / (files.Length * 1.00)) * 100);
147                     ShowMessageOnLable(precent.ToString() + "%  " + resultFileName, MessageType.Ready);
148                     lal_msg.Update();
149                     Thread.Sleep(1000);
150                 }
151             }
152             catch (Exception ex)
153             {
154                 ShowMessageOnLable(ex.Message, MessageType.Exception);
155             }
156         }
157         /// <summary>
158         /// 对文件名进行逻辑处理并返回新文件名
159         /// </summary>
160         /// <param name="oldFileNameWithoutExt">旧文件名,不包含路径和扩展名</param>
161         /// <param name="index">循环计算次数</param>
162         /// <returns>返回值:新的文件名,不包含路径和扩展名</returns>
163         public string GetFileNewName(string oldFileNameWithoutExt, int index)
164         {
165             string fileNameByUser = "";
166             #region 使用加前后缀的重命名规则
167             if (rabtn_ReSetNameByRule.Checked)
168             {
169                 //数字123     0
170                 //第一个   1
171                 //第一项   2
172                 //第一讲   3
173                 //第一天   4
174                 //(不使用前缀)   5
175                 #region 前缀名字逻辑
176                 switch (cob_FirstName.Text)
177                 {
178                     case "数字123":
179                         if (cob_SecendName.Text.Length >= 0)
180                         {
181                             fileNameByUser += index + "_";
182                         }
183                         else
184                         {
185                             fileNameByUser += index;
186                         }
187                         break;
188                     case "第一个":
189                     case "第一项":
190                     case "第一讲":
191                     case "第一天":
192                         if (cob_SecendName.Text.Length >= 0)
193                         {
194                             fileNameByUser += cob_FirstName.Text.Replace("一", index.ToString()) + "_";
195                         }
196                         else
197                         {
198                             fileNameByUser += cob_FirstName.Text.Replace("一", index.ToString());
199                         }
200                         break;
201                     case "(不使用前缀)":
202                         break;
203                     default:
204                         if (cob_FirstName.Text.Length >= 0 && cob_FirstName.Text.Contains("一"))
205                         {
206                             if (cob_SecendName.Text.Length >= 0)
207                             {
208                                 fileNameByUser += cob_FirstName.Text.Replace("一", index.ToString()) + "_";
209                             }
210                             else
211                             {
212                                 fileNameByUser += cob_FirstName.Text.Replace("一", index.ToString());
213                             }
214                         }
215                         break;
216                 }
217                 #endregion
218                 #region 中间名字逻辑
219                 if (cob_SecendName.Text == "原名")
220                 {
221                     fileNameByUser += oldFileNameWithoutExt;
222                 }
223                 if (cob_SecendName.Text.Length >= 0 && cob_SecendName.Text != "原名")
224                 {
225                     fileNameByUser += cob_SecendName.Text;
226                 }
227                 #endregion
228                 #region 后缀名字逻辑
229                 switch (cob_ThirdName.Text)
230                 {
231                     case "数字123":
232                         if (cob_SecendName.Text.Length >= 0)
233                         {
234                             fileNameByUser += "_" + index;
235                         }
236                         else
237                         {
238                             fileNameByUser += index;
239                         }
240                         break;
241                     case "第一个":
242                     case "第一项":
243                     case "第一讲":
244                     case "第一天":
245                         if (cob_SecendName.Text.Length >= 0)
246                         {
247                             fileNameByUser += "_" + cob_ThirdName.Text.Replace("一", index.ToString());
248                         }
249                         else
250                         {
251                             fileNameByUser += cob_ThirdName.Text.Replace("一", index.ToString());
252                         }
253                         break;
254                     case "(不使用前缀)":
255                         break;
256                     default:
257                         if (cob_ThirdName.Text.Length >= 0 && cob_ThirdName.Text.Contains("一"))
258                         {
259                             if (cob_SecendName.Text.Length >= 0)
260                             {
261                                 fileNameByUser += cob_ThirdName.Text.Replace("一", index.ToString()) + "_";
262                             }
263                             else
264                             {
265                                 fileNameByUser += cob_ThirdName.Text.Replace("一", index.ToString());
266                             }
267                         }
268                         break;
269                 }
270                 #endregion
271             }
272             #endregion
273             if (rabtn_DelWords.Checked)
274             {
275                 if (txt_delByWord.Text.Length >= 0)
276                 {
277                     fileNameByUser = oldFileNameWithoutExt.Replace(txt_delByWord.Text, "");
278                 }
279             }
280             return fileNameByUser;
281         }
282         //单选:选择了“删除包含词”的规则的事件处理
283         private void rabtn_DelWord_CheckedChanged(object sender, EventArgs e)
284         {
285             pan_reNameRule.Visible = false;
286             pan_delWords.Visible = true;
287             ShowMessageOnLable("", MessageType.None);
288         }
289         //单选:选择了“加前后缀重命名”的规则的事件处理
290         private void rabtn_ReSetNameByRule_CheckedChanged(object sender, EventArgs e)
291         {
292             pan_delWords.Visible = false;
293             pan_reNameRule.Visible = true;
294 
295             ShowMessageOnLable("", MessageType.None);
296         }
297         enum MessageType
298         {
299             Exception,
300             Error,
301             Ready,
302             Succeed,
303             None
304         }
305         /// <summary>
306         /// 在窗体上显示不同颜色的消息
307         /// </summary>
308         /// <param name="msg">要显示的消息内容</param>
309         /// <param name="msgType">消息的类型,Exception:异常,紫红色显示,Error:错误,红色显示,None:无变化,不显示,Ready:已准备好,蓝色显示,Succeed:重命名成功,绿色显示</param>
310         private void ShowMessageOnLable(string msg, MessageType msgType)
311         {
312             if (msgType == MessageType.Exception)
313             {
314                 lal_msg.ForeColor = Color.Fuchsia;
315                 lal_msg.Text = msg;
316             }
317             else if (msgType == MessageType.Error)
318             {
319                 lal_msg.ForeColor = Color.Red;
320                 lal_msg.Text = msg;
321             }
322             else if (msgType == MessageType.None)
323             {
324                 lal_msg.ForeColor = Color.Red;
325                 lal_msg.Text = msg;
326             }
327             else if (msgType == MessageType.Succeed)
328             {
329                 lal_msg.ForeColor = Color.Green;
330                 lal_msg.Text = msg;
331             }
332             else if (msgType == MessageType.Ready)
333             {
334                 lal_msg.ForeColor = Color.Blue;
335                 lal_msg.Text = msg;
336             }
337             else
338             {
339                 btn_BeginReSetName.Enabled = false;
340                 lal_msg.ForeColor = Color.Red;
341                 lal_msg.Text = "请重新运行程序!";
342             }
343         }
344         private void txt_FilePathSource_TextChanged(object sender, EventArgs e)
345         {
346             ShowMessageOnLable("", MessageType.None);
347         }
348     }
349 }