如何在Matlab中从文件名中删除模式

时间:2015-12-10 13:48:41

标签: matlab

我想从文件名中删除'-2',如下所示:

EID-NFBSS-2FE454B7-2_TD.eeg
EID-NFBSS-2FE454B7-2_TD.vhdr
EID-NFBSS-2FE454B7-2_TD.vmrk
EID-NFBSS-3B3BF9FA-2_BU.eeg
EID-NFBSS-2FE454B7-2_PO.txt

因为您可能会看到文件的名称不同,并且还有不同类型的扩展名。我想要做的就是从所有文件名中删除'-2'。我试着用这个:

pattern = '-2';
replacement = '';
regexprep(filename,pattern,replacement)

我在控制台中得到了结果,但经过多次尝试,我不知道如何“说”MATLAB在同一位置切换电影名称。

1 个答案:

答案 0 :(得分:0)

@excaza在钱上点击了它。您必须通过dir探测所需目录以获取文件列表,然后遍历每个文件名并删除所有出现的-2,然后使用movefile重命名该文件,并{{3删除旧文件。

想到这样的事情:

%// Get all files in this directory
d = fullfile('path', 'to', 'folder', 'here');
directory = dir(d);

%// For each file in this directory...
for ii = 1 : numel(directory)
    %// Get the relative filename
    name = directory(ii).name;

    %// Replace any instances of -2 with nothing
    name_after = regexprep(name, '-2', '');

    %// If the string has changed after this...
    if ~strcmpi(name, name_after)    
        %// Get the absolute path to both the original file and
        %// the new file name
        fullname = fullfile(directory, name);
        fullname_after = fullfile(directory, name_after);

        %// Create the new file
        movefile(fullname, fullname_after);

        %// Delete the old file
        delete(fullname);
    end
end

这背后的逻辑非常简单。首先,字符串d确定要搜索文件的目录。 delete用于按部分构建路径。这很重要的原因是因为这允许代码与平台无关。在操作系统之间划分目录之间的界限是不同的。例如,在Windows中,角色为\,而在Mac OS和Linux上,角色为/。我不知道你正在运行哪个平台,所以fullfile在这里会很有用。只需获取目录的每个部分,并将它们作为单独的字符串放入fullfile

现在,使用dir查找您选择的此目录中的所有文件。用您想要的路径替换/path/to/folder/here。接下来,我们迭代所有文件。对于每个文件,我们得到相对文件名。 dir包含有关每个文件的信息,您最需要的字段是name属性。但是,此属性是相对的,这意味着只给出了文件名本身,而没有给出存储此文件的完整路径。之后,我们使用regexprep来完成替换-2的所有实例。

下一点很重要。在我们尝试更改文件名后,如果文件不一样,我们需要通过简单地将旧文件复制到更改名称的新文件来创建新文件,我们删除旧文件文件。此处的函数fullfile有助于在不包含您正在查找的文件的目录中运行此脚本的可能性,建立文件所在位置的绝对路径。

我们使用fullfile查找旧文件和新文件的绝对路径,使用movefile创建新文件,使用delete删除旧文件。