MATLAB Answers

How to copy and rename files in a different folder

570 views (last 30 days)
Bluegin on 28 Jan 2017
Edited: jonathan on 20 Oct 2017
Hi all,
Let's say I have 3 text files (001X, 002Y and 003Z) in the folder A. Now, I want to first move these files to a created folder B and then rename them like so: 001_T, 002_T and 003_T) so I now have the old files in folder A and the new renamed ones in folder B. I'm almost done but my code (below) doesn't quite work. Any ideas? Thank you.
%First create the folder B
if exist([pwd '\B'])~=7
mkdir B
%Move the files with copyfiles ?
%Then rename the files
A =dir( fullfile('*.txt') );
fileNames = { };
for iFile = 1 : numel( A )
movefile(A(iFile).name,[A(iFile).name(1:3) '_T.txt']);

Accepted Answer

Image Analyst
Image Analyst on 29 Jan 2017
Try this:
% First create the folder B, if necessary.
outputFolder = fullfile(pwd, 'B')
if ~exist(outputFolder, 'dir')
% Copy the files over with a new name.
inputFiles = dir( fullfile('*.txt') );
fileNames = { };
for k = 1 : length(inputFiles )
thisFileName = fileNames{k};
% Prepare the input filename.
inputFullFileName = fullfile(pwd, thisFileName)
% Prepare the output filename.
outputBaseFileName = sprintf('%s_T.txt', thisFileName(1:end-4));
outputFullFileName = fullfile(outputFolder, outputBaseFileName)
% Do the copying and renaming all at once.
copyfile(inputFullFileName, outputFullFileName);

More Answers (3)

Image Analyst
Image Analyst on 28 Jan 2017
You need to take the badly-named B folder and make the full filename out of it
outputBaseFileName = [A(iFile).name(1:3) '_T.txt'];
outputFileName = fullfile(B, outputBaseFileName );
and use that in movefile.

  1 Comment

Bluegin on 28 Jan 2017
Sorry, but Im not sure I follow you, quite frankly

Sign in to comment.

Michael Rowlands
Michael Rowlands on 2 Jul 2017
Edited: Michael Rowlands on 2 Jul 2017
I have encountered similar situations where I need to copy and rename files. So I wrote a function to handle many copy and rename configurations. It's a convenient way of copying and renaming large groups of files using lists and wildcards. It's called "easycopy" and is available on the Matlab File Exchange.
(There's also a sister function, "easyrename" which does the same searching and find-replace, but with a move/rename command.)
Here's how it works in the exact situation described by bluegin.
ORIGINAL DIRECTORY: ...copy2\001X.txt, ...002Y.txt, ...003Z.txt
NEW DIRECTORY: ....copy2\newdir
Copying c:\USERN\desktop\copy2\001X.txt
To c:\USERN\desktop\copy2\newdir\001_T.txt
Copying c:\USERN\desktop\copy2\002Y.txt
To c:\USERN\desktop\copy2\newdir\002_T.txt
Copying c:\USERN\desktop\copy2\003Z.txt
To c:\USERN\desktop\copy2\newdir\003_T.txt


Sign in to comment.

jonathan on 30 Aug 2017
Edited: jonathan on 20 Oct 2017
You can use code by Image analyst or you can easily use Batch Rename Files Tool. You can easily found hier that allows you to quickly rename all the files created in folder A to folder B.


Sign in to comment.