R:获取目录中所有文件的短文件名(文件名)列表

问题描述 投票:0回答:1

Problem

list.files(Path)返回目录Path中的文件名称向量。这很好,但我需要一个短文件名(SFN)的向量。例如,WageDataFile.csv的SFN是WAGEDA~1.csv(如果目录中没有其他文件,其中包含词干“WageDa”)。 SFN也称为8.3文件名。

Desired solution

具体来说,我希望有一个函数可以从操作系统中提取SFN而不是从list.files()的输出重构它(但是也欢迎从list.files()的输出重构SFN的方法)。

Code for reproducible case

这将在“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"
r windows directory filenames short-filenames
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.