1. 程式人生 > >MATLAB 批量檔案重新命名(詳細解釋)

MATLAB 批量檔案重新命名(詳細解釋)

這段時間在用 matlab 做手寫數字識別,處理樣本的時候需要對樣本檔案進行重新命名,可是有好多,總不能一個一個重新命名吧,於是上網百度了好多,不過大多都一樣,但是沒有解釋,只有乾巴巴的程式,弄了好一會才弄清楚(我太菜了……),於是寫下了以備後用。

更新

這裡我會列出對本文的更新。

  • 2017 年 3 月 21 日:優化排版,去除多餘和易誤導人的語句。
  • 2017 年 3 月 25 日:優化程式碼,增加重新命名成功失敗提示,增加程式的一點說明。

問題

假設我有 0.bmp, 1.bmp, 2.bmp, ……,99.bmp 等 100 個 bmp 影象檔案,出於某種需要我要在名字前加上一個 RH_

字串。

程式碼

files = dir('*.bmp');
len=length(files);
for i=1:len
    oldname=files(i).name;
    newname=strcat('RH_', oldname);
    command = ['rename' 32 oldname 32 newname];
    status = dos(command);
    if status == 0
        disp([oldname, ' 已被重新命名為 ', newname])
    else
        disp([oldname, ' 重新命名失敗!'
]
) end end

解釋一下程式:

  1. dir 函式獲得工作目錄下所有 bmp 檔案資訊,返回的 file 是一個 結構體,裡面包含了檔名、修改時間等資訊,我們用的就是第一個域名字 name
  2. 獲得 bmp 檔案的個數 len
  3. 每一次迴圈用 strcat 函式將 RH_ 與原檔名 oldname 連線起來,然後使用 dos 呼叫作業系統命令替換掉原檔名

關於這個 dos 函式的用法,這裡引用下 dos 函式的幫助

status = dos(command) executes the specified MS-DOS® command for Windows® platforms, and waits for the command to finish execution before returning the exit status to the status variable.

這個函式實際上就是呼叫執行作業系統命令,比如這裡的 rename 命令,32 是 ASCII 碼,表示空格。

rename oldname newname

一點說明

我上面的程式是將程式和我要重新命名的圖片放在了 MATLAB 的 當前路徑 下,所有可以不用寫絕對路徑,但是如果你想要指定圖片檔案的絕對路徑,那麼就要 保證你的路徑中不包含空格,不然會報錯:The syntax of the command is incorrect. 同樣引用下 這篇文章 的說法:

Rename the file “computer hope.txt” to “example file.txt”. Whenever dealing with a file or directory with a space, it must be surrounded with quotes. Otherwise, you’ll get the The syntax of the command is incorrect error.

END

好了,又是十二點了,就到這吧,歡迎交流!