我正在尝试用R语言编写一个算法,它允许我重命名文件。我想将文件夹中的所有pdf文件重命名为1,2,3,4,5,...并保留pdf扩展名。主要的困难如下:我的文件夹包含文件和文件夹,这些文件夹包含文件和文件夹等。我希望所有这些子文件夹中的所有pdf文件都是由数字命名的,从1开始,直到这个特定文件夹中的文件数量(例如,遵循字母顺序)!另一个困难:我的文件夹也包含非pdf文件!
下面是一个示例:(在下面的示例中,文件夹1包含folder2和3个文件。文件夹二包含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的文件,也会更好一些,但实际上我可以在没有这种灵活性的情况下处理!
非常感谢你的帮助!
我运行了这段代码,但它并不完全有效。如果我只是运行它,我会得到这样的错误消息:"Error in If (is.na(pathname)) {:参数的长度为零“(我不得不将这个错误消息从法语翻译过来,所以可能会有一些与我们可以从R得到的英语错误消息不匹配)。
然后我意识到d很奇怪,因为它包含一个名为“”的目录。在我的文件夹中没有的第一个位置(顺便问一下,你有什么解释吗?!)
所以我做了d<-d-1,然后重新运行大的lapply,我得到了这个错误消息:
"Error in setwd(dx):change to change working directory“确实第一个文件夹中的文件被重命名,但仅在第一个文件夹中
下面是list.dirs()提供的功能:
".“”./3.9月“"./4.Oct”"./5.Nov“"./6.Dec”
但我只有4个文件夹。没有名为".“的文件夹!正如我所说的,如果我执行了d<-d-1,则代码在更改目录时不会成功,因此只重命名了一个文件夹
发布于 2013-03-21 00:03:22
由于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 = "" ) )
})
})https://stackoverflow.com/questions/15528121
复制相似问题