如何在不改变文件修改日期的情况下重命名文件

5

我写了一个重命名文件的脚本,但是发现修改日期都变成了一样的。所以如果按照日期排序,原来的顺序就被打乱了。有没有办法在不改变修改日期的情况下改变文件名?或者即使修改了日期,按照日期排序时仍然保持原来的顺序。以下是我的当前代码:

# save previous working folder
wkdir <- getwd()

# set the target folder
setwd("C:/Users/YY/Desktop/Tmp file/")

# set the file pattern
a <- list.files(path = ".", pattern = "abc_*.*$") 

# set the name to be replaced
b<-gsub("abc_","ABC_",a)

# rename
file.rename(a,b)

# restore previous working folder
setwd(wkdir)

如果有人能帮我,我将不胜感激。


6
这不是一个关于 R 的问题,而是关于你使用的操作系统以及该操作系统允许进行“修改”还是“重命名”的问题。 - Carl Witthoft
不要忘记接受一个答案来解决你的问题。这将有助于那些在 Stack Overflow 上搜索此问题的人们快速找到正确的解决方案。 - Frank Einstein
3个回答

6

移动命令和程序NIRCMD。


移动

除了使用像"REN"或"RENAME"这样的命令,您还可以使用"MOVE"命令来重命名文件和文件夹。日期应保持不变。

示例:

MOVE "C:\Folder\Filename.txt" "C:\Folder\New_Filename.txt"

(我不能完全确定它在每个版本的Windows上是否都能以相同的方式工作,如果您在较新或较旧版本的Windows上获得不同的结果,您可以通过评论告诉我。)


NIRCMD

现在,如果由于某些原因像 REN 或 MOVE 这样的命令不是适合您的解决方案,还有一个名为 Nirsoft 的程序Nircmd可以做很多事情,包括将文件的日期更改为您想要的任何日期(免费软件)。

您绝对应该在您的工具箱中拥有这个小程序。

语法:

nircmd.exe setfiletime "creation-time" "modified-time"

示例:

nircmd.exe setfiletime "C:\Folder\File.txt" "24-06-2003 17:57:11" "22-11-2005 10:21:56"


1
顺便说一下,在资源管理器中更改文件名不会更改修改日期。 - Alex78191

6

我曾经有同样的问题 - 我需要处理文件,然后存档。我先尝试了R语言,但是发现复制文件会改变原始的日期时间戳。

最终我学习了shell()命令,并使用以下代码解决了问题。由于我在Windows操作系统上,因此在文件名中使用-R和-d来表示是否为R格式(路径中的/)或Windows格式(路径中的\),并使用normalizePath()进行转换。

sourcefileR <- "c:/Users/myname/Documents/test.dat"
destfileR <- "c:/Users/myname/Documents/somewhereelse/test.dat"
sourcefiled <- normalizePath(sourcefileR)
# now looks like: "c:\\Users\\myname\\Documents\\test.dat"
destfiled <- normalizePath(destfileR)

rept <- shell(paste("copy ", sourcefiled, destfiled, sep=" "), intern=TRUE)

参数"intern"会使操作系统的反馈信息进入R对象"rept"中,你可以对其进行搜索以查找"1 file(s) copied"字符串以确认成功或者其他错误处理。

我使用的是R 2.15.3版本(2013-03-01),运行在Windows 7 Professional SP1平台下的x86_64-w64-mingw32/x64(64位)。


谢谢你的解决方案。它确实起作用了。你真是太有帮助了,太棒了! - YYY

1

如果你想改变文件名,就必须同时改变修改日期。思考一下这个问题!即使你没有修改文件内容,你也会修改文件。

Q:你是在R中排序还是在Windows文件夹视图中排序? Q:你有没有考虑按创建日期排序?

如果你是在Windows中排序,你应该能够找到如何按“创建日期”排序的方法, 如果你是在R中排序,请使用file.info获取相关属性,然后进行排序。


我很感激。这很有帮助。 - YYY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接