无法记录 WinZip 命令行进程
Cannot log WinZip command line process
我得到了以下通过 WinZip 命令行压缩一些测试文件的 vbscript 测试代码:
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 过程的 运行 以确保成功完成和 error/s 外观。如果出现错误,我想做的是获取 WinZip returns.
的确切消息
我试过几种方法:
- 按照 this link 中的建议,在命令行末尾添加一个带有文件名的大于号 (
>
)。此方法不会在文件上写入任何内容。
- 我还尝试获取 shell 执行的 STDOUT 和 STDERR,但它 returns 是一个空字符串。
有谁知道我 can/should 还尝试了什么?
这是一个图形程序。它不使用控制台。所以你不能。
如果您使用正版程序,您会发现 PKZip 有命令行版本。 https://www.pkware.com/software/pkzip
正如@CheranShunmugavel 在对另一个答案的评论中指出的那样,知识库文章指的是 WinZip Command Line utility. If you want to work with WinZip on the command line I strongly recommend you get that add-on, even though the regular WinZip executable does support some basic command line parameters。
注意,如果你想使用输出重定向(>
)你必须 运行CMD中的命令,因为重定向是由命令提供的口译员。为了简化处理,我还建议使用 Run
method rather than the Exec
方法,除非您需要以编程方式从 STDOUT and/or 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
我得到了以下通过 WinZip 命令行压缩一些测试文件的 vbscript 测试代码:
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 过程的 运行 以确保成功完成和 error/s 外观。如果出现错误,我想做的是获取 WinZip returns.
的确切消息我试过几种方法:
- 按照 this link 中的建议,在命令行末尾添加一个带有文件名的大于号 (
>
)。此方法不会在文件上写入任何内容。 - 我还尝试获取 shell 执行的 STDOUT 和 STDERR,但它 returns 是一个空字符串。
有谁知道我 can/should 还尝试了什么?
这是一个图形程序。它不使用控制台。所以你不能。
如果您使用正版程序,您会发现 PKZip 有命令行版本。 https://www.pkware.com/software/pkzip
正如@CheranShunmugavel 在对另一个答案的评论中指出的那样,知识库文章指的是 WinZip Command Line utility. If you want to work with WinZip on the command line I strongly recommend you get that add-on, even though the regular WinZip executable does support some basic command line parameters。
注意,如果你想使用输出重定向(>
)你必须 运行CMD中的命令,因为重定向是由命令提供的口译员。为了简化处理,我还建议使用 Run
method rather than the Exec
方法,除非您需要以编程方式从 STDOUT and/or 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