Extract files with the same names in subfolders and save them into a new folder with a different name
    6 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Shourya
 am 14 Apr. 2022
  
    
    
    
    
    Kommentiert: Shourya
 am 20 Apr. 2022
            I have .png files with the same name stored in different folders. My goal is to rename and copy them into a new folder. The following code just saves the last image in the new folder. I am not able to figure out how to save PNG files with incremental values in name. I would appreciate any help. Thanks in advance.
myFolder = 'current folder path';
filePattern = fullfile(myFolder, '**/*.png');
theFiles = dir(filePattern);
numFiles = length(theFiles);
outputFolder = 'new folder path';
for K = 1 : numFiles
    baseFileName = theFiles(K).name;
    fullFileName = fullfile(theFiles(K).folder,baseFileName);
    limages = imread(fullFileName);
    fullFileName = fullfile(outputFolder, theFiles(K).name);
    imwrite(limages,fullFileName);
end
2 Kommentare
  Walter Roberson
      
      
 am 14 Apr. 2022
				Is there any character that is valid in file names, that we are permitted to assume does not occur in the file names in question? For example are we permitted to assume that the original filenames will never end with underscore and then a number just before the extension?
When the files get renamed as they are copied into the new directory, is it necessary to identify which directory each version came from? For example cracked/20220311.png -> 20220311_cracked.png ? 
Akzeptierte Antwort
  per isakson
      
      
 am 15 Apr. 2022
        %%  
myFolder = 'current folder path';
filePattern = fullfile(myFolder,'**','*.png');
theFiles = dir(filePattern);
numFiles = length(theFiles);
outputFolder = 'new folder path';
mkdir( outputFolder ) 
for K = 1 : numFiles
    source_file = fullfile( theFiles(K).folder, theFiles(K).name );
    target_name = sprintf( '%s_%03d.png', theFiles(K).name, K );    % less than 999 files
    target_file = fullfile( outputFolder, target_name );
    copyfile( source_file, target_file );
end
And some error handling and testing.
7 Kommentare
  Image Analyst
      
      
 am 20 Apr. 2022
				Instead of this:
source_file = fullfile( theFiles(K).folder, theFiles(K).name );
target_name = sprintf( '%s_%03d.png', theFiles(K).name, K );    % less than 999 files
try this
% Create source full file name.
baseFileName = theFiles(K).name;
inputFolder = theFiles(K).folder;
sourceFullFileName = fullfile(inputFolder, baseFileName);
% Create full destination file name.
[~, baseFileNameNoExt, ext] = fileparts(baseFileName);
targetBaseFileName = sprintf('%s_%03d.png', baseFileNameNoExt, K); % less than 999 files
targetFullFileName = fullfile(outputfolder, targetbaseFileName);
% Copy the source file, with it's new name, to the destination folder.
copyfile(sourceFullFileName, targetFullFileName);
Weitere Antworten (0)
Siehe auch
Kategorien
				Mehr zu Convert Image Type finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!