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