精华内容
下载资源
问答
  • 批量复制文件-matlab实现

    千次阅读 2015-03-22 14:16:55
    虽然各种操作系统(Linux,Mac)都提供了一堆的批量复制文件的指令。但是对我们的需求,还是无能为力。因此,我们就简单地用matlab来实现一下。 函数定义 这个函数有四个参数: function flag = csvcp(src_file_...

    我们的需求是:从文件系统中复制一堆文件到另一个地方,这堆文件的文件名写在.csv文件里面。虽然各种操作系统(Linux,Mac)都提供了一堆的批量复制文件的指令。但是对我们的需求,还是无能为力。因此,我们就简单地用matlab来实现一下。

    函数定义

    这个函数有四个参数:

    function flag = csvcp(src_file_dir,dst_file_dir,csv_filename,jump_first_line)
    
    src_file_dir 待移动文件夹的路径
    dst_file_dir 目标文件夹路径
    csv_filename csv文件的完整路径
    jump_first_line boolean型,默认为true,表示是否跳过CSV文件第一行的内容,默认跳过。

    参数处理

    作为一头有着强烈处女座情节的牛,参数处理肯定得写好。直接上代码吧。

    if nargin<2||nargin>4
            disp('Argument Count incorrect! ');
            flag=false;
            return;
        end
        if nargin==2
            disp('Using default csv file name filelist.csv ');
            disp('Jumping first line in the csv file');
            csv_filename='filelist.csv';
            jump_first_line=true;
        end
    
        if exist(dst_file_dir,'dir')~=7
            disp(['Destinate file folder ',dst_file_dir,' not exist,CREATING']);
            mkdir(dst_file_dir);
        end
    
         if exist(csv_filename,'file')==0
            csv_filename=[src_file_dir,'/../',csv_filename];
            if exist(csv_filename,'file')==0
                disp('Csv file not exist');
                flag=false;
                return;
            else
                disp('Using csv file near the source image folder!');
            end
         end

    读取csv文件

    fid=fopen(csv_filename,'r');
        [filelist]=textscan(fid,'%s%*[^\n]');
        filelist=filelist{1,1};
    
        if jump_first_line==true
            startindex=2;
        else
            startindex=1;
        end

    批量移动文件

    if numel(filelist)>0
            for i=startindex:numel(filelist)
                copyfile([src_file_dir,'/',filelist{i}],[dst_file_dir,'/',filelist{i}]);
                disp(['copying file: ',filelist{i}]);
            end
            flag=true;
        else
            disp('csv file content error! ');
            flag=false;
            return;
        end
    
        disp('Done!');

    完整代码

    最近学着使用github托管代码。以上的代码托管在:
    https://github.com/ColdZoo/csvcp
    你都看到这里了,给个星星吧~

    测试与使用

    使用起来很简单,需要准备的东东是。

    1. csv文件,保存你要复制的文件名称。
    2. csvcp的代码,从github上clone下来最新版的即可
    3. 你要复制的文件夹。

      复制的命令是(matlab下):
      csvcp(‘src_dir’,’dst_dir’,’filelist.csv’,true);

    其中第三第四个参数可以省略。目标文件夹不存在的话会自动生成。当然源文件夹是必须得存在的(否则你复制什么)。

    关于csv文件的生成

    csv文件是一个你需要复制文件的列表。
    应该类似于下面这种形式:

    Copy File List
    1.jpg
    2.jpg
    3.mkv
    4.jpg

    这种CSV文件只有一列,第一行是列名,应该被省略(第四个参数)。
    在Mac和Linux下可以简单地用SHELL脚本自动生成。

    例如,你要复制的文件都在文件夹img里面。
    那么做完下列这些命令,filelist.csv文件会自动生成

    White-Knight:Desktop zhengcai$ cd img
    White-Knight:img zhengcai$ ls
    SinaWeibo.png                  map-bg.jpg                     qq@2x.png
    TencentWeibo.png               mockedup-news.png              ribbon-apple.png
    examples                       mooning.png                    trash.png
    facebook.png                   neg.png                        twitter.png
    filelist.csv                   neutral.png                    wechat.png
    glyphicons-halflings-white.png path.png                       white_wall_hash.png
    glyphicons-halflings.png       pos.png
    instagram.png                  qq.png
    White-Knight:img zhengcai$ ls >> ../filelist.csv
    
    展开全文
  • % 可以读取的文件中,若有列数不相同的,则补 nan% 数据文件中只能是数字% *.xls 文件只能是英文或数字命名% 批量读数据的程序 注,只能读取 *.txt类文件,且文件必须有后缀名% [read_data_A]=batch_read_file('*.txt')%...

    function [read_data]=batch_read_file(file_type);

    % <>

    %   可以读取的文件中,若有列数不相同的,则补 nan

    %   数据文件中只能是数字

    %   *.xls 文件只能是英文或数字命名

    % 批量读数据的程序 注,只能读取 *.txt类文件,且文件必须有后缀名

    % [read_data_A]=batch_read_file('*.txt')

    % [read_data_A]=batch_read_file('*.xls')

    % file_type为文件的格式

    % 返回值 read_data 为元胞数值,保存谋取到的数据

    % 对 xls 文件的说明:

    % xls 文件以文件名升序排序

    % xls 文件只能容许一个工作表,若有多个,则读取的为名字值最大的一个工作表

    % file_type='*.txt'类 or file_type='*.xls';

    %   示例:在数据文件中有如下内容 1.txt

    %   1 2 3.345 1234.5422 12

    %   1.2222 2.3333 3.4444

    %   1 2 3 4 5 6 7 8 9

    %   读出的数据是一个 (3,9)的矩阵 空缺的部分为 nan

    file_read=dir(file_type);% 获得要读取的文件列表

    %%%%%%%%%%%%%-+-XLS XLS XLS XLS XLS-+-%%%%%%%%%

    % 在此段读取 *.xls 类文件

    if strcmp(file_type,'*.xls')

    for i=1:length(file_read)

    file_name{i}=file_read(i).name;% 获取文件名的列表

    % 开始准备向从 xls 文件中读取数据

    read_data{i}=xlsread(file_name{i});

    end

    else

    %%%%%%%%%%%%%-+-TXT TXT TXT TXT TXT-+-%%%%%%%%%

    % 在此段读取 *.txt 类文件

    for i=1:length(file_read)

    file_name{i}=file_read(i).name;

    fid=fopen(file_name{i},'r');

    % 开始准备向从文件中读取数据

    k=1;

    while ~feof(fid)

    % 这儿用fgetl似乎也没有错

    temp=fgets(fid);

    length_temp_data(k)=length(str2num(temp));% 求长度

    temp_read_data{i}{k}=str2num(temp);%   写

    %%%%%%%%

    k=k+1;

    end

    %%-----

    max_row=max(length_temp_data);% 求最大的长度,以确定补 nan 的个数

    %%%%%%

    for j=1:k-1

    len=length(temp_read_data{i}{j});

    if len

    temp_read_data{i}{j}(len:max_row)=nan;

    end

    read_data{i}(j,:)=temp_read_data{i}{j};

    end

    fclose(fid);

    end

    end

    展开全文
  • (前面写过一次bat命令法,这个应该也算一次改进,程序的初衷是想将Smartsolo导出的文件名批量修改为以炮点桩号为文件名)2、如何利用MATLAB选择性批量复制/剪切文件?(程序的初衷是读取激发时间的时候需要从所有检...

    今天解决的问题

    1、如何利用MATLAB批量修改文件名?

    (前面写过一次bat命令法,这个应该也算一次改进,程序的初衷是想将Smartsolo导出的文件名批量修改为以炮点桩号为文件名)

    2、如何利用MATLAB选择性批量复制/剪切文件?

    (程序的初衷是读取激发时间的时候需要从所有检波点数据中把激发点的文件筛选出来)

    两个程序都不受限于文件类型。

    程序都是为了解决平时工作中遇到的特定问题,具有一定的针对性。

    比如目标文件名都是数字,具有一定特殊性

    函数具体使用方法在MATLAB中用help+函数名等方法都可以查看,就不再放函数使用链接。

    1、利用MATLAB批量修改文件名—CCL_filerename()

    %这个程序适用于所有类型文件名的批量修改,但运行速度比bat命令慢

    代码:

    function [file_num]=CCL_filerename(file_begin,file_int,path_in,data_suffix)

    %file_begin为起始文件名

    %file_int为文件名之间的间隔

    %path_in为文件所在路径

    %data_suffix为文件后缀名,也就是数据类型

    %file_num为文件数量的返回值

    cd(path_in);   %进入文件所在的文件路径

    file_all=dir(['*',data_suffix]);   %读取当前文件夹下所有文件名,返回的为结构体,包含文件名,修改时间,大小等信息

    file_num=length(file_all);  %文件数量

    for i=1:file_num

        ori_name=file_all(i).name;  %原始文件名

        file_name=file_begin+file_int*(i-1);   %目标文件名

        new_name=[num2str(file_name),data_suffix];  %目标文件名加后缀

        eval(['!rename' ' ' ori_name ' ' new_name]);  %修改文件名

    end

    end

    程序运行:

    d3467c6a0df97dd399729c2468845ff8.png

    原始数据:

    6c5a2099f7a9ad8f2ac81880845afd47.png

    文件名修改后数据:

    a7d998054cae906e267c781bfe62a264.png

    2、利用MATLAB选择性批量复制/剪切文件—CCL_fileselect()

    代码:

    function [copy_num]=CCL_fileselect(file_begin,file_int,data_suffix,path_in,path_out)

    %file_begin为从第几个文件开始

    %file_int为文件之间的间隔

    %data_suffix为文件后缀名

    %path_in为当前文件所在路径

    %path_out为目标文件路径

    %copy_num为复制的文件个数的返回值

    %注:目标文件路径需在当前路径下,即目标文件夹应为当前文件夹的子文件夹

    cd(path_in);    %进入文件所在的文件路径

    file_all=dir(['*',data_suffix]);   %读取当前文件夹下所有文件名,返回的为结构体,包含文件名,修改时间,大小等信息

    file_num=length(file_all);  %文件数量

    copy_num=0;

    for i=file_begin:file_int:file_num

        copyfile(file_all(i).name,path_out);    %复制文件至目标文件路径

        %movefile(file_all(i).name,path_out);    %剪切文件至目标文件路径

        copy_num=copy_num+1;  %累计复制的文件个数

    end

    end

    如:激发点从1000开始,间距为4,提取激发点文件

    程序运行:

    b44145b2d82f6920e7a174c88ea1a7b6.png

    当前文件路径:

    aa2c7375a53e4ec3f7b2c5b1521271b5.png

    目标文件路径程序运行结果:

    182ba30341fd9474aeff35b86822b366.png

    好久没登账号今天突然看见多了两个粉丝,感谢你们的关注。

    每天解决一个小问题。

    展开全文
  • (前面写过一次bat命令法,这个应该也算一次改进,程序的初衷是想将Smartsolo导出的文件名批量修改为以炮点桩号为文件名)2、如何利用MATLAB选择性批量复制/剪切文件?(程序的初衷是读取激发时间的时候需要从所有检...

    今天解决的问题

    1、如何利用MATLAB批量修改文件名?

    (前面写过一次bat命令法,这个应该也算一次改进,程序的初衷是想将Smartsolo导出的文件名批量修改为以炮点桩号为文件名)

    2、如何利用MATLAB选择性批量复制/剪切文件?

    (程序的初衷是读取激发时间的时候需要从所有检波点数据中把激发点的文件筛选出来)

    两个程序都不受限于文件类型。

    程序都是为了解决平时工作中遇到的特定问题,具有一定的针对性。

    比如目标文件名都是数字,具有一定特殊性

    函数具体使用方法在MATLAB中用help+函数名等方法都可以查看,就不再放函数使用链接。

    1、利用MATLAB批量修改文件名—CCL_filerename()

    %这个程序适用于所有类型文件名的批量修改,但运行速度比bat命令慢

    代码:

    function [file_num]=CCL_filerename(file_begin,file_int,path_in,data_suffix)

    %file_begin为起始文件名

    %file_int为文件名之间的间隔

    %path_in为文件所在路径

    %data_suffix为文件后缀名,也就是数据类型

    %file_num为文件数量的返回值

    cd(path_in);   %进入文件所在的文件路径

    file_all=dir(['*',data_suffix]);   %读取当前文件夹下所有文件名,返回的为结构体,包含文件名,修改时间,大小等信息

    file_num=length(file_all);  %文件数量

    for i=1:file_num

        ori_name=file_all(i).name;  %原始文件名

        file_name=file_begin+file_int*(i-1);   %目标文件名

        new_name=[num2str(file_name),data_suffix];  %目标文件名加后缀

        eval(['!rename' ' ' ori_name ' ' new_name]);  %修改文件名

    end

    end

    程序运行:

    bfbc64e5031d0f69049f50e0da6b50f8.png

    原始数据:

    c209af8e5a92d9d7ce568af1cd573834.png

    文件名修改后数据:

    45eb3538667ca83951b89a43e96a559b.png

    2、利用MATLAB选择性批量复制/剪切文件—CCL_fileselect()

    代码:

    function [copy_num]=CCL_fileselect(file_begin,file_int,data_suffix,path_in,path_out)

    %file_begin为从第几个文件开始

    %file_int为文件之间的间隔

    %data_suffix为文件后缀名

    %path_in为当前文件所在路径

    %path_out为目标文件路径

    %copy_num为复制的文件个数的返回值

    %注:目标文件路径需在当前路径下,即目标文件夹应为当前文件夹的子文件夹

    cd(path_in);    %进入文件所在的文件路径

    file_all=dir(['*',data_suffix]);   %读取当前文件夹下所有文件名,返回的为结构体,包含文件名,修改时间,大小等信息

    file_num=length(file_all);  %文件数量

    copy_num=0;

    for i=file_begin:file_int:file_num

        copyfile(file_all(i).name,path_out);    %复制文件至目标文件路径

        %movefile(file_all(i).name,path_out);    %剪切文件至目标文件路径

        copy_num=copy_num+1;  %累计复制的文件个数

    end

    end

    如:激发点从1000开始,间距为4,提取激发点文件

    程序运行:

    58edebc9ffb8dc35682a2eba594760c9.png

    当前文件路径:

    8358bebdc22136bb2a4b486a52035ab7.png

    目标文件路径程序运行结果:

    15517d6968633464070491f32d37e915.png

    好久没登账号今天突然看见多了两个粉丝,感谢你们的关注。

    每天解决一个小问题。

    展开全文
  • 文件批量复制、剪切和修改文件名批量复制新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...
  • 使用matlab批量下载网站上的文件-MatlabUrlDownloadToFile.m 前几天美国数学建模成绩出了,我们按照网址下载了自己的证书,另外想看看学校今年的获奖情况,由于学校的参赛队伍数众多,一个一个下载证书再统计显得...
  • 在需要重命名的文件所在文件夹中新建一个rename.m文件复制以下代码进去: clear files = dir('*.jpg'); len=length(files); for i=1:len oldname=['"',files(i).name,'"']; newname=['frame',num2str(i),'.jpg...
  • MATLAB批量处理问题主要包括在一个函数里读取多个文件,以及输出多个文件,若是一个个的写,即使复制粘贴也会显得繁琐,更不提让本来挺长的代码变得更长了,不简洁,以下介绍一下近日外挖掘的几种批量处理读写问题...
  • 文件批量复制、剪切和修改文件名电脑环境文件批量复制文件批量剪切批量修改文件名批量修改文件名和复制(剪切)电脑环境MATLAB:2018aWindows:win10文件批量复制close all;clear all;clc;%目的文件目录DST_PATH_t = '...
  • 一般使用copy和xcopy命令。在文件和文件夹路径里面含有空格的时候,使用双引号。例如: copy matlab "D:/Program ...将bat文件所在的文件夹下的“matlab”文件夹中的全部文件复制到“D:/Program Files/MATLAB/R2006b
  • 函数 movefile 移动或重命名文件或文件夹 ...复制文件或文件夹 copyfile source destination 代码 tic bar = waitbar(0,"数据移动中...") for i=2016009:8:2016361 str = num2str(i); spath = ['D:\DA...
  • MATLAB编程技巧:批量查找文件复制至目标文件夹 平常我们在Windows电脑中查找某个文件夹下有多种类型的文件,一个一个的查找出来比较麻烦,因此,利用MATLAB编写一个小脚本,即可实现对特定类型文件的查找,并复制...
  • opencv 首先添加必要的头文件(用于批量处理): ...下载 下载后找到dirent.h文件复制到…(对应你的VS目录)…\VC\include\ 接下来,批量读取并处理图片: DIR *dp; struct dirent *dirp; vect
  • Matlab 作为一个数据处理软件,内置了很多很强大的工具箱...由于matlab是可以读取及编辑电脑中的Excel文件的,这里分享一段批量处理Excel文件,汇总到一个文件中去的小程序:clcclearticpath = 'C:\Users\liusq\Des...
  • 主文件夹下有200个子文件夹,每个子文件夹内有DWI和其对应的mask文件,现需要将所有的DWI数据单独存放在同一个文件夹内 MATLAB Code clc;clear all;close all; imgDataPath = 'C:\Users\Sweet\Desktop\labeled...
  • *对于文件名有规律可循且文件格式整齐统一的grd来说,一个一个复制粘贴太丧尽天良地浪费时间了! *虽然我好久没用Fortran,可能编程的时间比粘贴的时间长。。。。学习嘛~熟悉了就好了 *....别问我为什么没用matlab,...
  • 这样有几个好处,一是节省空间,二是在电脑中,对一个文件的处理速度要快于多个文件复制粘贴就是一个例子,很多人应该都是感受,明明所复制文件容量不大,只是数量很多,速度却比容量大一些,数量少的时候要慢。...
  • matlab 神经网络原理与实例精解 陈明著,留的是百度网盘,高清PDF,文件大于60MB,全书齐 第 1 篇 入门篇 第 1 章 神经网络概述( 教学视频:10 分钟)/2 1.1 人工神经网络简介/2 1.2 神经网络的特点及应用/3 1.2.1 ...
  • 同时打开被插入pdf和待插入pdf 这里打开matlab 和第3章 编程 打开预览窗口,Ctrl+A(或选定指定的页面) Ctrl+C复制 转到被插入的matlab文件的页面预览窗口,点击第m(由自己决定)页,粘贴即可完成插入.
  • 上一次学习深度学习中的生成式对抗网络,需要用到大量的...学习完了之后,发现自己复制出来的图片文件有N多张。想全部删除,直接"shift+delet",那速度真的是龟速啊。于是在网上搜索,如何快速批量删除大量文件。于是

空空如也

空空如也

1 2
收藏数 32
精华内容 12
关键字:

matlab批量复制文件

matlab 订阅