切換
舊版
前往
大廳
主題

快速批次命名(附原始碼)(舊版)

深海異音 | 2015-01-11 18:08:13 | 巴幣 18 | 人氣 1214


這個是舊版的,新版在這裡【批次命名-1.2




功能:
快速將檔案依照編號重新命名(依照 儲存日期 遞減 排序、會避開系統檔案、不影響附檔名)。

使用方法:
把要重新命名的那個資料夾拖曳到程式裡面,然後按下【執行】。



截圖


icon:



界面:



影片(記得切換成720P)




載點


這個是舊版的,新版在這裡【批次命名-1.2


程式載點:
1.
MEGA
(建議用Google Chrome瀏覽器來下載)
2.
MediaFire
(備用載點)







原始碼(visual studio 2013:C#專案):






原始碼


新建一個C#的【windows form應用程式】專案,然後拉button、textbox、richtextbox這3個物件進去,
接著複製下面的程式碼貼上就能運行嘍。



using  System;
using  System.Collections.Generic;
using  System.IO;
using  System.Windows.Forms;

namespace  WindowsFormsApplication1{
        public  partial  class  Form1  :  Form  {

                public  Form1() {
                        InitializeComponent();//建立應用程式界面
                        //
                        //
                        event_拖曳物件();//註冊拖曳檔案的事件
                        TopMost  =  true;//讓本程式在所有程式最上面
                        richTextBox1.ReadOnly  =  true;//禁止使用者編輯 說明文字框
                        button1.Click  +=  new  System.EventHandler(button1_Click);
                }


                private  void  button1_Click(  object  sender,  EventArgs  e  )  {
                        if  (fun_判斷是否為資料夾()  ==  false)  {
                                MessageBox.Show("這並不是一個資料夾");
                                return;
                        }

                        try  {                               
                                
                                //取得所有檔案
                                System.IO.FileInfo[]  Files  =  new  DirectoryInfo(textBox1.Text).GetFiles();

                                List<c_檔案資料>  list_檔案 =  new  List<c_檔案資料>();//存放所有檔案
                                String  st_暫存 =  "暫存--fr+5-b斷#q--";//暫存用的名字
                                //
                                //
                                //排除系統檔案,並且儲存  儲存時間
                                for  (int  i  =  0;  i  <  Files.Length;  i++)
                                        if  ((Files[i].Attributes  &  FileAttributes.System)  !=  FileAttributes.System)
                                                list_檔案.Add(new c_檔案資料(Files[i].FullName,  
                                                                    File.GetLastWriteTime(Files[i].FullName)));
                                //
                                //
                                //依照  儲存時間  排序(遞減
                                for  (int  i  =  0;  i  <  list_檔案.Count;  i++)
                                        for  (int  j  =  i;  j  <  list_檔案.Count;  j++)
                                                if  (list_檔案[i].date_儲存時間  <  list_檔案[j].date_儲存時間)  {
                                                       var  d  =  list_檔案[i];
                                                       list_檔案[i]  =  list_檔案[j];
                                                       list_檔案[j]  =  d;
                                               }
                                //
                                //
                                //修改成暫存的名字
                                for  (int  i  =  0;  i  <  list_檔案.Count;  i++)  {
                                        String  st_原始檔名 =  list_檔案[i].st_原始檔名;
                                        String  s_新檔名= textBox1.Text + "/" + st_暫存 + i + list_檔案[i].st_附檔名;

                                        if  (File.Exists(st_原始檔名))
                                               File.Move(st_原始檔名,  s_新檔名);
                                }
                                //
                                //
                                //改成正確的名字
                                for  (int  i  =  0;  i  <  list_檔案.Count;  i++)  {
                                        String  st_原始檔名 = textBox1.Text + "/" + st_暫存 + i + list_檔案[i].st_附檔名;  
                                        String  s_新檔名 =  textBox1.Text  +  "/"  +  i  +  list_檔案[i].st_附檔名;

                                        if  (File.Exists(st_原始檔名))
                                               File.Move(st_原始檔名,  s_新檔名);
                                }
                                //
                                //
                                richTextBox1.Text  +=  "\n"  +  "(完成)";

                        }  catch  (Exception  ex)  {
                                MessageBox.Show("發生意外:"  +  "\n"  +  ex.Message);
                        }
                }


                private  void  event_拖曳物件()  {

                        List<Control>  list_所有允許拖曳的物件  =  new  List<Control>();
                        list_所有允許拖曳的物件.Add(this);
                        list_所有允許拖曳的物件.Add(richTextBox1);
                        list_所有允許拖曳的物件.Add(button1);
                        list_所有允許拖曳的物件.Add(textBox1);
                        //list_所有允許拖曳的物件.Add(label1);

                        for  (int  i  =  0;  i  <  list_所有允許拖曳的物件.Count;  i++)  {
                                //拖拉功能啟動
                                list_所有允許拖曳的物件[i].AllowDrop  =  true;

                                //允許拖拉動作繼續
                                list_所有允許拖曳的物件[i].DragEnter  +=  new  DragEventHandler(
                                                                                                   (  object  sender, DragEventArgs  e  )  =>  {
                                        if  (e.Data.GetDataPresent(DataFormats.FileDrop,  false)  ==  true)
                                               e.Effect  =  DragDropEffects.All;
                                });
                                //拖曳結
                                list_所有允許拖曳的物件[i].DragDrop  +=  new  DragEventHandler(
                                                                                                   (  object  sender, DragEventArgs  e  )  =>  {
                                        //計算資料夾底下有多少檔案
                                        string[]  files  =  (string[])e.Data.GetData(DataFormats.FileDrop);
                                        textBox1.Text  =  files[files.Length  -  1];
                                        fun_判斷是否為資料夾();
                                });
                        }
                }


                private  Boolean  fun_判斷是否為資料夾()  {
                        if  (Directory.Exists(textBox1.Text))  {
                                int  int_檔案數量 =  System.IO.Directory.GetFiles(textBox1.Text).Length;
                                richTextBox1.Text  =  "檔案數量:"  +  int_檔案數量;
                                return  true;
                        }  else  {
                                richTextBox1.Text  =  textBox1.Text  +  "\n"  +  "並不是一個正常的資料夾";
                                return  false;
                        }
                }


                private  class  c_檔案資料  {
                        public  DateTime  date_儲存時間;
                        public  String  st_原始檔名  =  "";
                        public  String  st_附檔名  =  "";
                        public  c_檔案資料( String  s,  DateTime  d  )  {
                                this.st_原始檔名  =  s;
                                this.date_儲存時間  =  d;
                                //計算  附檔名
                                String[]  x  =  s.Split('.');
                                if  (x.Length  >  1)
                                        st_附檔名  =  "."  +  x[x.Length  -  1];
                        }
                }


        }
}





檢視資料夾時用【日期】排序,就可以非常快速找出近期儲存的圖片,但是圖片只要到一定的數量,顯示就會相當的慢,解決方法是將檔案名稱用編號命名,然後用【檔名】排序。

批次命名的程式在網路上很多,功能也都相當強大,但是也因為太多意義不明的功能,完全不會用,用到一半就當掉就更別提了

就因為這樣所以才會寫了這個簡單到不能再簡單的批次命名。


送禮物贊助創作者 !
0
留言

創作回應

佛心公司
MediaFire 的縮網址壞掉了
2015-03-20 22:11:28
深海異音
感謝提醒,已補上正常的網址
2015-03-20 22:19:40
小光尼
請問能調整數字寬度嗎,有些軟體在某些情況會把1和10和一起
mangameeyaCE之類的
2015-04-15 10:01:51
深海異音
我回去改一下就行了,不過可能要明天
2015-04-15 10:06:53
小光尼
收到,並非急著用,就是抓本本時都會用到
不過剛測試發現遞減會讓抓的圖片反過來= =
2015-04-15 11:26:48
深海異音
他是依照存入你電腦的時間遞減排序,如果要用其他排序方法就得另外寫
2015-04-15 11:36:54
小光尼
恩,所以最後抓的圖片會變成1,先抓的變成尾巴
那就沒辦法嚕,放棄..
2015-04-15 11:52:07
深海異音
網路這類的程式很多了,所以我才會做這個針對我個人需求的簡化版程式。
如果要進階功能我想用其他人的可能比較快
2015-04-15 11:55:38
深海異音
新版的已做好
http://home.gamer.com.tw/creationDetail.php?sn=2813046
2015-04-19 23:27:31
更新的人格
C#這麼猛,可以用中文當宣告
2016-04-28 18:57:59
深海異音
很多語言都行吧,不過當然不建議啦
2016-04-28 20:20:39

更多創作