0

这是批处理文件代码:

@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代码。

4

1 回答 1

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)在解析之前使用将内容拆分为行数组(使用vbLf或者vbCr如果行分隔符是 Unix/Mac 而不是 Windows)。

或者,您可以使用该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
于 2012-12-11T07:43:16.070 回答