shell - 使用 VBA Shell 命令提取文件夹中的所有 .gz 文件

标签 shell vba excel extract

我有以下 VBA 代码来提取给定目录中的所有文件。

Sub extractAllFiles()

    Dim MyObj As Object, MySource As Object, file As Variant
    Dim shellStr As String

    file = Dir("C:\Downloads\")
    While (file <> "")
        If InStr(file, ".gz") > 0 Then
            shellStr = "winzip32 -e C:\Downloads\" & file & " C:\Downloads\"
            Call Shell(shellStr, vbHide)
        End If
        file = Dir
    Wend

End Sub

当我执行这个子例程时,我收到运行时错误 53,“找不到文件”错误。当我复制 shellStr... 示例: winzip32 -e C:\Downloads\file1.gz C:\Downloads\ 并从命令提示符执行它时,它工作得很好!我将 file1.gz 中的文本文件提取到下载目录。然而,从 VBA 运行它似乎不起作用。

有人可以透露一些信息吗?

最佳答案

您应该尝试使用 shell 命令的完整路径,如下所示,这对我有用:

Sub extractAllFiles()

  Dim MyObj As Object, MySource As Object, file As Variant
  Dim shellStr As String

  file = Dir("C:\Downloads\")
  While (file <> "")
    If InStr(1, file, ".gz") > 0 Then
      shellStr = "C:\Program Files (x86)\WinZip\winzip32 -e C:\Downloads\" & file & " C:\Downloads\"
      Call Shell(shellStr, vbHide)
    End If
    file = Dir
  Wend

End Sub

我的 winzip 安装为 C:\Program Files (x86)\WinZip\winzip32。你应该用你的。 您的安装路径可能是:

C:\Program Files\WinZip\winzip32

关于shell - 使用 VBA Shell 命令提取文件夹中的所有 .gz 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20222353/

相关文章:

excel - 强制 Excel 使用英文公式格式

VBA从另一列中的日期中减去今天的日期并返回一个数字

VBA Web Scrape (getelementsbyclassname)

linux - 截断匹配字符串的最后一行直到 EOF 的 shell 命令输出

shell - Perl 捕获子进程的 STDERR 和 STDOUT

bash - 在 block bash 脚本中写入多行

excel - 从文本中解析子字符串

linux - Bash 脚本 'if' 调用带有参数的函数的语句

vba - 在 Excel 中列出文件夹和子文件夹中的所有文件

arrays - 有没有更快的方法来比较 VBA 中动态数组之间的数据?