Не удается войти в процесс командной строки WinZip

Я получил следующий тестовый код vbscript, который архивирует некоторые тестовые файлы с помощью командной строки WinZip:

Dim strWinZipDir, strZipFileToCreate, strFilesToZip, strWinZip, strCommand

strWinZipDir = "C:\Program Files\WinZip\Winzip32.exe"
strZipFileToCreate = "C:\Users\ext_dirmod_01\Desktop\TestLog.zip"
strFilesToZip = """C:\Users\ext_dirmod_01\Desktop\FacturasGRA.vbs"" ""C:\Users\ext_dirmod_01\Desktop\Test Zip Windows.vbs"""

Set objFSO = CreateObject("Scripting.FileSystemObject")

strWinZip = objFSO.GetFile(strWinZipDir).ShortPath
strCommand = strWinzip & " -min -a -r """ & strZipFileToCreate & """ " & strFilesToZip

Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec(strCommand)

Do While objExec.Status = 0
Loop

То, что я хочу сделать, это регистрировать запуск процесса zip как для успешного завершения, так и для появления ошибок / с. В случае ошибки я хочу получить точное сообщение, которое возвращает WinZip.

Я пробовал несколько способов:

  • Добавление знака больше чем (>) с именем файла в конце командной строки, как это было предложено в этой ссылке. Этот метод ничего не записывает в файл.
  • Также я попытался получить STDOUT и STDERR выполнения оболочки, но он возвращает пустую строку.

Кто-нибудь знает, что еще я могу / должен попробовать?

2 ответа

Решение

Как отметил @CheranShunmugavel в комментарии к другому ответу, статья базы знаний относится к утилите командной строки WinZip. Если вы хотите работать с WinZip в командной строке, я настоятельно рекомендую вам приобрести это дополнение, хотя обычный исполняемый файл WinZip поддерживает некоторые основные параметры командной строки.

Обратите внимание, что если вы хотите использовать перенаправление вывода (>) вы должны выполнить команду в CMD, поскольку перенаправление обеспечивается интерпретатором команд. Для упрощения работы я бы также рекомендовал использовать Run метод, а не Exec метод, если вам не нужно программно читать из STDOUT и / или STDERR.

Set objShell = CreateObject("WScript.Shell")
rc = objShell.Run("cmd /c " & strCommand & " >C:\path\to\your.log 2>&1", 0, True)

If rc <> 0 Then WScript.Echo "An error occurred (" & rc & ")."
WScript.Quit rc

Это графическая программа. Он не использует консоль. Поэтому ты не можешь.

Если вы использовали подлинные программы, вы обнаружите, что PKZip имеет версии для командной строки. https://www.pkware.com/software/pkzip

Другие вопросы по тегам