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

randomly move files from a folder to another folder?

我正在尝试移动我的文件并创建一个新文件夹以将这些文件放在那里。 我的 MATLAB 目录中的图像文件夹中有许多 .png 文件。我想随机选择其中的 80% 并将它们移动到我的 matlab 目录中另一个名为 training 文件夹的文件夹中。这是我的代码,它不起作用。它找不到要移动的文件:(

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. 像 Flynn 评论一样,对 mkdir training 的调用只需要进行一次,因此您可以将其放在循环之前。
  2. 当涉及到 for 循环时,您可能错误地考虑了变量 image_order

    调用 image_order = randperm(num_files); 从 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
    

接下来您可能 运行 进入其他问题,具体取决于文件夹培训所在的位置以及您 运行 从哪里开始编写脚本,但这应该更接近您要获得的内容,并至少为您找到文件。