- ベストアンサー
batファイルで、あるディレクトリ配下に存在する場合は、実行を中断
batファイルのコードで、 このbatファイルがある特定のディレクトリ内にある場合は、即座に実行を中断するようにしたいのですが、どうすればよいでしょうか。 詳しく述べます。 あるbatファイルがあります。 このbatファイルは、普段、マウスでダブルクリックして実行しています。 仮に、このbatファイルが C:\Temp\a というディレクトリにある場合に実行を中断するには、 ======================== set ThisScriptPath=%~dp0 if "%ThisScriptPath%" == "C:\Temp\a\" goto END ・・・ :END set ThisScriptPath= ======================== というようなコードを入れておけばいいと思います。 しかし、C:\Temp の中の「どのサブディレクトリにbatファイルがある場合でも(aサブディレクトリでもbサブディレクトリでも、何階層下でも)」実行を中断するにはどうすればいいのでしょうか。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (6)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
回答No.7
- Selfishness
- ベストアンサー率29% (29/99)
回答No.6
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
回答No.5
- Selfishness
- ベストアンサー率29% (29/99)
回答No.4
- Selfishness
- ベストアンサー率29% (29/99)
回答No.3
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
回答No.2
お礼
ご回答ありがとうございます。 上のもので大丈夫です。 自分用に解説をつけておきます。 ---------------------------- ●cd 単にcdだけだと現在のディレクトリが表示される。 ●find 「パスが指定されていないときは、プロンプトで入力されたテキストまたは別のコマンドからパイプ処理で渡されたテキストを検索します。」(find /?) /i 大文字と小文字の区別をしない。 /v 指定した文字列を含まない行をすべて表示するオプション。 ●errorlevel 「ここでfindの検索結果の状態(指定した条件にマッチする文字列が見つかったかどうか)を調べる方法について述べておこう。 このfindでは、検索結果の状態をerrorlevel(直前のコマンドの実行結果を表すコマンド)を使って通知することができる。 検索が成功した場合には、errorlevelの値は0になるが、検索が失敗した場合(該当の文字列がなかった場合)には、errorlevelは1となる。 また、引数の指定方法などが間違っていてエラーとなった場合は(例えば、検索文字列をダブルクォートでくくっていないときは)、errorlevelは2となる。 ifコマンド中でこのerrorlevelの値を調べることにより、検索結果に応じた処理を行うことができる。」 (http://www.atmarkit.co.jp/fwin2k/operation/command006/command01.html) find には /v オプションが付いているので、パスに"c:\temp"が含まれていない場合に、検索が成功してerrorlevelが0になる。 ●if errorlevel 1 goto end errorlevelが1以上のときに、「end」へ行く。 「パスに"c:\temp"が含まれていない」場合 → 検索が成功 → errorlevelが0 → ifの条件が成立しない。 「パスに"c:\temp"が含まれている」場合 → 検索が失敗 → errorlevelが1 → ifの条件が成立。→ endへ行く。