Windows 这个vbscript如何使用run命令正常工作?

Windows 这个vbscript如何使用run命令正常工作?,windows,command-line,vbscript,cmd,zip,Windows,Command Line,Vbscript,Cmd,Zip,我想用batch/vbs解决方案压缩一些文件夹,如下所示: 这一个可以工作,但是原始的解决方案使用了“sleep”函数,并且我的归档文件有不同的文件大小,所以这无法正常工作。我的想法是使用Run命令(wait参数),但它失败了 set FILETOZIP=C:\users\xyz\documents\folderOrfile set TEMPDIR=C:\users\xyz\documents\temp rmdir %TEMPDIR% /s /q mkdir %TEMPDIR% xcopy /s

我想用batch/vbs解决方案压缩一些文件夹,如下所示:

这一个可以工作,但是原始的解决方案使用了“sleep”函数,并且我的归档文件有不同的文件大小,所以这无法正常工作。我的想法是使用Run命令(wait参数),但它失败了

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
错误消息如下所示:

对象不支持以下属性或方法:objShell.Run


如何才能使脚本等待zip创建?

您混淆了
Shell.Application
WScript.Shell
对象。只有后者有
Run
方法。你得换线

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


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

您混淆了
Shell.Application
WScript.Shell
对象。只有后者有
Run
方法。你得换线

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


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

错误放在一边,如果您想等到创建文件时考虑查看和

类似这样的方法可能会奏效:

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

:FOUNDFILE
REM Do something with the file here

错误,如果您想等到创建文件,请考虑查看和

类似这样的方法可能会奏效:

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

:FOUNDFILE
REM Do something with the file here

这并不能解决问题。VBScript代码首先创建一个空zip文件,因此无需检查它是否存在。此外,当前的问题是,进行压缩的COM对象异步运行,但在脚本执行时终止,因此如果此时还没有完成复制,复制将中止。是的,您的答案很好地解决了他的代码的问题(这就是为什么我对它投了赞成票)然而,我试图回答他的实际问题,即
我如何才能实现脚本等待zip创建?
尽管存在其他问题。我认为你误解了代码。所有
echo
语句都创建一个VBScript,通过
cscript_zipit.vbs…
执行。这个VBScript既创建zip文件,又将文件复制到其中。在运行VBScript之前检查zip文件是否存在会创建一个无限循环。我明白你的意思。我修改了
FOUNDFILE
部分,因此我的答案是代码不可知您仍然不明白。整个zip处理(创建和复制)由VBScript完成。处理在执行VBScript时开始,在VBScript终止时结束。所有这些都是批处理文件中的一条语句(
cscript_zipit.vbs…
),因此在批处理代码中执行的任何检查或循环都不会有任何帮助。这并不能解决问题。VBScript代码首先创建一个空zip文件,因此无需检查它是否存在。此外,当前的问题是,进行压缩的COM对象异步运行,但在脚本执行时终止,因此如果此时还没有完成复制,复制将中止。是的,您的答案很好地解决了他的代码的问题(这就是为什么我对它投了赞成票)然而,我试图回答他的实际问题,即
我如何才能实现脚本等待zip创建?
尽管存在其他问题。我认为你误解了代码。所有
echo
语句都创建一个VBScript,通过
cscript_zipit.vbs…
执行。这个VBScript既创建zip文件,又将文件复制到其中。在运行VBScript之前检查zip文件是否存在会创建一个无限循环。我明白你的意思。我修改了
FOUNDFILE
部分,因此我的答案是代码不可知您仍然不明白。整个zip处理(创建和复制)由VBScript完成。处理在执行VBScript时开始,在VBScript终止时结束。所有这些都是批处理文件(
cscript_zipit.vbs…
)中的一条语句,因此在批处理代码中执行的任何检查或循环都不会有任何帮助。