Winzip не запускается с пробелом в пути к файлу

Я использовал код из Извлечь весь файл .gz в папке с помощью команды VBA Shell для извлечения файлов .gz. Проблема в том, что если в пути к файлу есть пробел, код не работает, если пробела нет, он работает, как показано ниже: < strong>Обратите внимание, что в первом примере нет '_', но есть пробел ' ' между '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

Я хочу, чтобы первый пример работал, но почему это не так?

Ошибок нет. Код запускается, открывает винзип, но он пустой, ни один файл не распаковывается! Большое спасибо.


person user2952447    schedule 27.12.2013    source источник


Ответы (1)


Попробуйте поместить пути в строке оболочки в кавычки:

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\"""

Если вы еще не знали, две двойные кавычки ("") оцениваются как одна двойная кавычка внутри строки. Сравните с такими языками, как C, где обратная косая черта использовалась бы для выхода из кавычки (\").

person Blackhawk    schedule 27.12.2013
comment
Я пробовал это без успеха. Я пытаюсь понять логику вашего предложения. Почему вы предложили это, если ошибка заключается исключительно в разрыве между K и L? Мне полезно знать, как идти вперед. Спасибо. - person user2952447; 27.12.2013
comment
@user2952447 user2952447 Причина в том, что при запуске программ командной строки параметры пути часто анализируются с помощью пробелов. Помещая их в кавычки, вы заставляете весь путь рассматриваться как один токен. Попробуйте вручную в командной строке и посмотрите, что получится! - person Blackhawk; 27.12.2013