|
楼主 |
发表于 2013-10-18 15:04
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
使用Shell对象调用cmd遍历文件夹
本帖最后由 loquat 于 2013-10-18 15:59 编辑
特点就是效率高,以下是两种方法。
方法一:Exec方法,有一个黑窗口一闪而过
方法二:Run方法,有临时文件生成
具体cmd中dir的使用方法请在cmd中使用dir/?来查看。
- dir "C:\Program Files" /s /a:-d /b > C:\1.txt '遍历所有文件
- dir "C:\Program Files" /s /a:d /b > C:\1.txt '遍历所有目录
- dir "C:\Program Files" /s /b > C:\1.txt '遍历所有目录和文件
- dir "C:\Program Files\*.doc" /s /a:-d /b > C:\1.txt '遍历所有word文件
-
复制代码- Sub 方法一()
- Dim arr, t, folder$, brr
- folder = """" & "C:\Program Files" & """"
- t = Timer
- With CreateObject("WScript.Shell")
- brr = .Exec(Environ$("comspec") & " /c dir " & folder & " /s /a:-d /b").StdOut.ReadAll
- End With
- arr = Split(brr, vbCrLf)
- Debug.Print UBound(arr) & "个文件" & vbCrLf & Timer - t & "秒" & vbCrLf & arr(100)
- End Sub
复制代码
'---------------------------------------------------------------------------------------------
- Sub 方法二()
- Dim arr, t, folder$
- t = Timer
- folder = """" & "C:\Program Files" & """"
- With CreateObject("WScript.Shell")
- .Run Environ$("comspec") & " /c dir " & folder & " /s /a:-d /b > C:\temp.txt", 0, True
- End With
- Open "C:\temp.txt" For Input As #1
- arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
- Close #1
- Debug.Print UBound(arr) & "个文件" & vbCrLf & Timer - t & "秒" & vbCrLf & arr(100)
- End Sub
复制代码
'---------------------------------------------------------------------------------------------
补充内容 (2014-4-5 17:16):
shell调用在2007里是这样的call shell(filepath,windowstyle)
补充内容 (2014-12-21 14:19):
Shell函数默认是异步执行,不能实现同步。
使用Shell对象,第3个参数就是控制同步的参数。True-同步,False-异步 |
|