分享

matlab 重命名文件和文件夹

 钟山紫竹林 2019-12-19

1、查看文件存在  dir() 

若存在,返回文件信息
     dir(‘test.txt’) %查看当前目录是否存在test.txt文件
dir(‘C:\test.txt’) %查看指定目录是否存在test.txt文件
2、查看文件存在exist()
使用方法同dir
若不存在,返回0
若存在,则根据返回一个非0值,具体请help exist
3、文件重命名eval()
 matlab 中 strrep 函数可以更改文件扩展名
使用方法
eval(['!rename' , ‘,test.txt’ , ‘,test2.txt’]); 
注意后文件名前有个,(逗号)
网上有人说可以使用变量操作,eval(['!rename' , s, t]);
本人表示没有成功,不知道为什么
4、文件重命名movefile
可以使用变量,如:
movefile(s,t);

matlab中movefile和copyfile的重要用途

复制代码
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 allclcfolder_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 allclcclose all;folder_name='G:\100万采样\5元采样20000张\';fileDir=dir(folder_name); folderNum=length(fileDir); %第一级目录 directionfor 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)])    endend
复制代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多