vbscript - 我可以使用 FileSystemObject 使用其索引从文件夹中获取单个文件吗?

标签 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

WScript.Echo myfiles(0).Path 也没有工作。 (索引 0,1 已测试,均失败。)

使用 for each 只获取一个文件似乎有点过头了。另外,我不应该能够以某种方式使用简单的 For 循环而不是 For Each 进行迭代吗?所以必须有索引...我似乎找不到它们。

最佳答案

不,您不能在不知道文件名称或遍历文件夹中的文件的情况下选择文件,至少不能使用 FileSystemObject 实例。如documented Files 集合的 Item 属性需要项目的 name,而不是其索引:

Item Property (Files)

Gets the specified item for in a Files object

Syntax

object.Item(key)[ = newitem]

Arguments

object
Required. The name of a File object.

spec
Required. The name of the item.

并非每个集合都允许按索引访问。

如果您正在寻找魔术,您可以这样做:

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

关于vbscript - 我可以使用 FileSystemObject 使用其索引从文件夹中获取单个文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34560643/

相关文章:

vbscript - 附加到内容类型的 ServerXMLHTTP

windows - wscript exec cmd.exe/c不报错

vbscript - 如何使用 UFT 单独迭代可见行

javascript - 使用 FileSystemObject write() 写入二进制数据

ms-access - 通过VBA获取laccdb文件的内容

vbscript - 用VBS每行读取一个txt文件

javascript - 如何在 javascript 中乘以空格以便在 ActiveX FSO Write() 方法中使用

javascript - 通过 Enterprise Architect 中的脚本访问嵌套元素

VBA 命令行对象请求登录,等待用户输入

vba - Excel VBA - PDF 文件属性