Delete files with specific names

Hello
I have a directory with files from the same type with names like:
2016_03_24_09 -0002-0001-00058.dcm
2016_03_24_09 -0002-0001-00059.dcm
2016_03_24_09 -0002-0001-00060.dcm
etc.
Based on the last 5 figures (e.g.,*00060.dcm),
I need to delete every file that ends with a number greater than 276.
Is there a way to do it in a loop?
Thanks,
Tali

4 Commenti

files = ls('*.dcm'); % list of files with .dcm extension
for n = 1:N
ind1 = strfind(files(n,:), '-'); % indicies of the '-' char
ind2 = strfind(files(n,:), '.'); % index of '.'
str = files(n,ind1(end)+1:ind2-1);% extract the numeric string
if str2num(str) > 276
delete(files(n,:)); % delete if greater than 276
end
end
Hi John
Thank you so much for your quick response!
I'm trying it now and get this error for the first line (for n=1:N):
Error using :
For colon operator with char operands, first and last operands must be char.
Have I done something wrong?
Thanks again so much!
Tali
You need
for n = 1: size(files, 1)
and, since using ls gives you a character array instead of a cell array, you'll need
delete(strtrim(files(n,:)));
to trim off the extra whitespace. If you use dir() instead of ls(), you don't need to use strtrim().
it's working!! Thank you so much!!!!

Accedi per commentare.

 Risposta accettata

Thorsten
Thorsten il 31 Mag 2016
Modificato: Thorsten il 31 Mag 2016
You can get the filenames using
d = dir;
filenames = {d.name};
Loop through the filenames
for i = 1:numel(filenames)
fn = filenames{i};
[num, cnt] = sscanf(fn(find(fn == '-', 1, 'last')+1:end-4), '%d');
if cnt == 1 && num > 276
disp(fn)
end
end
This just displays the files to be deleted. If everything is alright, replace
disp(fn)
with
delete fn

4 Commenti

Hi Thorsten
Thank you so much for your response!
I tried to use it, and changed the function from disp to delete
But for some reason I can still see the files in the folder.
Is there anything that I'm missing?
Thank you so much again!
Tali
The files have to be in the same folder. Otherwise you'll have to prepend the folder with the fullfile() function.
Also, you might want to put
recycle on;
before the code to send it to the recycle bin instead of losing it forever.
And if you have the file manager open, you might need to refresh the view to see the changes.
Thanks!
William R
William R il 27 Ott 2021
Modificato: William R il 27 Ott 2021
This code will not work since
delete fn
will try to delete a file with the name "fn". So the result will be:
Warning: File 'fn' not found.
The right way to do it can be found here.
Or in this example:
delete(fn);

Accedi per commentare.

Più risposte (0)

Categorie

Community Treasure Hunt

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

Start Hunting!

Translated by