電子書籍の厳選無料作品が豊富!

vbsのcopyhere関数でファイルのコピーを行うスクリプトを作成しました。コピー自体は問題なく出来るのですが、コピー元のファイルが存在しなかった場合は何も実行されないまま次の処理へ行ってしまうので、そういう場合にエラー用の処理をさせたいと考えてます。
Errメソッド使えばいいと思うのですがうまくいかなかったのでご教授ください。

試しに作成したvbs-----------------------------------------
On Error Resume Next

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(strTargetFolder) 'コピー先フォルダの設定

objFolder.CopyHere strCopyFile , &H10 '
set objShell = Nothing

'コピーが失敗した場合に実行させる。
if Err.Number <> 0 Then
MsgBox "インストーラーをコピーできませんでした。","コピーに失敗しました"
WScript.Quit
end if

↓正常にコピー完了した後の処理

これでは上手くいきませんでした。
どうすればエラー時の処理を追加できるでしょうか?

A 回答 (1件)

errコードの帰りが0なので処理が実行されないのです。


set objShell = Nothing の次に
msgbox err
と一行入れて試してください。
0が帰ってくるはずです。
これでは On Error Resume Nextにひっかりません。
こういう場合は FileExists も使えないので
元のフォルダーにいくつファイルが入っているかを
調べて何もない場合に処理を実行する必要があります。
コピー元のフォルダのフォルダオブジェクトをつくって
そのオブジェクトのitemsメソッドでフォルダーの中身を取得します。
たとえば
strTargetFolderの設定が書かれていないので既知のフォルダーだとして
下記xxxxを入れ替えで
Set strOrigFolder = objShell.NameSpace(xxxx) 'コピー元フォルダの設定
Set objFolderItems = strOrigFolder.Items()
if objFolderItems.count=0 then 'countでファイルの個数を知る
MsgBox "ファイルが存在しませんでした。","コピーに失敗しました"
WScript.Quit
end if
でどうでしょう。

if Err.Number <> 0 Then
のスクリプトもエラー時に必要ですので残します。

実際に組んで実行していませんので保証はできません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!