2015-02-02 5 views
1

Я пытаюсь разархивировать файл с помощью кода VBA. Я использую 7z командной строки для распаковки файла. Однако команда работает при запуске из обычной командной строки, но эта же команда не работает при запуске через код VBA.Командная строка не работает при запуске от vba

Command: 
"C:\Program Files\7-Zip\7z.exe" x "C:\Users\Public\AppData\Local\Temp\Sample.zip" 

Для дальнейшего понимания, я пытаюсь извлечь файл DOCX и именно поэтому я переименование его в .zip и последующее извлечение.

Sub tst() 
Dim MyFile As String, Outdir As String, Cmdstr As String 
MyFile = Chr(34) & "c:\TMP\ratings.gz" & Chr(34) 
Outdir = Chr(34) & "c:\tmp\0" & Chr(34) 
Cmdstr = "c:\Program Files\7-Zip\7z.exe" & " e " & MyFile & " -o" & Outdir 
Debug.Print Cmdstr 
Call Shell(Cmdstr, 1) 
End Sub 

Я использовал этот тип функции (аналогичный), чтобы распаковать файл.

+0

Можете ли вы показать некоторые из кода VBA, окружающего ваш код команды? – Chrismas007

+0

Sub tst() Dim MyFile As String, Outdir As String, Cmdstr As String MyFile = Chr (34) & "c: \ TMP \ ratings.gz" & Chr (34) Outdir = Chr (34) & " c: \ tmp \ 0 "& Chr (34) Cmdstr =" c: \ Program Files \ 7-Zip \ 7z.exe "&" e "& MyFile &" -o "& Outdir Debug.Print Cmdstr Вызов Shell (Cmdstr, 1) End Sub Я использовал этот тип функции (аналогичный), чтобы распаковать файл. – Mohankumar

ответ

0

Отсутствие надлежащего цитирую, должны быть

Cmdstr = """c:\Program Files\7-Zip\7z.exe""" & " e " & MyFile & " -o" & Outdir 

командной строки Версия из 7-Zip является 7za.exe, а не 7z.exe.

Я не уверен, что запуск приложений CLI с Shell методом, но следующий может работать:

Cmdstr = "cmd /D /C " & """full path to 7za\7za.exe""" & " e " & MyFile & " -o" & Outdir 

Редактировать. Чтобы сохранить структуру папок, используйте команду 7z с командой x вместо команды e. В то время как команда e копирует все извлеченные файлы в один каталог, команда z извлекает файлы из архива с их полными путями в текущем каталоге или в выходной каталог, если это указано. Таким образом, вы можете определить Cmdstr следующим образом:

Cmdstr = """c:\Program Files\7-Zip\7z.exe""" & " x " & MyFile & " -o" & Outdir 
+0

Спасибо за ваш ответ. Первый метод работает, но он извлекает все файлы в один каталог и приводит к потере структуры папок. Второй метод не работает, если задано как 7za.exe Я сделал некоторые изменения и работал (по крайней мере частично) Cmdstr = cmd/D/C "c: \ Program Files \ 7-Zip \ 7z.exe" x C : \ Users \ mohankumard \ AppData \ Local \ Temp \ 9781437706703-f010.zip Вышеприведенная команда извлекает файл в C: \ Users \ Public \ AppData \ Roaming \ Microsoft \ Templates Есть ли способ изменить извлечение метод? – Mohankumar

Смежные вопросы