回答編集履歴

1

強制終了の方法を追記

2018/04/27 11:03

投稿

imihito
imihito

スコア2166

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