2

あるフォルダーから別のフォルダーにファイルをコピーしたいのですが、ファイル名が文字 'w' で始まる場合のみです。以下は、これまでに思いついたスクリプトですが、機能していません。スクリプトには 2 つのループがあります。これは、3 つのフォルダー (サブジェクト) にファイルがあり、これらのフォルダーのそれぞれに 4 つのサブフォルダーがあり、「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 に答える