matlab 重命名文件和文件夹

时间:2024-02-29 22:55:59

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 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