2

我正在尝试用 R 语言编写一个允许我重命名文件的算法。我想用数字 1,2,3,4,5,... 重命名文件夹中的所有 pdf 文件,并保留 pdf 扩展名。主要困难如下:我的文件夹包含文件和文件夹,这些文件夹包含文件和文件夹等......我希望所有这些子文件夹中的所有 pdf 文件都以从 1 开始的数字命名,直到文件数在这个特定的文件夹中(例如按照字母顺序)!另一个困难:我的文件夹还包含非 pdf 文件!

这是一个示例:(在以下示例中,文件夹 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

无论文件夹的数量是多少“以及文件夹的起始深度”,该算法都应该起作用

如果即使在某些文件夹中已经存在名为 3.pdf 或其他 number.pdf 的文件,这也会起作用,那会更好一些,但实际上我可以在没有这种灵活性的情况下处理!

非常感谢你的帮助 !

我运行了这段代码,但它并不完全有效。如果我只是运行它,我会收到以下错误消息:“if (is.na(pathname)) { 中的错误:参数的长度为零”(我必须从法语翻译此错误消息,因此可能与我们可以从 R 中得到英文的错误消息)。

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

所以我做了 d<-d[-1] 并重新运行大 lapply 我收到此错误消息:

“setwd(d[x]) 中的错误:无法更改工作目录”事实上,第一个文件夹中的文件已重命名,但仅在第一个文件夹中

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

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

但我只有 4 个文件夹。没有名为“。”的文件夹。!正如我所说,如果我这样做 d<-d[-1] 代码在更改目录时不会成功,因此只有一个文件夹被重命名

4

1 回答 1

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 = "" ) )
        })
    })
于 2013-03-20T16:03:22.063 回答