这是批处理文件代码:
@echo off >summary.txt (
for %%F in (*chkpackage.log) do findstr /l %1 "%%F" nul||echo %% F:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A:N/A)
以下是调用批处理文件的VBA Excel中的代码:
FileSet = Sheet1.Range("C13")
txtFpath = Sheet1.Range("C7").Value
FilePath = txtFpath & "\res.bat"
ChDrive "D"
RSP = Shell(Environ$("COMSPEC"), vbNormalFocus)
Application.Wait Now + TimeValue("00:00:03")
SendKeys "CD " & txtFpath & "{ENTER}", True
Application.Wait Now + TimeValue("00:00:03")
SendKeys "start " & FilePath & " " & FileSet & "{ENTER}", True
Application.Wait Now + TimeValue("00:00:03")
SendKeys "exit " & "{ENTER}", True
Application.Wait Now + TimeValue("00:00:03")
SendKeys "exit " & "{ENTER}", True
但我不想使用批处理文件。我想将其更改为在VBA上使用的命令。 所以我只能使用VBA并运行命令行,而不是使用VBA来调用批处理和命令行。
简单的解释是我想将批处理文件中的命令放入Excel-VBA并使用VBA调用cmd
运行它并自动将该命令输入到cmd
代码Sendkeys
代码。
答案 0 :(得分:3)
您可以添加Microsoft Scripting Runtime
(来自VBA IDE的工具 - >参考)的引用,该引用提供FileSystemObject并允许您执行以下操作:
Dim fso As New FileSystemObject
Dim fle As Variant
For Each fle In fso.GetFolder(txtFpath).Files
'processing here
Next
您可以使用Like运算符将文件限制为特定模式:
For Each fle In fso.GetFolder(txtFpath).Files
If fle.Name Like "*chkpackage.log" Then
'processing here
End If
Next
您可以使用OpenAsTextStream方法获取TextStream对象,使用 ReadAll 方法读取文件内容:
For Each fle In fso.GetFolder(txtFpath).Files
If fle.Name Like "*chkpackage.log" Then
Dim txt As TextStream, contents As String
Set txt = fle.OpenAsTextStream(ForReading)
contents = txt.ReadAll
txt.Close
'process contents of file here
End If
Next
在解析之前,您可以使用Split(contents, vbCrLf)
将内容拆分为一个行数组(如果行分隔符是Unix / Mac而不是Windows,则使用vbLf
或vbCr
。
或者,您可以使用ReadLine
方法逐行读取文件。您需要检查AtEndOfStream
属性,以确保您没有尝试读取文件的末尾:
'Within the For Each loop
Dim txt As TextStream, currentLine As String
Set txt = fle.OpenAsTextStream(ForReading)
Do While Not txt.AtEndOfStream
currentLine = txt.ReadLine
'process current line here
Loop
txt.Close