質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

2回答

6152閲覧

VBSのrobocopyについて

ionn

総合スコア13

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2018/04/26 20:44

コピー元 ネットワークドライブでZに割り振り
srcDir = "\200.178.30.210\d
コピー先が
destDir = "\200.178.30.210\e\test"

robocopyCmd = "robocopy " & srcDir & " " & destDir
Dim wExec 'As WshExec
Set wExec = wsShell.Exec(robocopyCmd)
でコピーを行うとき、"\200.178.30.210\e\test"のパスが繋がらない時にコマンドプロンプトの黒い画面がずっと出ているのですが、これを強制終了させて、処理を行わせたいのですがどのようにコードを書けばいいか困っています。

教えてください、お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

黒い画面のままなのはrobocopyが処理中だからですね。
VBS側でどうにかしようにもrobocopyの処理が終わるまでどうにもできません。
Execメソッドにはタイムアウトの設定などはないようですので、robocopyの設定をどうにかするしかありません。
ヘルプを見ると再試行オプションでなんとかなりそうですね。

:: :: 再試行オプション: :: /R:n :: 失敗したコピーに対する再試行数: 既定値は 1,000,000。 /W:n :: 再試行と再試行の間の待機時間: 既定値は、30 秒です。 /REG :: /既定の設定としてレジストリに R:n と /W:n を保存します。 /TBD :: 共有名が定義されるのを待ちます (再試行エラー 67)。

おそらく/R:0だけ設定すればよいのではと思いますが、他の要因で再試行が必要な場合もあるかもしれませんので、待機時間1秒で30回とかにしておいたほうが安全かもしれません。/R:30 /W:1
そこらへんはご自分の判断でお願いします。

投稿2018/04/27 00:46

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

強制終了を考える前に、robocopyの設定を見直してはいかがでしょうか?
デフォルトでは30秒ごとに100万回リトライといった設定のはずです。


補足:強制終了する場合

今回はrobocopyの設定の変更で問題無いと思いますが、強制終了する方法を示しておきます。

WshScriptExec オブジェクト
Terminate メソッド (WshScriptExec)を使用すると、実行したプロセスを強制終了できます。

出来るのは強制終了だけですので、終了条件は自分で考えて実装する必要があります。

コードにすると以下のようなイメージです。

vbscript

1' ... 2Dim wExec 'As WshExec 3Set wExec = wsShell.Exec(robocopyCmd) 4 5' 強制終了する時間 6Const WAIT_SEC = 5 7Dim endTime 8endTime = DateAdd("s", WAIT_SEC, Now) 'WAIT_SEC 秒待機 9 10Const WshRunning = 0, WshFinished = 1, WshFailed = 2 11Do 12 If wExec.Status <> WshRunning Then 13 'If wExec.ExitCode = ~ 14 WSH.Echo "終了" 15 Exit Do 16 End If 17 18 If Now > endTime Then 19 Call wExec.Terminate 20 WSH.Echo "強制終了" 21 Exit Do 22 End If 23 24 WSH.Sleep 10 25Loop

ただし、

Terminate メソッドは最後の手段としてのみ使用します。これは、アプリケーションによっては適切にクリーンアップできない場合があるためです。通常は、プロセスを途中で中断せず、プロセス自身で実行を終了させるようにします。

Terminate メソッド (WshScriptExec)より引用

とあるように最後の手段です。

投稿2018/04/26 22:49

編集2018/04/27 11:03
imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問