• 締切済み

バッチファイルlを2重起動できないようにしたい

OS:Win XP以上 バッチファイル(.bat)をファイルサーバー上に置き、複数PCから実行可能な状況にしています。 この時、1台のPCがバッチファイルを実行していたら、他のPCからは実行できないように警告を 出すようにしたいのですが、誰かわかる方いませんでしょうか? バッチファイルが実行中(=書き込み禁止状態?)の情報がフラグとして取得できればと思ったのですが、なかなか都合のよいコマンドが見つからず困っています。 よろしくお願いします。

みんなの回答

  • RURUFOU
  • ベストアンサー率55% (5/9)
回答No.5

他のPCからは実行できないように 「警告を出す」という要望には答えらえませんが 「実行できないようにする」手段として バッチファイルの二重起動を防止する。(その2) http://scripting.cocolog-nifty.com/blog/2010/06/post-e27e.html バッチの二重起動防止 http://d.hatena.ne.jp/s0u/20070604/1180983928 を参考にして この3行をバッチの先頭に入れるようにしています。 @Call :_多重起動防止 %* 4>>"%~dpnx0" @goto :eof @:_多重起動防止 「_多重起動防止」は、こんなラベル名使わないって事で使ってます。

すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4903/10364)
回答No.4

No2です。 すいません。No3の「別の方法として」以下は無視してください。これはだめですね。 もう一工夫居る。

すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4903/10364)
回答No.3

no2です。 >エラーでの異常終了への対応で何か方法はありますでしょうか? 厳密にはありません。 その処理が1分以内に終わるとすると、zzzzzzのタイムスタンプを調べて、1分以上古い場合は異常終了のゴミとして削除してしまうという方法があります。 バッチで時刻の引き算は面倒なので、そのあたりはVBScriptを使うといいでしょう。 ただし、タイムスタンプを調べてから削除するまでの間に、他のユーザの処理で「同じように古いと判断して削除して、作り直してしまう」という処理が挟まれば、その他の処理が作ったものを削除してしまいます。その可能性はゼロでは無い。 別の方法として、zzzzzz を消す処理を分けて、そちらは簡単な処理にすることにより、削除がされないという確率を限りなく下げるという方法もあります。こちらは以前に回答した物が参考になると思います。 http://okwave.jp/qa/q6753590.html こちらは簡単ですが、クライアントPC全体が落ちたり、ネットが切れたりした場合はだめですね。

すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4903/10364)
回答No.2

今実行中であるという事を表すファイル(ディレクトリ)を作って、他の処理が実行中かどうか判断します。 md \zzzzzz || goto BUSY やりたい処理 rd \zzzzzz goto :EOF :BUSY echo 他の人が処理中です pause おおむね↑こんな感じで。 No1の方の物と基本的には同じですが、No1だと二人の人が同時に始めた場合、1行目と2行目の間に穴があるので、同時に実行されてしまう可能性がわずかにあります。 実際には、「やりたい処理」の途中でバッチをctrl-Cで止めた場合に\zzzzzzが残ってしまう対応も必要ですが。

VBScriptingMan
質問者

補足

ご回答ありがとうございます。 助かります。 この方法だと、もし上記「やりたい処理」で予期せぬエラーが発生した場合に、異常終了となり、 \zzzzzzフォルダが残ったまま終了となり、二度と実行出来なくなることが心配なのですが、 エラーでの異常終了への対応で何か方法はありますでしょうか? よろしくお願い致します。

すると、全ての回答が全文表示されます。
  • f272
  • ベストアンサー率46% (8653/18507)
回答No.1

例えば if EXIST empty.txt GOTO MSG TYPE NUL> empty.txt ::処理 del empty.txt GOTO END :MSG echo 処理中 :END

すると、全ての回答が全文表示されます。

関連するQ&A