質問するログイン新規登録

回答編集履歴

1

強制終了の方法を追記

2018/04/27 11:03

投稿

imihito
imihito

スコア2166

answer CHANGED
@@ -1,2 +1,51 @@
1
1
  強制終了を考える前に、robocopyの設定を見直してはいかがでしょうか?
2
- デフォルトでは30秒ごとに100万回リトライといった設定のはずです。
2
+ デフォルトでは30秒ごとに100万回リトライといった設定のはずです。
3
+
4
+ ---
5
+
6
+ 補足:強制終了する場合
7
+
8
+ 今回はrobocopyの設定の変更で問題無いと思いますが、強制終了する方法を示しておきます。
9
+
10
+ [WshScriptExec オブジェクト](https://msdn.microsoft.com/ja-jp/library/cc364375.aspx)の
11
+ [Terminate メソッド (WshScriptExec)](https://msdn.microsoft.com/ja-jp/library/cc364387.aspx)を使用すると、実行したプロセスを強制終了できます。
12
+
13
+ 出来るのは強制終了だけですので、終了条件は自分で考えて実装する必要があります。
14
+
15
+ コードにすると以下のようなイメージです。
16
+
17
+ ```vbscript
18
+ ' ...
19
+ Dim wExec 'As WshExec
20
+ Set wExec = wsShell.Exec(robocopyCmd)
21
+
22
+ ' 強制終了する時間
23
+ Const WAIT_SEC = 5
24
+ Dim endTime
25
+ endTime = DateAdd("s", WAIT_SEC, Now) 'WAIT_SEC 秒待機
26
+
27
+ Const WshRunning = 0, WshFinished = 1, WshFailed = 2
28
+ Do
29
+ If wExec.Status <> WshRunning Then
30
+ 'If wExec.ExitCode = ~
31
+ WSH.Echo "終了"
32
+ Exit Do
33
+ End If
34
+
35
+ If Now > endTime Then
36
+ Call wExec.Terminate
37
+ WSH.Echo "強制終了"
38
+ Exit Do
39
+ End If
40
+
41
+ WSH.Sleep 10
42
+ Loop
43
+ ```
44
+
45
+ ただし、
46
+
47
+ > Terminate メソッドは最後の手段としてのみ使用します。これは、アプリケーションによっては適切にクリーンアップできない場合があるためです。通常は、プロセスを途中で中断せず、プロセス自身で実行を終了させるようにします。
48
+
49
+ [Terminate メソッド (WshScriptExec)](https://msdn.microsoft.com/ja-jp/library/cc364387.aspx)より引用
50
+
51
+ とあるように最後の手段です。