在Matlab中根据文件名复制文件

时间:2013-07-23 07:04:40

标签: matlab file-io

我想将文件从一个文件夹复制到另一个文件夹,但前提是文件名以字母'w'开头。下面是我到目前为止提出的脚本,但它不起作用。脚本中有两个循环,因为三个文件夹(即主题)中有文件,这些文件夹中的每一个都有四个子文件夹,我想通过它们扫描“w *” - 文件。应将文件从“folderx”复制到“folderxnew”。

for n_subj = 1:3

   cwd_all = { '/data/subject1/';      '/data/subject2';      'data/subject3'; };

   cwd = cwd_all{n_subj};

   dirs{1}='folder1';
   dirs{2}='folder2';
   dirs{3}='folder3';
   dirs{4}='folder4';

   dirt{1}='folder1new';
   dirt{2}='folder2new';
   dirt{3}='folder3new';
   dirt{4}='folder4new';

   for nses=1:4

        dir = dirs{nses};

        files = dir('w*');

        copyfile(files, dirt{nses},'f');

    end

end

3 个答案:

答案 0 :(得分:0)

你可以尝试这个循环:

for nses=1:4

    files = dir([dirs{nses} '\w*']);

    for i =1:length(files)
        copyfile(files(i).name, dirt{nses},'f'); 
    end

end

答案 1 :(得分:0)

首先,尽量不要在循环中定义常量(尽管这与结果无关)。

其次,您的原始代码在nses循环的第i次迭代中创建一个名为“dir”的变量。这将覆盖您想要呼叫的“目录”功能。

最后,没有一个代码包含完整路径命名,这意味着当你调用“copyfile(files ...)”时,MATLAB会查看当前的工作目录。你需要传递cwd和dirs的正确连接( NSES)。

答案 2 :(得分:0)

我遇到过很多需要特定文件复制和重命名任务的情况。 所以我写了一个函数" easycopy" (和姐妹函数" easyrename")在matlab中提供了一种使用列表和通配符复制和重命名文件的便捷方式。

您可以在Matlab文件交换中查看它们:

[https://www.mathworks.com/matlabcentral/fileexchange/63417-easycopy][1]

[https://www.mathworks.com/matlabcentral/fileexchange/63586-easyrename][1]

这是在这种情况下的样子:

?通配符"主题"匹配目录subjec1,2,3和"文件夹?"匹配folder1,2,3,4。 然后目标表达式使用" ... subject?\ folder?new ..."创建文件夹... subject(1,2,3)\ folder(1,2,3,4)new ... 第一个来源"?"匹配第一个"?"在目的地表达式中,第二个"?"匹配第二个"?"等等。 " w * .txt"匹配所有" w"源文件,只需将它们复制到" w * .txt"目的地。

easycopy('c:\data\subject?\folder?\w*.txt','c:\data\subject?\folder?new\w*.txt')
COPYING FILES .....

Copying c:\data\subject1\folder1\wicked.txt
To c:\data\subject1\folder1new\wicked.txt

Copying c:\data\subject1\folder2\wicked.txt
To c:\data\subject1\folder2new\wicked.txt

Copying c:\data\subject1\folder3\wicked.txt
To c:\data\subject1\folder3new\wicked.txt

Copying c:\data\subject1\folder4\wicked.txt
To c:\data\subject1\folder4new\wicked.txt

Copying c:\data\subject2\folder1\wicked.txt
To c:\data\subject2\folder1new\wicked.txt

Copying c:\data\subject2\folder2\wicked.txt
To c:\data\subject2\folder2new\wicked.txt

Copying c:\data\subject2\folder3\wicked.txt
To c:\data\subject2\folder3new\wicked.txt

Copying c:\data\subject2\folder4\wicked.txt
To c:\data\subject2\folder4new\wicked.txt

Copying c:\data\subject3\folder1\wicked.txt
To c:\data\subject3\folder1new\wicked.txt

Copying c:\data\subject3\folder2\wicked.txt
To c:\data\subject3\folder2new\wicked.txt

Copying c:\data\subject3\folder3\wicked.txt
To c:\data\subject3\folder3new\wicked.txt

Copying c:\data\subject3\folder4\wicked.txt
To c:\data\subject3\folder4new\wicked.txt

DONE !