0

我使用了使用 VBA Shell 命令提取文件夹中的所有 .gz 文件中的代码来提取 .gz 文件。问题是,如果文件路径中有间隙,则代码不起作用,如果没有间隙,它可以工作,如下图所示: 请注意,在第一个示例中,在“K”和“L”之间没有“_”但有一个间隙“”,因此文件路径有间隙, 而有效的示例有一个“_” ,并且整个文件路径没有间隙

'Example that doesn't work:

Sub extractAllFiles()

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

File = Dir("Z:\A_B_C\D_E_F\G_H_I\J_K L\_M_N_O\P_Q_R\*.gz")
While (File <> "")
If InStr(1, File, ".gz") > 0 Then
  shellStr = "C:\Program Files\WinZip\winzip32 -e Z:\A_B_C\D_E_F\G_H_I\J_K L\_M_N_O\P_Q_R\" & File & " Z:\A_B_C\D_E_F\G_H_I\J_K L\_M_N_O\P_Q_R\"
  Call Shell(shellStr, vbHide)
End If
File = Dir
Wend
End Sub




'Example that works:

Sub extractAllFiles()

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

File = Dir("Z:\A_B_C\D_E_F\G_H_I\J_K_L\_M_N_O\P_Q_R\*.gz")
While (File <> "")
If InStr(1, File, ".gz") > 0 Then
  shellStr = "C:\Program Files\WinZip\winzip32 -e Z:\A_B_C\D_E_F\G_H_I\J_K_L\_M_N_O\P_Q_R\" & File & " Z:\A_B_C\D_E_F\G_H_I\J_K_L\_M_N_O\P_Q_R\"
  Call Shell(shellStr, vbHide)
End If
File = Dir
Wend
End Sub

我想让第一个例子工作,但为什么不呢?

没有错误。代码运行,打开winzip,但它是空的,没有文件被解压!非常感谢。

4

1 回答 1

0

Try putting quotation marks around the paths in your shell string:

shellStr = "C:\Program Files\WinZip\winzip32 -e ""Z:\A_B_C\D_E_F\G_H_I\J_K L\_M_N_O\P_Q_R\" & File & """ ""Z:\A_B_C\D_E_F\G_H_I\J_K L\_M_N_O\P_Q_R\"""

In case you didn't already know, two double quotes ("") evaluates to a single double quote inside the string. Compare to languages like C where the backslash would be used to escape the quotation mark (\").

于 2013-12-27T16:45:52.460 回答