go 调用其他文件函数_matlab | 调用操作系统函数批量修改文件名

5678d526f870f6e8781642178176b745.gif点击上方蓝字,记得关注我!

如题,当同一文件夹下有大量的文件,而你却被告知去逐一修改文件名的时候,或许你能够凭借多年单身的手速展现一波骚操作;

这种办法可以用,但是没必要,你完全可以摸鱼到下班前3分钟,然后1分钟修改文件名,一分钟关闭软件和电脑,最后一分钟收拾东西走人。


1.发现问题

我们先来看看问题是如何 产生的:

e75a1d85549854a6e11960ba3993f6d5.png

图1

上图是一系列的‘*.PDF’文件,现在要对它进行重命名,要求在原名称上按照修改时间(或者名称或者文件大小)加上序号‘(1)、(2)...(n)’。


2.解决问题

那用matlab解决这个问题的思路呢,首先你得把这个文件夹下的所有pdf文件读取出来,参考函数“dir”,dir函数获得指定文件夹下的所有子文件夹和文件,并存放在在一种为文件结构体数组中。

dir函数可以有三种方式为:

**dir(’.’)**列出当前目录下所有子文件夹和文件

**dir(‘G:\Matlab’)**列出指定目录下所有子文件夹和文件

**dir(’*.m’)**列出当前目录下符合正则表达式的文件夹和文件

然后呢,再按照要求的命名规则进行重新命名,此过程中需要调用windows操作系统函数rename。

!!!特别注意,此处的'*.m'程序文件需要和要修改的文件处在同一工作目录。


3.matlab函数基础与参考代码

饭要一口一口吃,解决问题呢,我们也要一步一步的来。首先我们先尝试修改一下图1中的'*.jpg'文件的文件名。

(1)修改单个文件名

%%

%调试修改单个文件文件名

clc;clear;

path='我是一个文件夹路径';

files=dir([path '*.jpg']);

oldname=files.name;

newname='聪明的我调试成功了.jpg';

eval(['!rename' 32 oldname 32 newname]);

%%


那么我们来看看运行结果:

7f94febe9997022c602efa8f9a8334b3.png

图2

我们可以看到,它的文件名已经改成了“聪明的我调试成功了”。那我们开始下一步的工作,批量修改该文件夹下的pdf文件名。

(2)批量修改文件名

matlab函数基础讲解

在搞事情之前,我们得先来了解一下dir运行之后的结构体数组:


fde531b3bd39871ce868e960558cc4a0.png


        name    -- filename        date    -- modification date        bytes   -- number of bytes allocated to the file        isdir   -- 1 if name is a directory and 0 if not        datenum -- modification date as a MATLAB serial date number
分别为文件名,修改日期,大小,是否为目录,Matlab特定的修改日期

有了这个我们操作的思路就有了,如果按照文件创建时间进行排序,我们可以将文件的时间用sort函数进行排序,并保留排序之前的索引值(下标),然后再进行命名,perfect! 28e800ae4e02ef16ffa7840f06019c9e.png


[files_date,index]=sort(X,DIM,MODE)

files_date为排序后的日期;

index为排序前的索引即下标 

参数DIM表示对哪一个维数进行排序,例如当X是一个二维矩阵,当DIM=1时表示对X的每一列进行排序,当DIM=2时表示对X的每一行进行排序。

参数MODE表示按哪一种模式进行排序,当MODE=‘ASCEND’的时进行升序排序,当MODE=‘DESCEND’时,进行降序排序,默认为升序排列。


参考代码

%%

%调用windows操作系统函数rename批量修改文件名

tic

clc;clear;;

path='我是一个路径';

files=dir([path '*.PDF']);

[files_date,index_date]=sort({files.date});

for i=1:length(files)

    oldname=files(index_date(i)).name;

    newname=strcat('(',num2str(i),')',oldname);

    eval(['!rename' 32 oldname 32 newname]);

end

toc

%%

代码中的tic-toc用来记录运行时间,从下图看也就是整个处理过程花费了7.235535 秒。

2e02a987a594887aed52ea5576555e39.png

图3

一起来看看运行结果

031c840c6d646e597b27ea1591f4d0e5.png

图4

 c48436939fe31478afb90d4f1a316f08.png

成功搞定


【好啦,以上就是本期全部内容】

想要代码'*.m'文件以及文件练习的可以公众号后台回复[批量修改文件名]即可自动获取。

但是怎么样按照文件大小或者文件名的循序来顺序修改呢,感兴趣的可以自己试一试,欢迎在留言区讨论呀。


快戳我,一起吐槽一下小锤子


  写的这么认真,都不关注一下吗  

b1b18bb15e601075c9fb51847e567b76.png 1d40420d579d0cd45cb57aad402bbf2a.png微信搜一搜 b70394c1343107425bab712fa5b542e7.png不正经的小锤子
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值