2014-01-13 129 views
2

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

# 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

这不是一个”R“问题。这是一个什么样的操作系统,以及该操作系统允许“修改”和“重命名”的问题。 –

+0

不要忘记接受你的问题的答案。它将帮助那些正在搜索Stack Overflow的人们解决这个问题,以便快速找到合适的解决方案。 –

回答

3

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

问:你是在R或在Windows文件夹视图外排序? 问:你有没有想过按创建日期排序?

如果你在窗口排序,你应该能够弄清楚如何按“创建日期” 排序,如果你在R中排序它,使用file.info来获取相关属性,然后排序那。

+0

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

2

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

我最终学会了shell()命令并用下面的代码解决它。由于我在Windows操作系统中,我在文件名中使用了-R和-d来表示R(/ form in path)还是Windows(\ form in path)的形式,并使用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) 

实习生参数使OS反馈进入将R对象REPT,可以搜索找到了“1档(S)复制”字符串成功或任何其他错误捕捉你想要的。

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

+0

谢谢你的解决方案。它确实有效。你是如此的有用和真棒! – YYY

2

当然这是可能的!

您可以使用“MOVE”命令来重命名文件/文件夹,而不会使用“REN”或“RENAME”等命令,并且其日期保持完全相同。

例子:

MOVE “C:\文件夹\则Filename.txt” “C:\文件夹\ New_Filename.txt”

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


如果仍然没有工作,你可以使用一个程序像来自Nirsoft的将文件的日期更改为重命名之前(或您可能想要的任何其他日期/时间)。

语法:

的NirCmd。EXE setfiletime “创建时”, “修饰时”

实施例:

nircmd.exe setfiletime “C:\ TEMP \ myfile.txt的”,“24-06-2003 17: 57:11“”22-11-2005 10:21:56“

相关问题