我有一个文件夹Tmin,其中包含18个文件夹。 18个文件夹中的每一个都包含数百个文件。我想用R创建一个程序,允许为每个文件添加文件夹文件的名称。我不想用不同的名称重命名每个文件,我只想在文件名的开头添加文件夹名称。我是R和编程的新手。我无法拥有可以为每个文件夹重复操作的批处理功能。你可以找到附上的两张图片,这些图片展示了我想要获得的内容。
例如,名为" name_date.tiff"包含在文件夹" MACA_Miroc"将成为" MACA_Miroc_name_date.tiff"。而且,我想自动为每个文件夹重复操作。在此先感谢您的帮助!
答案 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
获取正确的to
和file.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))