news 2026/6/9 23:51:45

Matlab批量修改文件夹的名称

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Matlab批量修改文件夹的名称

一、简介

因为工程需要,现在需要对文件夹的名称进行批量修改。原本的文件夹名称是从随机数字开始排序的,如图所示:

现在需要将其改为从1开始排序。
在这个过程中出现了一些问题,在此记录一下。
参考链接:
link1
link2

二、解决过程

修改文件夹名称的代码参考link1。代码如下:

close all;clear all;folder_path='E:\DataSet\。。。\Images';% 手动打开要修改名称的文件夹的上一层文件夹folder=dir(folder_path);oldname=cell(length(folder)-2,1);forii=3:length(folder)oldname{ii-2}=folder(ii).name;endsort_nat_name=sort_nat({oldname});% 提取出要修改文件夹的名称newname=cell(length(oldname),1);forii=1:length(oldname)a=ii;newname{ii}=num2str(a);ifnewname{ii}==oldname{ii}continueend% 新的文件夹名称movefile([folder_path'\'oldname{ii}],[folder_path'\'newname{ii}])% 利用movefile函数进行修改end

三、问题记录

(一)问题1

问题描述:使用dir函数读取的文件名顺序与实际顺序不符
文件夹的名称显然是按照文件顺序来修改的,读取顺序与实际顺序不符则修改的也会出问题。
实际文件顺序如图所示:

读取后的名称顺序为:

原因在于dir读取的文件顺序不是按照十进制排序的。
解决方案:
参考link2,我们中间添加一个 sort_nat() 函数,对files.name 进行排序。
sort_nat() 函数如下所示:

%sort_nat具体内容function[cs,index]=sort_nat(c,mode)%sort_nat: Natural order sort of cell array of strings.% usage: [S,INDEX] = sort_nat(C)%% where,% C is a cell array (vector) of strings to be sorted.% S is C, sorted in natural order.% INDEX is the sort order such that S = C(INDEX);%% Natural order sorting sorts strings containing digits in a way such that% the numerical value of the digits is taken into account. It is% especially useful for sorting file names containing index numbers with% different numbers of digits. Often, people will use leading zeros to get% the right sort order, but with this function you don't have to do that.% For example, if C = {'file1.txt','file2.txt','file10.txt'}, a normal sort% will give you%% {'file1.txt' 'file10.txt' 'file2.txt'}%% whereas, sort_nat will give you%% {'file1.txt' 'file2.txt' 'file10.txt'}%% See also: sort% Version: 1.4, 22 January 2011% Author: Douglas M. Schwarz% Email: dmschwarz=ieee*org, dmschwarz=urgrad*rochester*edu% Real_email = regexprep(Email,{'=','*'},{'@','.'})% Set default value for mode if necessary.ifnargin<2mode='ascend';end% Make sure mode is either 'ascend' or 'descend'.modes=strcmpi(mode,{'ascend','descend'});is_descend=modes(2);if~any(modes)error('sort_nat:sortDirection',...'sorting direction must be ''ascend'' or ''descend''.')end% Replace runs of digits with '0'.c2=regexprep(c,'\d+','0');% Compute char version of c2 and locations of zeros.s1=char(c2);z=s1=='0';% Extract the runs of digits and their start and end indices.[digruns,first,last]=regexp(c,'\d+','match','start','end');% Create matrix of numerical values of runs of digits and a matrix of the% number of digits in each run.num_str=length(c);max_len=size(s1,2);num_val=NaN(num_str,max_len);num_dig=NaN(num_str,max_len);fori=1:num_strnum_val(i,z(i,:))=sscanf(sprintf('%s ',digruns{i}{:}),'%f');num_dig(i,z(i,:))=last{i}-first{i}+1;end% Find columns that have at least one non-NaN. Make sure activecols is a% 1-by-n vector even if n = 0.activecols=reshape(find(~all(isnan(num_val))),1,[]);n=length(activecols);% Compute which columns in the composite matrix get the numbers.numcols=activecols+(1:2:2*n);% Compute which columns in the composite matrix get the number of digits.ndigcols=numcols+1;% Compute which columns in the composite matrix get chars.charcols=true(1,max_len+2*n);charcols(numcols)=false;charcols(ndigcols)=false;% Create and fill composite matrix, comp.comp=zeros(num_str,max_len+2*n);comp(:,charcols)=double(s1);comp(:,numcols)=num_val(:,activecols);comp(:,ndigcols)=num_dig(:,activecols);% Sort rows of composite matrix and use index to sort c in ascending or% descending order, depending on mode.[unused,index]=sortrows(comp);ifis_descend index=index(end:-1:1);endindex=reshape(index,size(c));cs=c(index);

(二)问题2

问题描述:

错误使用 regexprep 所有元胞都必须为字符行向量。

这里我读取的 oldname 为列向量,因此在运行 sort_nat() 函数时出现了错误。

解决方案:
这里我先将 oldname 转置为行向量,排序完成后再将其变为列向量。

四、整体代码

主函数整体代码如下:

close all;clear all;folder_path='E:\DataSet\。。。\Images';% 手动打开要修改名称的文件夹的上一层文件夹folder=dir(folder_path);oldname0=cell(length(folder)-2,1);forii=3:length(folder)oldname0{ii-2}=folder(ii).name;endoldname_t=oldname0';sort_nat_name=sort_nat(oldname_t);oldname=sort_nat_name';% 提取出要修改文件夹的名称newname=cell(length(oldname),1);forii=1:length(oldname)a=ii;newname{ii}=num2str(a);ifnewname{ii}==oldname{ii}continueend% 新的文件夹名称movefile([folder_path'\'oldname{ii}],[folder_path'\'newname{ii}])% 利用movefile函数进行修改end
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 21:09:47

.npy格式怎么打开?CAM++特征向量加载方法说明

.npy格式怎么打开&#xff1f;CAM特征向量加载方法说明 你刚用CAM系统提取了一堆.npy文件&#xff0c;双击却打不开——Windows提示“无法找到应用程序”&#xff0c;Mac上预览一片空白&#xff0c;Python报错说路径不对……别急&#xff0c;这不是你的问题。.npy根本就不是给普…

作者头像 李华
网站建设 2026/6/9 16:07:00

阿里通义万相Z-Image实战:768×768高清图像生成保姆级指南

阿里通义万相Z-Image实战&#xff1a;768768高清图像生成保姆级指南 你是否试过在本地或云上部署一个文生图模型&#xff0c;刚点下“生成”&#xff0c;页面就卡住、报错OOM&#xff0c;或者等了半分钟只看到一张模糊的512512小图&#xff1f;别再反复重装环境、调试CUDA版本…

作者头像 李华
网站建设 2026/6/9 17:26:27

AcousticSense AI自主部署价值:规避SaaS厂商锁定,保障音频数据不出域

AcousticSense AI自主部署价值&#xff1a;规避SaaS厂商锁定&#xff0c;保障音频数据不出域 1. 为什么音乐人、策展人和AI研究者都在悄悄部署自己的音频解析工作站&#xff1f; 你有没有遇到过这样的情况&#xff1a;上传一首歌到某个在线音频分析平台&#xff0c;几秒后收到…

作者头像 李华
网站建设 2026/6/9 17:23:37

RexUniNLU惊艳案例:中文文本分类零样本实现

RexUniNLU惊艳案例&#xff1a;中文文本分类零样本实现 1. 开篇即见真章&#xff1a;不用训练&#xff0c;也能精准分类 你有没有遇到过这样的场景&#xff1f; 刚上线一个新业务模块&#xff0c;需要对用户反馈自动打标签——比如“物流问题”“商品破损”“客服态度差”。可…

作者头像 李华
网站建设 2026/6/9 7:54:50

上位机是什么意思?通俗解释其与下位机的关系

以下是对您提供的博文内容进行 深度润色与结构优化后的版本 。整体风格更贴近一位资深工业自动化工程师在技术社区中的自然分享:逻辑清晰、语言精炼、有实战温度,同时彻底去除AI生成痕迹(如模板化句式、空洞套话),强化专业性与可读性的平衡,并融入真实工程语境下的思考…

作者头像 李华
网站建设 2026/6/9 17:29:00

Youtu-2B实战案例:智能客服系统3天上线详细步骤

Youtu-2B实战案例&#xff1a;智能客服系统3天上线详细步骤 1. 为什么选Youtu-2B做智能客服&#xff1f;——轻量不等于将就 很多团队在搭建智能客服时&#xff0c;第一反应是找参数量大的模型&#xff1a;7B、13B甚至更大。但现实很骨感——服务器显存有限、响应速度要求高、…

作者头像 李华