-PR-
締切済み

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

  • 困ってます
  • 質問No.7631315
  • 閲覧数9584
  • ありがとう数0
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 55% (15/27)

OS:Win XP以上

バッチファイル(.bat)をファイルサーバー上に置き、複数PCから実行可能な状況にしています。

この時、1台のPCがバッチファイルを実行していたら、他のPCからは実行できないように警告を
出すようにしたいのですが、誰かわかる方いませんでしょうか?

バッチファイルが実行中(=書き込み禁止状態?)の情報がフラグとして取得できればと思ったのですが、なかなか都合のよいコマンドが見つからず困っています。

よろしくお願いします。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全5件)

  • 回答No.5
レベル6

ベストアンサー率 55% (5/9)

他の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
@:_多重起動防止

「_多重起動防止」は、こんなラベル名使わないって事で使ってます。


  • 回答No.2
レベル14

ベストアンサー率 49% (4240/8648)

他カテゴリのカテゴリマスター
今実行中であるという事を表すファイル(ディレクトリ)を作って、他の処理が実行中かどうか判断します。

md \zzzzzz || goto BUSY
やりたい処理
rd \zzzzzz
goto :EOF
:BUSY
echo 他の人が処理中です
pause

おおむね↑こんな感じで。

No1の方の物と基本的には同じですが、No1だと二人の人が同時に始めた場合、1行目と2行目の間に穴があるので、同時に実行されてしまう可能性がわずかにあります。

実際には、「やりたい処理」の途中でバッチをctrl-Cで止めた場合に\zzzzzzが残ってしまう対応も必要ですが。
補足コメント
VBScriptingMan

お礼率 55% (15/27)

ご回答ありがとうございます。
助かります。

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

よろしくお願い致します。
投稿日時 - 2012-08-08 09:41:37
  • 回答No.4
レベル14

ベストアンサー率 49% (4240/8648)

他カテゴリのカテゴリマスター
No2です。
すいません。No3の「別の方法として」以下は無視してください。これはだめですね。
もう一工夫居る。
  • 回答No.1
レベル14

ベストアンサー率 43% (3463/7944)

他カテゴリのカテゴリマスター
例えば

if EXIST empty.txt GOTO MSG
TYPE NUL> empty.txt
::処理
del empty.txt
GOTO END
:MSG
echo 処理中
:END
  • 回答No.3
レベル14

ベストアンサー率 49% (4240/8648)

他カテゴリのカテゴリマスター
no2です。
>エラーでの異常終了への対応で何か方法はありますでしょうか?

厳密にはありません。

その処理が1分以内に終わるとすると、zzzzzzのタイムスタンプを調べて、1分以上古い場合は異常終了のゴミとして削除してしまうという方法があります。
バッチで時刻の引き算は面倒なので、そのあたりはVBScriptを使うといいでしょう。

ただし、タイムスタンプを調べてから削除するまでの間に、他のユーザの処理で「同じように古いと判断して削除して、作り直してしまう」という処理が挟まれば、その他の処理が作ったものを削除してしまいます。その可能性はゼロでは無い。

別の方法として、zzzzzz を消す処理を分けて、そちらは簡単な処理にすることにより、削除がされないという確率を限りなく下げるという方法もあります。こちらは以前に回答した物が参考になると思います。
http://okwave.jp/qa/q6753590.html

こちらは簡単ですが、クライアントPC全体が落ちたり、ネットが切れたりした場合はだめですね。
このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-

特集


抽選で合計100名様にプレゼント!

ピックアップ

ページ先頭へ