这个 vbscript 如何与 运行 命令一起正常工作?

How can this vbscript work properly with run command?

我想使用 batch/vbs 解决方案压缩一些文件夹,如下所示:https://superuser.com/a/112094

这个可行,但原始解决方案使用 "sleep"- 函数并且我的存档文件大小不同,因此无法正常工作。我的想法是使用 运行 命令(等待参数),但它失败了。

set FILETOZIP=C:\users\xyz\documents\folderOrfile
set TEMPDIR=C:\users\xyz\documents\temp
rmdir %TEMPDIR% /s /q
mkdir %TEMPDIR%
xcopy /s %FILETOZIP% %TEMPDIR%

echo Set objArgs = WScript.Arguments > _zipIt.vbs
echo InputFolder = objArgs(0) >> _zipIt.vbs
echo ZipFile = objArgs(1) >> _zipIt.vbs
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipIt.vbs
echo Set objShell = CreateObject("Shell.Application") >> _zipIt.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipIt.vbs

echo theString = objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs
echo objShell.Run theString, 1, true >> _zipIt.vbs

CScript  _zipIt.vbs  %TEMPDIR%  C:\users\xyz\documents\someArchive.zip 

pause

错误信息如下:

Object doesn't support this property or method: objShell.Run

我怎样才能让脚本等到 zip 创建完成?

您混淆了 Shell.ApplicationWScript.Shell 对象。只有后者有一个 Run 方法。你必须换行

echo objShell.Run theString, 1, true >> _zipIt.vbs

echo CreateObject("WScript.Shell").Run theString, 1, true >> _zipIt.vbs

话虽如此,尝试 Run CopyHere 方法返回的内容对您毫无帮助。使用 Shell.Application 压缩 files/folders 的问题是当 (VB) 脚本终止时对象会自动销毁,从而中断未完成的复制操作。要么定义足够长的休眠时间,要么 wait in a loop.

撇开错误不谈,如果您想等到文件创建完成,请考虑查看 loops and IF EXIST

类似这样的方法可行:

:CHECKFILE
IF EXIST C:\users\xyz\documents\someArchive.zip GOTO FOUNDFILE
GOTO CHECKFILE

:FOUNDFILE
REM Do something with the file here