Renaming batch names removing extensions

조회 수: 3 (최근 30일)
Christopher Hamm
Christopher Hamm 2019년 6월 14일
댓글: dpb 2019년 6월 17일
Hello, I have multiple file names that were accidently labeled with a '.' in them, and my other scripts will no longer recognize the file name correctly. I need to remove the '.' fromt he file names in large batches, about 400 files at a time in a folder.
For example, I need a way to make a batch like this:
1801_pH6.25-pos2-041-seg
1801_pH6.25-pos2-042-seg
1801_pH6.25-pos2-043-seg
1801_pH6.25-pos2-044-seg
into a batch with just the "." removed like this:
1801_pH625-pos2-041-seg
1801_pH625-pos2-042-seg
1801_pH625-pos2-043-seg
1801_pH625-pos2-044-seg
I am new to matlab and have no idea how to accomplish this, any and all help would be much appreciated.
Thank you!

채택된 답변

dpb
dpb 2019년 6월 14일
편집: dpb 2019년 6월 15일
Job for command. Make a .cmd batch file from the following--name DORENAME.CMD or somesuch...
echo off
setlocal
for %f in (1801*.25*) do (
set filename=%~xf%
set newname=%filename:.=-%
ren %f% %newname%
)
endlocal
echo on
Execute the above for each directory containing files...I built in a matching wildcard pattern to your example--if all the files in the subdirectory are affected, then *.* would work just as well. If there are differing names you could pass the appropriate wild card as a parameter and use it instead of hardcoded value.
Each filename %f% returned from the directory search is save in temporary environment variable and then the new name built by character substitution of the hyphen for the period/dot. Then those are used to RENAME the file.
You could write similar logic in ML using the DIR() structure but there isn't a direct support to the REN command built into ML so you have to COPYFILE then delete the old one which is an extra step.
  댓글 수: 3
Christopher Hamm
Christopher Hamm 2019년 6월 17일
dpb was correct, it was much easier to use a bulk utility renamins software that was free. Had to do each file partition seperately, but it was easy and relatively painless. Thank you!
dpb
dpb 2019년 6월 17일
Yeah...I just gave a rudimentary .CMD file instead of looking to find an available utility.
I use the JPSoftware command line replacement for the MS CMD shell which has all these kinds of features built into a much more powerful and easier to use command syntax so have all the tools at hand...

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

추가 답변 (1개)

Image Analyst
Image Analyst 2019년 6월 14일
Try this
% Specify the folder where the files live.
myFolder = 'C:\Users\yourUserName\Documents\My Pictures';
% Check to make sure that folder actually exists. Warn user if it doesn't.
if ~isfolder(myFolder)
errorMessage = sprintf('Error: The following folder does not exist:\n%s', myFolder);
uiwait(warndlg(errorMessage));
return;
end
% Get a list of all files in the folder with the desired file name pattern.
filePattern = fullfile(myFolder, '*.*'); % Change to whatever pattern you need.
theFiles = dir(filePattern);
for k = 1 : length(theFiles)
baseFileName = theFiles(k).name;
originalFullFileName = fullfile(myFolder, baseFileName);
% If there is no dot, skip it.
if ~contains(baseFileName, '.')
continue; % Skip to bottom of loop.
end
% If it gets to here, there is a dot in the name.
% Remove it
newBaseFileName = baseFileName; % Initialize
newBaseFileName(baseFileName == '.') = [];
newFullFileName = fullfile(myFolder, newBaseFileName);
fprintf(1, 'Now renaming %s to %s\n', originalFullFileName, newFullFileName);
movefile(originalFullFileName, newFullFileName); % Do the rename.
end
You might also want to do all folder and subfolders all in one shot, instead of a folder at a time, using fileDatastore.

카테고리

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