如何批量给自己的文件重命名

应用Windows日常办公,很多时候为了更快识别自己文件夹的文件,我们常需要对文件进行重命名自己偏好习惯,个位数的文件重命名,无非就是耗费自己一两分钟的时间,点点鼠标,然后重命名,输入文件名即可

前面分享了:Linux命令行,菜鸟报错之隐藏在换行中的字符^M,我们下载下来的文件,那么好了,现在问题是我需要对下列500+文件进行个性化重命名,要在每个文件 前加上数据收集的年份区间,

比如2007_2008_DEMO_E.XPT,难道还选择鼠标点点:

是不是看得眼花缭乱。你要是不乱的话,反正我是乱了!!!

要是鼠标点点点,想想这个工作量,都是可怕。而且,中间还不能出错喔,万一年份搞错了,那 排查起来,可又是想跳楼的心都有。

那么,有没有更好的方法?

听过Jimmy老师的课的都知道啦,解决问题的能力,就是编程的能力。这种活,必须是代码批量处 理啊。。

OK,自己想要的最终命名格式为:把每个文件之前加上年份区间,而且保证每个文件的对应年份准确无 误,这样子:

把文件下载网站中的注释文件复制下载下来,其长这样:

保存成TXT文件,然后读进R,后面就开心的玩耍吧:

代码语言:javascript
复制
rm(list = ls())
##读入文件
dat <- data.table::fread('NHANESLaboratoryData.txt',
             data.table = F)
##去除RDC Only文件,因为文件不对外开放,没有下载链接
library(tidyverse)
tmp <- str_detect(dat$`Data File`,'RDC Only')
tmp <- dat[!tmp,]
tmp$`Data File` <- unlist(lapply(str_split(tmp$`Data File`,' '), 
function(x)x[[1]][1]))

##把文件夹下以XPT后缀的文件全部读取进来
xpt <- as.data.frame(list.files('.','.XPT'))
colnames(xpt) <- 'names'

处理后tmp文件就长这样了:

xpt读进来处理后成这样:

好办,通过xpt[,2]和tmp[,'Data File']列进行匹配,以确定自己是否全部文件已经下载完成。

最后就是拼接,tmp文件中,第一列(Years)和第四列(Data File)拼接起来:

代码语言:javascript
复制
mainNames <- unlist(lapply(str_split(xpt[,1],'\.'), function(x)x[1]))

xpt <- mutate(xpt,mainNames = mainNames)

##通过xpt[,2]和tmp[,'Data File']列进行匹配

tmp <- tmp[tmp`Data File` %in% xptmainNames,]

##构建最后重命名的文件名称,成为2003—2004_L06AGE_C.XPT

tmpfileRename &lt;- paste0(tmpYears,'_',tmp$Data File,'.XPT')

tmp`Data File` &lt;- paste0(tmpData File,'.XPT')

##其实就是一个函数搞定,批量,无误!
file.rename(tmp`Data File`,tmpfileRename)

最后,文件重命名为:

完美!!这样看起来,极大利于后续处理了。任务完成!!!(偷偷的告诉你哟,file.rename函数来自 于base包的哟,xpt文件为SAS数据文件,可以通过R中,foreign包一键读取哟)