vac*_*cip 2 vbscript filesystemobject fso
如果文件夹中只有一个文件,我可以在不知道其名称的情况下选择它或者遍历文件夹中的文件吗?
(代码是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
Run Code Online (Sandbox Code Playgroud)
两者都没有WScript.Echo myfiles(0).Path奏效.(测试指数0,1都失败了.)
使用for each来获得一个文件似乎有点过分.此外,我不应该以某种方式迭代一个简单的For循环,而不是For Each?所以必须有索引......我似乎无法找到它们.
不,您不能在不知道其名称的情况下选择文件或迭代文件夹中的文件,至少不能使用FileSystemObject实例.如文档所述Item,Files集合的属性需要项目的名称,而不是其索引:
物品属性(文件)
获取Files对象中的指定项
句法
Run Code Online (Sandbox Code Playgroud)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))
Run Code Online (Sandbox Code Playgroud)
然而,这种方法既不是非常优雅也不是非常强大,我没有看到它的优势
dir = "C:\your\folder"
Set fso = CreateObject("Scripting.FileSystemObject")
For Each item In fso.GetFolder(dir).Files
Set f = item
Next
Run Code Online (Sandbox Code Playgroud)