2

我想将文件从一个文件夹复制到另一个文件夹,但前提是文件名以字母“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
4

3 回答 3

0

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

其次,您的原始代码在 nses 循环的第 i 次迭代中创建了一个名为“dir”的变量。这将覆盖您接下来要调用的“dir”函数。

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

于 2014-07-25T17:40:01.320 回答
0

你可以试试这个循环:

for nses=1:4

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

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

end
于 2013-07-23T07:14:39.763 回答
0

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

您可以在 Matlab File Exchange 上查看它们:

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

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

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

这 ?带有“主题”的通配符匹配目录主题 1、2、3 和“文件夹?” 匹配文件夹 1、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 !
于 2017-07-15T19:17:59.803 回答