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

时间:2014-01-13 14:55:08

标签: r file-rename

我写了一个脚本来重命名文件。但我发现修改日期改为相同。因此,如果按日期排序,则原始订单会被破坏。有没有办法在不更改修改日期的情况下更改名称?或者虽然日期已更改,但如果按日期排序,则顺序仍然相同。以下是我目前的代码:

# 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)

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

3 个答案:

答案 0 :(得分:5)

我有同样的问题 - 我需要处理文件,然后存档。我先在R中尝试过,然后意识到副本更改了文件的原始日期时间戳。

我最终学会了shell()命令并用下面的代码解决了它。因为我在Windows操作系统中,我在文件名中使用-R和-d来表示是否为R(路径中的/ form)或Windows(路径中的\ form)的形式,并使用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个文件已复制”字符串以便成功或者您想要的任何其他错误捕获。

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

答案 1 :(得分:3)

当然有可能!

而不是使用&#34; REN&#34;等命令。或者&#34; RENAME&#34;,您可以使用&#34; MOVE&#34;重命名文件/文件夹及其日期的命令将保持完全相同。

示例:

  

MOVE&#34; C:\ Folder \ Filename.txt&#34; &#34; C:\文件夹\ New_Filename.txt&#34;

(我不知道它是否适用于所有版本的Windows,但它似乎至少适用于Windows 7)

如果仍然无效,您可以使用Nirsoft的Nircmd等程序将文件的日期更改为重命名前的日期(或您可能需要的任何其他日期/时间)。

语法:

  

nircmd.exe setfiletime &#34;创建时间&#34; &#34;改性时间&#34;

示例:

  

nircmd.exe setfiletime&#34; c:\ temp \ myfile.txt&#34; &#34; 24-06-2003 17:57:11&#34; &#34; 22-11-2005 10:21:56&#34;

答案 2 :(得分:2)

如果不更改修改日期,则无法更改名称。想一想!您正在修改文件(即使您没有修改内容)。

Q值。您是在Windows文件夹视图中的R或外部排序? 问:您是否考虑过按创建日期排序?

如果你在Windows中排序,你应该能够弄清楚如何按“创建日期”进行排序 如果你在R中对它进行排序,请使用file.info获取相关属性,然后对其进行排序。