2016-03-24 17 views
0

私はここのようなバッチ/ VBS溶液で一部のフォルダを圧縮したい:https://superuser.com/a/112094このvbscriptは、実行コマンドでどのように正しく動作しますか?

この1は動作しますが、元の溶液は、「スリープ」を使用しています - 機能と私のアーカイブは異なるfilesizesを持って、このwouldn'tように、正しく機能します。私の考えは、実行コマンド(待機パラメータ)を使用することでしたが、失敗します。どのように私は、スクリプトはジップまで待つことを達成することができますobjShell.Run

オブジェクトは、このプロパティまたはメソッドをサポートしていません:

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 

エラーメッセージは以下のとおりです。創造された?

答えて

2

あなたはShell.ApplicationWScript.Shellのオブジェクトを混同しています。後者のみがRunメソッドを持っています。あなたはすべてであなたを助けにはなりませんCopyHereメソッドによって返されるものRunにしようと、言ったことで

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

にライン

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

を変更する必要があると思います。ファイル/フォルダの圧縮にShell.Applicationを使用する際の問題は、(VB)スクリプトが終了するとオブジェクトが自動的に破棄され、未完了のコピー操作が中断されることです。十分に長いスリープ時間を定義するか、またはwait in a loopを定義します。あなたは、ファイルが作成されるまで待ちたい場合はさておき

1

エラーは、このような何かが、仕事ができるloopsIF EXIST

を見て考えてみましょう。

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

:FOUNDFILE 
REM Do something with the file here 
+0

問題が解決しないこと。 VBScriptコードは空のzipファイルを最初に作成するため、存在の有無を確認する必要はありません。また、圧縮を行っているCOMオブジェクトが非同期に実行されますが、スクリプトの実行時に終了するため、その時点でまだ終了していない場合はコピーが中止されます。 –

+0

ええ、あなたの答えは彼のコードで問題に対処するのにうまくやったのです(私はそれを拒否したのです)。実際の質問に答えようとしましたが、「ジップが作成されるまでスクリプトは待っています。他の問題。 –

+0

あなたはコードを誤解していると思います。すべての 'echo'文は、' cscript _zipit.vbs ... 'で実行される1つのVBScriptを作成します。この単一のVBScriptは、zipファイルを作成し、ファイルをコピーします。 VBScriptを実行する前にzipファイルが存在するかどうかを確認すると、無限ループが作成されます。 –

関連する問題