1、查看文件存在 dir()
clear clc cd('C:\Documents and Settings\Administrator\桌面\matlab\test'); % 設置當前目錄 % 此時test文件夾中有:文件夾1, 文件夾2, 文件1.txt, 文件2.txt movefile('1.txt', '11.txt'); % 把1.txt剪切成11.txt(1.txt不存在了),實際上相當於改名 copyfile('2.txt', '22.txt'); % 把2.txt復制成22.txt(2.txt依然存在) movefile('11.txt', '1'); % 把11.txt剪切到文件夾1中 copyfile('22.txt', '2'); % 把22.txt復制到文件夾2中
一直用movefile重命名的總是覺得有點不對,速度很慢
movefile函數實際上干的是用新文件名復制一遍文件,然后把舊的再刪了。。。。
所以用這個做重命名在文件特別多數據量特別大的時候其實是非常非常慢的。。。。
順便說一下,剪切也是大坑(但可能安全些)(下面說的都是在同一個盤符下操作,剪切文件,不同的盤之間剪切文件較慢,無提升)用movefile干剪切的事。也是先復制過去再把原來的刪了,這樣做只有一個好處,安全——中途被打斷的話源文件還在,但是遇上稍微大一點的文件效率實在太低。
clear all clc folder_name=uigetdir; % 手動打開要修改名稱的文件夾的上一層文件夾 folder=dir(folder_name); oldname=cell(length(folder)-2,1); for ii=3:length(folder) oldname{ii-2}=folder(ii).name; end % 提取出要修改文件夾的名稱 newname=cell(length(oldname),1); for ii=1:length(oldname) a=oldname{ii}; newname{ii}=a(2:end); % 新的文件夾名稱 movefile([folder_name '\' oldname{ii}],[folder_name '\' newname{ii}]) % 利用movefile函數進行修改 end
file = dir('*.bmp'); len = length(file); for i = 1 : len oldname = file(i).name; newname = strcat('RH_', oldname); % '!'的意思是調用系統函數,32是ASCII碼值,表示空格 eval(['!rename' 32 oldname 32 newname]); end
首先用dir函數獲得工作目錄下所有bmp文件信息,返回的file是一個結構體,里面包含了文件名、修改時間等信息,我們用的就是第一個域名字name,接着獲得bmp文件的個數,然后就是一個循環,用strcat函數將“RH_”與原文件名連接起來,然后重點就是這個eval函數的用法,查看eval函數的幫助可以知道,這個函數實際上就是執行將括號里表達式中的matlab代碼(eval(EXPRESSION) evaluates the MATLAB code in the string EXPRESSION),“!”的意思是調用Windows系統函數(Linux下好像是將rename改為system),比如這里的rename函數,實際上eval括號里的意思就是這樣,只不過是調用的系統函數,32是ASCII碼,表示空格,你也可以使用逗號代替
clc; clear all; path='C:\\Users\\ranji\\Desktop\\hello\\'; file = dir(strcat(path,'*.txt')); len = length(file); for i = 1 : len oldname = file(i).name; newname = strcat('RH_', num2str(i)); % '!'的意思是調用系統函數,32是ASCII碼值,表示空格 %eval(['!rename' 32 oldname 32 newname]); eval (['!rename', oldname, newname]); end %未成功
Matlab如何創建文件夾
new_folder = 'C:/test'; % new_folder 保存要創建的文件夾,是絕對路徑+文件夾名稱
mkdir(new_folder); % mkdir()函數創建文件夾;這里一定記得 new_folder = 'C:/test'; 中是斜杠‘/’,而不是反斜杠。否則會報錯。
我們再看一個例子: 在top_folder下面創建一個resize文件夾
top_folder = 'C:/test'; % 第一層文件夾名稱
mkdir(top_folder); % 創建第一層文件夾
second_folder = sprintf('%s/%s', top_folder, 'resize'); % 構造第二層文件夾名稱
mkdir(second_folder); % 創建第二層文件夾
% 之后我們可以看到在 C:/test 文件夾下,多了一個 resize 文件夾。關於sprintf()函數的用法看下一章介紹。
% 注意以上代碼一行行可拷貝到命令行執行,后者簡歷.m文件后執行
new_folder='C:/Users/ranji/Desktop/hello'; mkdir(new_folder); send_folder=strcat(new_folder,'\','world'); mkdir(send_folder);
實際測試應用:
%%%%%%%%%%%%%%批量修改文件夾名稱 % close all;clear all;clc; % path='G:\100萬采樣\敦南CIS第四套\value-5\version-4\direction-0\'; %修改一級文件夾名稱 % fileDIR=dir(path); %獲取路徑信息 %第0層文件夾direction % filenum=length(fileDIR); %該文件夾下的子文件夾個數,從3開始 % for p=3:filenum % filename=fileDIR(p).name; %第p個子文件夾的文件夾名 % path1=strcat(path,filename,'\'); % fileDIR1=dir(strcat(path1,'*')); %第一層文件夾1-50 % filenum1=length(fileDIR1); % for q=3:filenum1 % filename1=fileDIR1(q).name; % path2=strcat(path1,filename1,'\'); % DIR=dir(strcat(path2,'*.bmp')); %獲取該子文件夾中所有bmp格式的圖像 % len=length(DIR); % % cd(path2); % if len>0 % for i=0:2:len-1 % name1=DIR(i+1).name; % name2=DIR(i+2).name; % movefile(name1,strcat(num2str(i/2),'_down.bmp')); % movefile(name2,strcat(num2str(i/2),'_up.bmp')); % end % end % end % end % clear all % clc % %folder_name=uigetdir; % folder_name='G:\100萬采樣\敦南CIS第四套\value-5\version-4\direction-0\'; % % 手動打開要修改名稱的文件夾的上一層文件夾 % folder=dir(folder_name); % oldname=cell(length(folder)-2,1); % for ii=3:length(folder) % oldname{ii-2}=folder(ii).name; % end % % % 提取出要修改文件夾的名稱 % newname=cell(length(oldname),1); % for ii=1:length(oldname) % a=oldname{ii}; % %newname{ii}=a(2:end); % % 新的文件夾名稱 % movefile([folder_name '\' oldname{ii}],[folder_name '\' num2str(ii)]) % % 利用movefile函數進行修改 % end %重命名文件夾名稱 clear all clc close all; folder_name='G:\100萬采樣\5元采樣20000張\'; fileDir=dir(folder_name); folderNum=length(fileDir); %第一級目錄 direction for p=3:folderNum fileName=fileDir(p).name; path1=strcat(folder_name,fileName,'\'); fileDIR1=dir(strcat(path1,'*')); for ii=3:length(fileDIR1) movefile([path1 '\' fileDIR1(ii).name],[path1 '\' num2str(ii-2)]) end end