0

有没有办法简单地加载目录中第一个文件的名称而不指定其名称,然后在每次迭代中移动到目录中的下一个文件?

我有文件名以 1、1.5、2、2.5、3、3.5 结尾等命名的问题......所以迭代中的 num2str(X) 无助于定位文件。

我正在尝试使用 strrep(s1,s2,s3) 重命名它们,但我再次遇到了将它们加载到循环中的相同问题!

我知道我一开始应该有更多的计划来命名它们,但是这些文件太大而无法再次运行模拟。

这是我必须重命名文件的内容:

%%%RENAMING A FILE%%%

%Search directory to get number of files
 d1=dir('\MATLAB\Data\NumberedQwQoRuns');
 numfiles = length(d1)-2;


for a=1:numfiles
%Search subdirectory if necessary for count of those folders
d2=dir('\MATLAB\Data\NumberedQwQoRuns\Run'num2str(a));
subdir = length(d2)-2;
for b= 1:subdir

origname= PROBLEM???

Newname=['Zdata' num2str(b) '.txt']
Newfile= strrep(origname, origname, newname)
movefile(origname,Newfile)

end
end

非常感谢您的帮助,Abid A

4

2 回答 2

2

这是我的解决方案:

%# get runs subdirectories
BASE_DIR = '/path/to/Runs';
runsDir = dir( fullfile(BASE_DIR,'Runs') );
runsDir = {runsDir([runsDir.isdir]).name};           %# keep only directory names
runsDir = runsDir( ~ismember(runsDir, {'.' '..'}) ); %# ignore "." and ".."

for r=1:numel(runsDir)
    %# get files in subdirectory
    runFiles = dir(fullfile(BASE_DIR,'Runs',runsDir{r},'*.txt')); %# *.txt files
    runFiles = {runFiles.name};                                   %# file names

    %# map filenames: 1,1.5,2,2.5,... into 1,2,3,4,...
    [~,ord] = sort(str2double( regexprep(runFiles,'\.txt$','') ));
    newrunFiles = cellstr( num2str(ord(:),'Zdata_%d.txt') );
    newrunFiles = strtrim(newrunFiles);

    %# rename files
    for f=1:numel(runFiles)
        fname = fullfile(BASE_DIR,'Runs',runsDir{r},runFiles{f});
        fnameNew = fullfile(BASE_DIR,'Runs',runsDir{r},newrunFiles{f});
        movefile(fname,fnameNew);
    end
end

我在以下文件结构上对其进行了测试:

Runs/
|
|__Run1/
|  |__1.txt        will become: Zdata_1.txt
|  |__1.5.txt                   Zdata_2.txt
|  |__2.txt                     Zdata_3.txt
|  |__2.5.txt                   etc...
|  |__3.txt
|  |__3.5.txt
|
|__Run2/
   |__1.txt
   |__1.5.txt
   |__2.txt
   |__2.5.txt
   |__3.txt
   |__3.5.txt
于 2011-10-22T03:52:49.843 回答
0

从中获取实际文件名subdir(b).name

请注意,如果您的合成名称与现有名称之一匹配,您可能会遇到问题。

于 2011-10-22T03:27:32.403 回答