調べ物:WSHでRunメソッドとExecメソッドを使い分ける [プログラミング学習]
先日来対応しているスクリプトでのファイル操作の自動化だが、先日不具合が発生した。
コマンドプロンプトでmoveコマンドを実行したが、ファイルが移動しない。厳密には、moveコマンドで複数種類のファイルを移動しようとしているのだが、一部のファイルが移動しない。
移動しないファイルに法則性はない。何回か繰り返せば全て移動する。
どうも、moveコマンドを複数実行しようとしたものの、moveコマンド自体が非同期実行に対応していないようで、そのため、前の処理が終わらないうちに次の処理を実行しようとして失敗しているようだ。
なので、前の実行が終わってから実行すれば、問題は解決されるだろう。
コマンドプロンプトの実行にはWshShellのRunメソッドを使っていた。このメソッドの引数で、実行終了を待つか指定するものがある。そこを指定すればよさそうだ。
Runメソッドと近いメソッドにExecがある。ExecとRunの違いを今一つわかっていなかったが、標準入出力の使用でわければよさそうか?
「@IT:運用 Windows管理者のためのWindows Script Host入門 第5回 WshShellオブジェクトの詳細(1) 2.プログラムの実行方法1―Runメソッド」
http://www.atmarkit.co.jp/fwin2k/operation/wsh05/wsh05_02.html
「Run メソッド」
http://msdn.microsoft.com/ja-jp/library/Cc364421
「Exec メソッド」
http://msdn.microsoft.com/ja-jp/library/Cc364356
「WshScriptExec オブジェクト」
http://msdn.microsoft.com/ja-jp/library/cc364375
コマンドプロンプトでmoveコマンドを実行したが、ファイルが移動しない。厳密には、moveコマンドで複数種類のファイルを移動しようとしているのだが、一部のファイルが移動しない。
移動しないファイルに法則性はない。何回か繰り返せば全て移動する。
どうも、moveコマンドを複数実行しようとしたものの、moveコマンド自体が非同期実行に対応していないようで、そのため、前の処理が終わらないうちに次の処理を実行しようとして失敗しているようだ。
なので、前の実行が終わってから実行すれば、問題は解決されるだろう。
コマンドプロンプトの実行にはWshShellのRunメソッドを使っていた。このメソッドの引数で、実行終了を待つか指定するものがある。そこを指定すればよさそうだ。
Runメソッドと近いメソッドにExecがある。ExecとRunの違いを今一つわかっていなかったが、標準入出力の使用でわければよさそうか?
「@IT:運用 Windows管理者のためのWindows Script Host入門 第5回 WshShellオブジェクトの詳細(1) 2.プログラムの実行方法1―Runメソッド」
http://www.atmarkit.co.jp/fwin2k/operation/wsh05/wsh05_02.html
「Run メソッド」
http://msdn.microsoft.com/ja-jp/library/Cc364421
「Exec メソッド」
http://msdn.microsoft.com/ja-jp/library/Cc364356
「WshScriptExec オブジェクト」
http://msdn.microsoft.com/ja-jp/library/cc364375
>Pckitaさん
ありがとうございます。
by Mishika (2014-04-02 00:37)