有什么我需要参考的吗?我该如何使用:
Dim fso As New FileSystemObject
Dim fld As Folder
Dim ts As TextStream
Run Code Online (Sandbox Code Playgroud)
我收到错误,因为它无法识别这些对象.
我正在寻找一个VBA脚本,它将循环遍历指定文件夹的所有子文件夹.当我说所有子文件夹时,我指的是指定文件夹中的每个文件夹,以及其中的每个文件夹,以及其中的每个文件夹...理论上可能存在无限的嵌套子文件夹,但实际上它可能不会超过3或4.我使用VBA脚本运行的对象,所以,一旦我循环到该文件夹,我可以检查一些文件的属性(但我知道如何做到这一点的一部分).
谢谢您的帮助!
这个问题与包含已知目录的先前问题中列出的"类似"问题不同,而这里需要找到已知和未知的目录.还需要多层子目录.你们真的应该在解开"重复"之前阅读这个问题.
我正在尝试创建ActiveXObject(使用FieSystemObject)但它只在IE中支持.
有没有办法让它在Chrome或FF中运行?我需要读取特定给定文件夹中的所有文件,并列出这些文件.
那么,还有另一种方法吗?
使用C#,我找到了目录的总大小.逻辑是这样的:获取文件夹中的文件.总结总大小.查找是否有子目录.然后进行递归搜索.
我也尝试了另一种方法:使用FSO(obj.GetFolder(path).Size).这两种方法的时间差别不大.
现在的问题是,我在一个特定的文件夹中有成千上万的文件,它至少需要2分钟才能找到文件夹大小.此外,如果我再次运行程序,它会很快发生(5秒).我认为窗口正在缓存文件大小.
有什么方法可以减少我第一次运行程序时所花的时间吗?
编辑:我正在尝试读取特定文件夹中的所有文件并列出其中的文件,而不是读取特定文件的内容.我只是尝试简单地创建一个FileSystemObject,它也没有做任何事情.我显示一个警告(弹出)beforfe制作FileSystemObject,然后一个警告(未显示).所以问题在于简单地创建对象.
原版的:
我试图使用JavaScript读取文件夹中的所有文件.
它是一个本地HTML文件,它不会在服务器上,所以我不能使用PHP.
现在我正在尝试读取特定给定文件夹中的所有文件,但它在我创建的点上没有做任何事情 FileSystemObject
这是我使用的代码,警报显示到2,然后停止.
alert('1');
var myObject, afolder, date;
alert('2');
myObject = new ActiveXObject("Scripting.FileSystemObject");
alert('3');
afolder = myObject.GetFolder("c:\\tmp");
alert('4');
date = afolder.DateLastAccessed;
alert("The folder"+name+" is a temporary folder.");
Run Code Online (Sandbox Code Playgroud)
我这样做是对的吗?
谢谢!
我的驱动器c上有一个简单的vbs文件:包含以下内容:
Set objShell = CreateObject("Scripting.FileSystemObject")
Run Code Online (Sandbox Code Playgroud)
当我试图启动它时,我收到错误
c:\ fso.vbs(1,1)Microsoft VBScript运行时错误:ActiveX组件无法创建对象:'Scripting.FileSystemObject'
我试图以管理员身份登录并执行wscript -regserver,但没有帮助.
有谁可以帮助我吗?
我需要在excel 2010中使用VBA从远程服务器上的文件夹中获取文件名集合.我有一个有效的功能,在大多数情况下它可以完成这项工作,但远程服务器经常有可怕的,可怕的网络性能问题.这意味着循环说300个文件将他们的名字放入一个集合可能需要10分钟,文件夹中的文件数量可能会增加到数千,所以这是不可行的,我需要一种方法来获取所有的文件名在单个网络请求中而不是循环.我相信它连接到占用时间的远程服务器,因此单个请求应该能够在一次通过中快速获得所有文件.
这是我目前的功能:
Private Function GetFileNames(sPath As String) As Collection
'takes a path and returns a collection of the file names in the folder
Dim oFolder As Object
Dim oFile As Object
Dim oFSO As Object
Dim colList As New Collection
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(folderpath:=sPath)
For Each oFile In oFolder.Files
colList.Add oFile.Name
Next oFile
Set GetFileNames = colList
Set oFolder = Nothing
Set oFSO = Nothing
End Function
Run Code Online (Sandbox Code Playgroud) 我试图用vba从pdf文件中提取表格并将它们导出到excel.如果一切都按照应有的方式进行,它应该全部自动完成.问题是表格没有标准化.
这就是我到目前为止所拥有的.
和代码:
With New Scripting.FileSystemObject
With .OpenTextFile(strFileName, 1, False, 0)
If Not .AtEndOfStream Then .SkipLine
Do Until .AtEndOfStream
//do something
Loop
End With
End With
Run Code Online (Sandbox Code Playgroud)
一切都很好.但现在我遇到了从文本文件中提取表格的问题.我想要做的是VBA找到一个字符串,例如"年收入",然后将数据输出到列中.(直到桌子结束.)
第一部分并不是很困难(找到某个字符串),但我将如何处理第二部分.文本文件看起来像这个Pastebin.问题是文本没有标准化.因此,例如,一些表具有3年列(2010 2011 2012),而一些表仅有两个(或1),一些表在列之间具有更多空格,而一些表不包括某些行(例如Capital Asset,net).
我正在考虑做这样的事情,但不确定如何在VBA中进行.
我将我的第一个版本基于Pdf进行优秀,但在网上阅读的人并不推荐OpenFile,而是FileSystemObject(尽管看起来速度要慢很多).
有什么指示让我开始,主要是在第2步?
我正在使用Microsoft Scripting Runtime(FSO)解析文件夹并生成所有内容的列表,文件夹在网络上,结果路径最终超过260.我的最小代码如下: -
Private Sub ProcessFolder(ByVal StrFolder As String)
Dim Fl As File
Dim Fldr As Folder
Dim RootFldr As Folder
Set RootFldr = FS.GetFolder(StrFolder)
For Each Fl In RootFldr.Files
Debug.Print Fl.Path
Next
For Each Fldr In RootFldr.SubFolders
DoEvents
ProcessFolder Fldr.Path
Next
Set RootFldr = nothing
End sub
Run Code Online (Sandbox Code Playgroud)
在某个级别StrFolder长度变为259,Set RootFldr ...文件夹行工作但是For Each Fl In RootFldr.Files给出了错误76: Path not found,可能是因为内容导致路径突破260限制.
查看Windows资源管理器时,文件夹中有文件.我正在使用Excel作为此代码的主机,因为我将结果输出到工作簿.
为了清楚地了解我的问题及其背景,我需要使用FSO(很高兴能够显示替代品,如果它们存在)来访问网络路径深度超过260个字符的文件.我需要它作为FSO,因为我的工具是获取文件夹路径和文件路径,名称,大小创建和修改.
我正在尝试使用 C# 删除网络上共享位置中的文件夹。有些文件夹路径太长,Windows 无法处理。我为此尝试了多种选择。我发现最好的方法是创建一个 FileSystemObject,将 \\?\ 添加到路径中,然后在要删除的路径上调用 DeleteFolder,这适用于我的本地计算机上的太长路径,因为我映射了 C 等驱动器: 和 G: 等,但是当我尝试在网络共享文件夹上使用它时,我得到 HRESULT: 0x800A004C (CTL_E_PATHNOTFOUND) 或值不在预期范围内。
以下是我的代码:
private static void DeletePathWithLongFileNames(string path)
{
string tmpPath = @"\\?\" + path;
FileSystemObject fso = new FileSystemObject();
fso.DeleteFolder(tmpPath, true);
}
Run Code Online (Sandbox Code Playgroud)
举例来说,网络+共享文件夹是 \\myServer\mySharedFolder\folder1\etc\etc,这将是我发送到删除函数的路径字符串,然后 tmpPath 显示为“\\\\?\ \\\\myServer\\mySharedFolder\\folder1\\etc\\etc"
我对UNC了解不多,所以我不知道这是否是错误的。我很确定我的 tmpPath 变量有问题,但我又不确定。也许这是一个语法错误,但我一生都无法弄清楚出了什么问题。先谢谢您的帮助
编辑:我相信我已经找到了答案,我现在正在测试它。到目前为止,它对我有用。如果我在以下路径 \\?\UNC\server\sharedFolder\folder1\etc\etc 上运行 DeleteFolder 方法,这似乎有效。现在我只需要弄清楚如何删除所有这些额外的斜杠。
编辑2:这确实有效,在网络上的共享文件夹上进行了测试。这只是因为我不理解 UNC 路径。