使用R重命名基于文件夹名称的文件

时间:2018-02-02 15:41:52

标签: r file batch-rename

我有一个文件夹Tmin,其中包含18个文件夹。 18个文件夹中的每一个都包含数百个文件。我想用R创建一个程序,允许为每个文件添加文件夹文件的名称。我不想用不同的名称重命名每个文件,我只想在文件名的开头添加文件夹名称。我是R和编程的新手。我无法拥有可以为每个文件夹重复操作的批处理功能。你可以找到附上的两张图片,这些图片展示了我想要获得的内容。

例如,名为" name_date.tiff"包含在文件夹" MACA_Miroc"将成为" MACA_Miroc_name_date.tiff"。而且,我想自动为每个文件夹重复操作。在此先感谢您的帮助!

Wanted situation and organization of my folders and file

2 个答案:

答案 0 :(得分:1)

这应该有效:

mydir <- getwd()  
primary_folder <- "C:/Users/Desktop/Test_Data/"
subfolders <- grep("*MACA*", list.dirs(primary_folder, full.names = T, recursive = F), 
                   value = T)

renameFunc <- function(z){
  setwd(z)
  fnames <- dir(recursive = F, pattern= ".tiff|.csv")
  addname <- substr(z, nchar(primary_folder)+2, nchar(z))

  lapply(fnames, function(current_name){
    #Regex to get extension, may need to addd $ sign to signify end of file name
    ptrn <- ".*\\.([a-zA-Z]{2,4})" 
    extension <- regmatches(current_name, regexec(ptrn, current_name))[[1]][2]
    no_extension <- gsub(paste(".",extension, sep = ""), "", current_name)
    new_name <- paste(gsub("_"," ", no_extension), " ", addname, ".", extension, sep = "")
    file.rename(current_name, new_name)
  })
}

lapply(subfolders, readFunc)

setwd(mydir)

我认为如果您不在要更改文件名的目录中,则必须指定全名。更改工作目录是一种快速方法,但您可以使用全名(使用正则表达式为from获取正确的tofile.rename()值)。当我不在我想要更改名称的目录中时,我在一次poing时遇到了一些错误。

我觉得这样可以更好地控制您想要更改名称的文件夹,因为不正确的操作可能会非常混乱。您可能还想跳过某些文件扩展名或子文件夹等。

答案 1 :(得分:0)

您的路径文件夹

folder<-"C:/path/example/"

提取文件列表

files<-list.files(folder)

提取文件夹名称

folder_name<-unlist(strsplit(folder,"/"))[length(unlist(strsplit(folder,"/")))]

重命名所有文件

file.rename(from = paste0(folder,files),to = paste0(folder,folder_name,"_",files))