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