필터 지우기
필터 지우기

Renaming a lot of files

조회 수: 1 (최근 30일)
John
John 2012년 3월 18일
Hello,
I've made a 1000 copies of a file in the current directory. For example
RW.a_process
Copy of RW.a_process
Copy (2) of RW.a_process.....
Copy (1000) of RW.a_process
Would anybody know how I could rename them to be
RW.a_process
RW1.a_process
RW2.a_process....
RW1000.a_process
Many thanks
John
  댓글 수: 1
Jan
Jan 2012년 3월 18일
It would be *much* easier to create the file with the correct file name from the beginning. Considering "RW", "Copy of RW" and "Copy (i) of RW" is possible, but not necessary.

댓글을 달려면 로그인하십시오.

채택된 답변

Sahyadri Vibhu
Sahyadri Vibhu 2012년 3월 20일
You could use http://www.bulkrenameutility.co.uk/Main_Intro.php if you are using WIndows or something similar if you are using other OS
  댓글 수: 1
John
John 2012년 3월 20일
Thanks for the help guys

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Image Analyst
Image Analyst 2012년 3월 18일
These functions may come in helpful:
dir() to get the existing filenames.
strfind() to find parentheses.
sscanf() or str2double() to extract the number (optional since you can work with the extracted string directly).
sprintf() to create the new name.
movefile() to make a copy with the new name.
delete() to delete the file with the old name.
  댓글 수: 4
John
John 2012년 3월 18일
Hello,
I kinda have it working, except it is saving it as .mat files? How would I keep the original file extension?
Thank you
% Get all .a_process files in the current folder
BaseName='RW';
files = dir('*.a_process');
% Loop through each
for k = 1:length(files)
FileName=[BaseName,num2str(k)]
save(Filename)
end
Image Analyst
Image Analyst 2012년 3월 18일
Not very robust at all. You will encounter problems with that code. I suggest you look at my code.

댓글을 달려면 로그인하십시오.


Image Analyst
Image Analyst 2012년 3월 18일
Allright, since you at least took a shot at it, here's the code:
files = {'RW.a_process',...
'Copy of RW.a_process',...
'Copy (2) of RW.a_process',...
'Copy (1000) of RW.a_process'}
for k = 1 : length(files)
oldFileName = files{k}
leftParenthesisLocation = strfind(oldFileName, 'Copy (');
if leftParenthesisLocation >= 1
% Handle cases of Copy (nnn) of RW.a_process
rightParenthesisLocation = strfind(oldFileName(leftParenthesisLocation:end), ')');
if rightParenthesisLocation > 1
strNumber = oldFileName(leftParenthesisLocation+6:rightParenthesisLocation-1)
% Get name to the right of the right parenthesis.
newFileName = oldFileName(rightParenthesisLocation+5:end);
[folder, baseFileName, ext] = fileparts(newFileName);
newFileName = sprintf('%s%s%s', baseFileName, strNumber, ext);
fprintf('New Filename = %s\n', newFileName); % Print blank line.
end
else
% Handle case of Copy of RW.a_process
leftLocation = strfind(oldFileName, 'Copy of ');
if ~isempty(leftLocation)
% Get name to the right of the "Copy of ".
[folder, baseFileName, ext] = fileparts(oldFileName(leftLocation+8:end));
strNumber = 1;
newFileName = sprintf('%s%d%s', baseFileName, strNumber, ext);
fprintf('New Filename = %s\n', newFileName); % Print blank line.
end
end
end
I think you can figure out where to put the movefile(oldFileName, newFileName) and delete(oldFileName) in. Make sure you call exist(newFileName, 'file') before you delete the old one otherwise you may blow away your only copy!
  댓글 수: 6
John
John 2012년 3월 19일
Hello Image Analyst,
Sorry for bothering you again. If you have time to answer my questions quickly that would be great. It's nearly working just not quite there.
Thank you
John
Image Analyst
Image Analyst 2012년 3월 20일
Did you include the file extension? It probably has one, even though you may be asking windows to hide it from you. I always turn off that windows option - I like knowing what extensions the files have, especially when you have files with the same base filename but different extensions. Try files = {'Copy (2) of RW.dat'} or whatever it is.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Startup and Shutdown에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by