随机将文件从一个文件夹移动到另一个文件夹?

问题描述:

我想移动我的文件并创建一个新文件夹来将这些文件放在那里。 我在我的MATLAB目录中的图像文件夹中有许多.png文件。我想随机选择其中的80%,并将它们移动到另一个名为training folder的文件夹中,位于我的matlab目录中。下面是我的代码,这是行不通的。它不能找到该文件移动:(随机将文件从一个文件夹移动到另一个文件夹?

data_add = fullfile(cd,'images'); 
all_files = dir(data_add); 
all_files = all_files(3:end); 
num_files = numel(all_files); 
image_order = randperm(num_files); 
for k = 1:(image_order)*0.8 
    file_name = all_files(k).name; 
    file_add = all_files(k).folder; 
    file_to_move = fullfile('path_to_images\images',file_name); 
    mkdir training 
    movefile file_to_move training 

end 
+1

你不应该有mkdir内循环。什么是file_add用于? – Flynn

+0

是的,我完全忘了那个mkdir。我只是写了它给我要移动的文件的路径,但后来我决定使用fullfile()我也应该这样评论:S – user1603454

一对夫妇的问题在这里:

  1. 像弗林评论,调用mkdir training只需要进行一次,所以您可以在循环之前放置。
  2. 你可能会考虑变量image_order错误,当涉及到你的for循环。

    呼叫image_order = randperm(num_files);产生随机排序索引数组来回m 1:num_files,这很有帮助。然而,表达式(image_order)*0.8实际上是将这些索引中的每一个乘以0.8,使得它们不再有效,整数索引(除少数之外,如8将变为1)。

    我想你正试图和想要做的是这样的:

    mkdir('training'); 
    for k = 1:num_files*0.8 
        randK = image_order(k); 
        file_name = all_files(randK).name; 
        file_to_move = fullfile(data_add,file_name); 
    
        movefile(file_to_move, 'training'); % using function style 
    end 
    

您可能会遇到其他问题下一个不同的地方文件夹训练所在和你在哪里运行脚本,但这应该更接近你要得到的东西,并且至少为你找到文件。

+0

非常感谢。我试过这段代码,我得到错误“using movefile 没有找到匹配的文件”。但是file_to_move有地址和文件名。所以我不知道如何将这些文件复制到培训文件夹? – user1603454

+0

也许你使用了我给出的路径名称作为例子?我使用你使用的路径的变量名称('data_add',我相信)编辑了这篇文章。 – informaton

+0

不,我使用的数据地址,但仍然说不能找到该文件! – user1603454