在 R 中重命名文件

Rename files in R

我在重命名来自 R 的文件时遇到问题。

在我的桌面文件夹中有 10 个文件:

račun 1.xlsx

račun 2.xlsx

...

račun 10.xlsx

我试过以下方法:

files <- list.files(path = "myfolder")
file.rename(files,
        paste0("novi_", 1:10, ".xlsx"))

这是我得到的结果:

[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

我想这是因为 unicode 字符 č,但我不知道如何找到解决方案。

编辑 2:这里的解决方案是让 OP 更改控制面板中的区域设置,将格式设置为塞尔维亚语(塞尔维亚拉丁语)。

编辑 1:查看评论:OP 在 Windows 机器上。这里的问题是 list.files()(并且可能是 dir(),因为它们调用相同的 .Internal)正在将非 ASCII 文件名转换为 ASCII,但是 Windows 期望 file.exists() 到向它发送 unicode 文件名,(可能还有 file.rename()

尝试:

file.rename(gsub("c", "č", files), paste0("novi_", seq_along(files, ".xlsx"))
# could work, but it didn't for `file.exists()`

原回答:

setwd(<your path>)
(files <- list.files())
# [1] "račun 1.xlsx" "račun 2.xlsx" "račun 3.xlsx" "račun 4.xlsx" "račun 5.xlsx [6] "račun 6.xlsx"    
file.rename(files, paste0("novi_", seq_along(files, ".xlsx"))
# [1] TRUE TRUE TRUE TRUE TRUE TRUE

您在 list.files() 中指定的路径表明您不在正确的目录中

解决此问题的一种方法是使用 8.3 version of a filename,它保证是 ASCII-only。主要问题是(据我所知)没有办法在 R 中以编程方式获得它,所以你应该 double-check 这是正确的:

files <- paste0("RAUN~", 1:10, ".XLS")
newfiles <- paste0("novi_", 1:10, ".xlsx")
file.rename(files, newfiles)

您可以从命令行使用 DIR /X 获取 8.3 文件名。