如果文件夹中只有一个文件,我可以在不知道其名称的情况下选择它或者遍历文件夹中的文件吗?
(代码是VBS,但它可以是任何东西,FSO在这里是有趣的部分.)
这不适合我:
dim fso set fso = CreateObject("Scripting.FileSystemObject") dim myFolder Set myFolder = fso.getFolder("E:\test") Dim myfiles Set myfiles = myFolder.Files WScript.Echo myfiles.Item(0).Path
两者都没有WScript.Echo myfiles(0).Path
奏效.(测试指数0,1都失败了.)
使用for each来获得一个文件似乎有点过分.此外,我不应该以某种方式迭代一个简单的For
循环,而不是For Each
?所以必须有索引......我似乎无法找到它们.
不,您不能在不知道其名称的情况下选择文件或迭代文件夹中的文件,至少不能使用FileSystemObject
实例.如文档所述Item
,Files
集合的属性需要项目的名称,而不是其索引:
物品属性(文件)
获取Files对象中的指定项
句法
object.Item(key)[ = newitem]参数
对象
必需.File对象的名称.spec
必需.项目的名称.
并非每个集合都允许通过索引访问.
如果你正在寻找一个神奇的技巧,你可以做这样的事情:
dir = "C:\your\folder" Set sh = CreateObject("WScript.Shell") Set ex = sh.Exec("cmd /c dir /b """ & dir & """") While ex.Status = 0 : WScript.Sleep 100 : Wend filename = Split(ex.StdOut.ReadAll, vbNewLine)(0) Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(fso.JoinPath(dir, filename))
然而,这种方法既不是非常优雅也不是非常强大,我没有看到它的优势
dir = "C:\your\folder" Set fso = CreateObject("Scripting.FileSystemObject") For Each item In fso.GetFolder(dir).Files Set f = item Next