list.files(Path)
返回目录Path
中文件名的向量。很好,但是我需要一个短文件名(SFN)的向量。例如,WageDataFile.csv的SFN是WAGEDA〜1.csv(如果目录中没有其他词干为“ WageDa”的文件)。 SFN也称为8.3文件名。
具体来说,我希望有一个功能可以从操作系统中提取SFN,而不是从list.files()
的输出中重建SFN(但是欢迎从list.files()
的输出中重建SFN的方法) )。
这将在“ E:/ FileNameTest”处创建一组具有可变名称长度的文件:
setwd("E:/FileNameTest")
library(stringi)
nFiles = 12
minNameLength = 2
maxNameLength = 12
set.seed(1)
FileNames =
stri_rand_strings(nFiles,
length=sample(minNameLength:maxNameLength,nFiles,replace=T),
'[A-Za-z0-9]')
file.create(FileNames)
这是FileNames
的内容:
[1] "lUizNmvDe7" "GN0Nr" "LTbUBpfn" "6i" "Poe" "mYWm1Tjg"
[7] "TrRF46JWfPuI" "SKe" "FTl5sLqLKTtr" "OmxQ" "iO" "KkCi7F"
这是我从这些文件名中需要的SFN列表(编辑:缩写的名称应大写):
[1] "6i" "FTL5SL~1" "GN0Nr" "iO" "KkCi7F" "LTbUBpfn" "LUIZNM~1" "mYWm1Tjg" "OmxQ"
[10] "Poe" "SKe" "TRRF46~1"
答案 0 :(得分:0)
这是一个解决方案(基于MrFlick的评论),可能依赖于关于dir
输出的无效假设。具体来说,我假设输出的页眉和页脚始终分别占用5行和2行,并且dir /x/a:-d
输出中的字段宽度始终是恒定的。
library(stringr)
FileList = shell("dir /x/a:-d", intern=T)
FileList = FileList[6:(length(FileList)-2)]
SFN = str_replace(str_sub(FileList, 39, 46), " ", "")
Name = str_sub(FileList, 52, -1)
NameList = ifelse(str_length(SFN)>0, SFN, Name)