这应该有效。对于每个名为“[num1]-[num2].edit-sites.annot.xlsx”的文件,它会将其重命名为“Sample [num1]-[num2].xlsx”:
fnames <- dir(path = choose.dir(), pattern = '.*edit-sites.annot.xlsx')
> fnames
[1] "1-2.edit-sites.annot.xlsx" "10-2.edit-sites.annot.xlsx" "11-2.edit-sites.annot.xlsx" "21-2.edit-sites.annot.xlsx"
[5] "31-2.edit-sites.annot.xlsx" "4-2.edit-sites.annot.xlsx"
ptrn <- '^([[:digit:]]{1,3}-[[:digit:]]{1,3}).*xlsx'
ptrn2 <- '(.*).edit-sites.annot.xlsx'
lapply(fnames, function(z){
suffix <- regmatches(x = z, m = regexec(pattern = ptrn, text = z))[[1]][2] # ptrn2 also works
file.rename(from = z, to = paste('Sample', " ", suffix, ".xlsx", sep = ""))
})
运行代码后:
> dir(pattern = '.*xlsx')
[1] "Sample 1-2.xlsx" "Sample 10-2.xlsx" "Sample 11-2.xlsx" "Sample 21-2.xlsx" "Sample 31-2.xlsx"
[6] "Sample 4-2.xlsx"
ptrn 和 ptrn2 基于您提供的示例文件名。由于我不确定文件名是否始终与提供的模式一致,因此我包含了一个 regex 模式以匹配由破折号分隔的前导数字。
我倾向于批量重命名文件(与此处的示例相同)并在我的代码中包含一些打印语句(使用cat)以显示原始名称是什么以及更改为什么:
lapply(fnames, function(z){
suffix <- regmatches(x = z,
m = regexec(pattern = ptrn, text = z))[[1]][2] # ptrn2 also works
new_name <- paste('Sample', " ", suffix, ".xlsx")
cat('Original file name: ')
cat(z)
cat("\n")
cat('Renamed to: ')
cat(new_name)
cat("\n")
file.rename(from = z, to = new_name)
})