1: rem targetexists.cmd
2: rem 作成者: YamaKen
3: rem バージョン: 0.01
4: rem 作成日: 本日、ってのはわかりづらいか。 2008.05.29 (GMT+0900) としておこう。
5: rem ■ Introduction (狙いの説明っぽい何か。)
6: rem 特定文字列の存否判定を行うバッチファイル。
7: rem あんまり細かいロジックを入れてないので、単に関数として他のコードに入れて
8: rem 使いまわしてもいいんじゃないかな。
9: rem Scripting.FileSystemObject や WMI といったクラスを利用した
10: rem スクリプトプログラミングよりも、個人差なくだれでも、時間をかけないで
11: rem 作り込んで結果を得られるように(生産性)、また、ありあわせのコマンドで
12: rem 済ませることで、システム負荷を無駄に押し上げないように(リソース利用)、
13: rem を狙って作っている。
14: rem 捌くべき母体、対象件数が多ければ多いほど、この意識がどれほど有効か、よりはっきり分かるだろう。(少なくとも、運用管理者として自分が欲しいからそういう風に作ってる。)
15: rem 少なくとも、特定パターンのファイル検索を行うためだけのコードごときが
16: rem 何分も、運用中のサーバの CPU 利用率を占有し、上限に張り付かせるようなアホな
17: rem コードは書いちゃいかんです。実行中のスクリプト内でリソースの
18: rem 利用率を制御する方法は VBScript には提供されてないんだから。
19: rem と、コメント部分を長々書いてしまったが本題はコメントアウトされない最後の数行だけ。
20: rem ///
21: rem ■ 機能説明っぽい何か。(何をやってるのかを解説してみる。)
22: rem 指定ディレクトリ内の、特定文字列を名前に含むフォルダやファイルがあるかどうか
23: rem 確認する。このために即興で strflag という変数を定義し、中身の有無で存否確認を行う次第。
24: rem 最初の繰り返し行は、指定パターンのファイル存否確認を行って、その結果を
25: rem 標準出力(画面)ではなく strflag 変数に突っ込んでいる。
26: rem 指定文字列のパターンが見当たらなければ、findstr は結果を返さない。
27: rem よって、指定パターンの名前を含むファイルやフォルダがあれば変数に
28: rem 値が入るし、なければ変数は空のまま。
29: rem その次の数行では、その変数の中身を確認し、値の有無判別を行っている。
30: rem 条件分岐と実行部分は無駄に改行を入れているが、必要があればこの無駄部分で
31: rem 実行すべきコマンドを追加すりゃいい。
32: rem 全体を通しての小技としては、エスケープ文字の入れ方、コマンドの
33: rem 実行結果を変数に突っ込むアプローチ、それと判定の仕方くらいかな。
34: rem ありふれたコマンドでも、組み合わせればここまでできるぞっと。
35: rem ///
36: rem ■ 懸案っぽい愚痴っぽい何か。
37: rem 条件分岐(IF うんたら)の中でアクション部分にセットした set コマンドが
38: rem 動かない感じがするのは気のせい?
39: rem いや、別のコードを書いていて直面してたのだけどさ。
40:
41: rem 指定パターンのファイル/フォルダ存否判定のモト。
42: For /F "delims=" %%f in ('Dir [フルパス]^|FindStr /i ^"[文字列]^"') DO (Set strFlag=%%f)
43:
44: rem 存否判定本体。 判定部分はちょっとだけ頑張った。
45: If "%strFlag%"==^"^%strFlag^%^" (
46:
47: Echo No Match
48:
49: ) Else (
50:
51: Echo Match Found
52:
53: )
54:
55: rem 何もなければ strFlag をカラにする。
56: set strFlag=