2013-03-20 80 views
2

我想写一个R语言的算法,它允许我重命名文件。我想通过数字1,2,3,4,5 ...重命名文件夹中的所有pdf文件并保留pdf扩展名。 主要困难如下:我的文件夹包含文件和文件夹,这些文件夹包含文件和文件夹等....我希望所有这些子文件夹中的所有pdf文件都以数字开头的1开头,文件在这个特定的文件夹(例如下面的字母顺序)!另一个难点:我的文件夹也包含非PDF文件!R,重命名文件迭代

下面是一个例子:(在下面的示例文件夹1中包含文件夹2和3个文件夹2包含4个文件中。)

Folder1 "contains" folder2  "contains" Bzzz.file.R 
         A.file.txt    B.file.pdf 
         Bla.file.pdf    C.file.pdf 
         C.file.pdf    Delta.file.pdf 

...应该是转换为这个....

Folder1 "contains" folder2 "contains" Bzzz.file.R 
        A.file.txt   1.pdf 
        1.pdf     2.pdf 
        2.pdf     3.pdf 

的算法应该是工作无论是文件夹的数量“并有多深的文件夹开始”

如果这会工作,即使当t这里已经有一些叫做3.pdf或其他number.pdf的文件,它会稍微好一些,但是我实际上可以在没有这种灵活性的情况下进行处理!

非常感谢您的帮助!

我跑这个代码,但它不完全工作。如果我只是运行它,我得到这个错误消息:“错误在if(is.na(路径名)){:参数的长度为零”(我不得不从法语翻译这个错误消息,所以可能有一些错配错误消息,我们可以从R中获得英文版)。

然后我意识到d很奇怪,因为它包含一个名为“。”的目录。在我的文件夹中没有的第一个位置(您是否对此有解释?!)。

所以我也ð< -d [-1],然后重新运行大lapply我收到此错误信息:

“错误setwd(d [X]):不可能改变工作目录” 的确在第一个文件夹中的文件被重命名,但只在第一个文件夹

这里什么list.dirs()给出:

“” “./3.Sept”“./4.Oct”“./5.Nov”“./6.Dec”

但是我只有4个文件夹。没有名为“。”的文件夹。 !正如我所说,如果我做d < -d [-1]该代码是不是成功在更改目录,以便只有一个文件夹重命名

+0

在一个给定的文件夹中,我想重命名所有的pdf文件,无论它们的当前名称是什么。如果在这个文件夹中有3个pdf文件,它们将被重命名为1.pdf,2.pdf和3.pdf。我不想重命名非pdf文件。问题是我的文件夹包含其他文件夹,其中包含文件和文件夹等。我希望在这些文件夹中的任何一个文件夹中重新命名pdf文件,而不必重命名已在其他文件夹中完成的文件。 在我的示例中,我添加了非PDF文件,以表明它们不应该重命名。 – 2013-03-20 15:59:39

回答

1

由于list.files()默认按字母顺序返回文件一种方式可以很简单地实现如下:

# Navigate to top directory using setwd("my/top/directory/here") 
# This code will then rename all pdfs in the current directory and ALL sub-directories 
setwd("C:/whatever/directory")  
    # Navigate to top directory using setwd("my/top/directory/here") 
d <- list.dirs() 
lapply(1:length(d) , function(x){ 
    require(R.utils) 
    f <- list.files(path = getAbsolutePath(d[x]) , pattern = "*.pdf" , full.names = TRUE) 
    lapply(seq_len(length(f)) , function(y) { 
     file.rename(f[y] , paste(dirname(f[y]) ,"/" , y , ".pdf" , sep = "")) 
     }) 
    }) 
+0

oooppss ....我会在原帖 – 2013-03-20 16:27:13

+0

@ user2051137中写下我的意见。我意识到我对路径名称等有些困惑。现在应该可以工作了(我已经测试过了!) – 2013-03-20 16:37:05

+0

太棒了,它完美无缺!非常感谢 ! – 2013-03-20 16:40:18