无法根据名称有条件地移动文件
Having trouble conditionally moving files based on their names
我正在尝试编写一个脚本,根据名称中的第 7 位和第 8 位数字自动对文件进行排序。我收到以下错误:"Argument must be a string scalar or character vector"
。错误来自第 16 行:
Argument must be a string scalar or character vector.
Error in sort_files (line 16)
movefile (filelist(i), DirOut)
代码如下:
DirIn = 'C:\Folder\Experiment' %set incoming directory
DirOut = 'C:\Folder\Experiment'
eval(['filelist=dir(''' DirIn '/*.wav'')']) %get file list
for i = 1:length(filelist);
Filename = filelist(i).name
name = strsplit(Filename, '_');
newStr = extractBetween(name,7,8);
if strcmp(newStr,'01')
movefile (filelist(i), DirOut)
end
end
此外,我正在尝试使文件夹有条件,以便如果 10-11 位数字为 02,文件将转到 DirOut/02 等
首先,尽量避免使用 eval
函数,它非常慢且难以理解,这非常可怕。特别是如果您需要创建变量。而是这样做:
filelist = dir(fullfile(DirIn,'*.wav'));
二、文中:
name = strsplit(Filename, '_');
使 name
成为 列表 ,因此您可以访问 name{1}
或可能 name{2}
。每一个都是字符串。但是 name
不是一个字符串,它是一个列表。 extractBetween
需要一个字符串作为输入。这就是你遇到这个问题的原因。但请注意,您可以简单地完成:
newStr = name(7:8);
如果 name 是一个字符串,在 Matlab 中是一个 char
数组。
编辑:
由于现在声称错误发生在 movefile (filelist(i), DirOut)
上,可能的原因是因为 filelist(i)
是一个结构。在输入时应该给出文件名(字符数组)的位置。解决方案应该是将这一行替换为:
movefile(fullfile(filelist(i).folder, filelist(i).name), DirOut)
现在,如果您也想为输出文件夹编号,您可以这样做:
movefile(fullfile(filelist(i).folder, filelist(i).name), [DirOut,filesep,name(7:8)])
这会将文件移动到 /DirOut/01。如果你想要/DirOut/1,你可以这样做:
movefile(fullfile(filelist(i).folder, filelist(i).name), [DirOut,filesep,int2str(str2num(name(7:8)))])
我正在尝试编写一个脚本,根据名称中的第 7 位和第 8 位数字自动对文件进行排序。我收到以下错误:"Argument must be a string scalar or character vector"
。错误来自第 16 行:
Argument must be a string scalar or character vector.
Error in sort_files (line 16) movefile (filelist(i), DirOut)
代码如下:
DirIn = 'C:\Folder\Experiment' %set incoming directory
DirOut = 'C:\Folder\Experiment'
eval(['filelist=dir(''' DirIn '/*.wav'')']) %get file list
for i = 1:length(filelist);
Filename = filelist(i).name
name = strsplit(Filename, '_');
newStr = extractBetween(name,7,8);
if strcmp(newStr,'01')
movefile (filelist(i), DirOut)
end
end
此外,我正在尝试使文件夹有条件,以便如果 10-11 位数字为 02,文件将转到 DirOut/02 等
首先,尽量避免使用 eval
函数,它非常慢且难以理解,这非常可怕。特别是如果您需要创建变量。而是这样做:
filelist = dir(fullfile(DirIn,'*.wav'));
二、文中:
name = strsplit(Filename, '_');
使 name
成为 列表 ,因此您可以访问 name{1}
或可能 name{2}
。每一个都是字符串。但是 name
不是一个字符串,它是一个列表。 extractBetween
需要一个字符串作为输入。这就是你遇到这个问题的原因。但请注意,您可以简单地完成:
newStr = name(7:8);
如果 name 是一个字符串,在 Matlab 中是一个 char
数组。
编辑:
由于现在声称错误发生在 movefile (filelist(i), DirOut)
上,可能的原因是因为 filelist(i)
是一个结构。在输入时应该给出文件名(字符数组)的位置。解决方案应该是将这一行替换为:
movefile(fullfile(filelist(i).folder, filelist(i).name), DirOut)
现在,如果您也想为输出文件夹编号,您可以这样做: movefile(fullfile(filelist(i).folder, filelist(i).name), [DirOut,filesep,name(7:8)])
这会将文件移动到 /DirOut/01。如果你想要/DirOut/1,你可以这样做:
movefile(fullfile(filelist(i).folder, filelist(i).name), [DirOut,filesep,int2str(str2num(name(7:8)))])