<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Batch</title><link>http://www.sqljp.com/yamaken/category/251.aspx</link><description>Batch</description><managingEditor>YamaKen</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>YamaKen</dc:creator><title>近況</title><link>http://sqljp.com/yamaken/archive/2009/08/04/26899.aspx</link><pubDate>Tue, 04 Aug 2009 01:25:00 GMT</pubDate><guid>http://sqljp.com/yamaken/archive/2009/08/04/26899.aspx</guid><wfw:comment>http://sqljp.com/yamaken/comments/26899.aspx</wfw:comment><comments>http://sqljp.com/yamaken/archive/2009/08/04/26899.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://sqljp.com/yamaken/comments/commentRss/26899.aspx</wfw:commentRss><trackback:ping>http://sqljp.com/yamaken/services/trackbacks/26899.aspx</trackback:ping><description>&lt;P&gt;最近は Active Directory に対してコマンドを叩いて、ほしい情報を取り出すことに躍起になっています。&lt;BR&gt;たとえば、次のような情報は管理ツールを立ち上げないでも、 dsquery があれば取得可能です。 
&lt;UL&gt;
&lt;LI&gt;信頼関係&lt;BR&gt;→一覧にできるのでいいです。いちいち GUI で domain.msc などをあげるよりも手軽。 
&lt;LI&gt;サイト、サブネット、ブリッジヘッド、KCC&lt;BR&gt;→複製を流す時とかに割と役立ちます。 dsquery * でもいいし、 dsquery subnet などでも。 
&lt;LI&gt;アカウントオブジェクトと、そのさまざまな属性&lt;BR&gt;→一度もログオンしたことがない場合は、とある属性に値がセットされない、とか。 &lt;/LI&gt;&lt;/UL&gt;&lt;/P&gt;
&lt;P&gt;dsうんたら、のコマンド(dsquery, dsmod,dsadd,dsget,dsacls)はパイプで実行結果を次のコマンドに渡すのが定番ですが、それが通じない場合は For /F コマンドを叩くことで、おおかたは解決できます。&lt;br&gt;慣れれば情報取得のたいていのことは、 dsquery を使うと GUI より手早く結果を持ってこれるので、イイですね。&lt;/P&gt;
&lt;P&gt;現在は、dsquery で持ってきた情報を一行一行ではなくて丸ごとをイベントログに乗っける方法を探していたりします。この辺の情報をお持ちの方はヒントをくださいまし。&lt;/P&gt;&lt;img src ="http://sqljp.com/yamaken/aggbug/26899.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>YamaKen</dc:creator><title>雑検討: 「特定の文字列を含むパス」を捌くには。</title><link>http://sqljp.com/yamaken/archive/2008/05/31/24817.aspx</link><pubDate>Sat, 31 May 2008 17:37:00 GMT</pubDate><guid>http://sqljp.com/yamaken/archive/2008/05/31/24817.aspx</guid><wfw:comment>http://sqljp.com/yamaken/comments/24817.aspx</wfw:comment><comments>http://sqljp.com/yamaken/archive/2008/05/31/24817.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://sqljp.com/yamaken/comments/commentRss/24817.aspx</wfw:commentRss><trackback:ping>http://sqljp.com/yamaken/services/trackbacks/24817.aspx</trackback:ping><description>&lt;P&gt;ジムの合間に、洗濯のために帰宅。
&lt;br&gt;そんなことはどうでもいいが、先ほどのようなバッチファイルでシンプルに結果を返すか、あるいはなんかのクラスを使ってコーディングを試みることになる。&lt;br&gt;
手っ取り早く思いつくのは Scripting.FileSystemObject と WMI だったりするけど、他にも Shell でネームスペース拾ってみたりするようなアプローチもあるか。 FileSystemObject と WMI はそのものズバリが Hey, Scripting Guy! に取り上げられていたね。WMI だと、前に僕も別のモノで書いていたように、検索結果(コレクションになってる)を .Count で数えればいい。&lt;br&gt;
ただ、FileSystemObject だと存在確認以前にソレがファイルかフォルダかを判別する仕掛けは自分で持ってこないといけないので、ちょっと面倒くさいか。 &lt;br&gt;
Shell を使えばそこらはもう少し楽になったはず。ベクタで吉岡さんが公開しているコードに、そこらの実装例はある。確かダウンロードファイルのプロパティの「何か」(NTFS の ADS に書き込んでるテキストデータに依拠。XPSP2 で実装。でもってアタクシはその名称を忘れた。)を変えるコードで、そこを扱うロジックがあった。&lt;br&gt;
特定パターンの文字列を含むフォルダやファイルの存否をチェックする方法は他に何かあるだろうか。ここで触れた以外のクラスを使って確認するアプローチがあれば、コメントください。&gt;ALL&lt;BR&gt;
&lt;/P&gt;&lt;img src ="http://sqljp.com/yamaken/aggbug/24817.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>YamaKen</dc:creator><title>ファイルの存否判定を行うバッチファイル(普通のコマンドプロンプト)</title><link>http://sqljp.com/yamaken/archive/2008/05/31/24815.aspx</link><pubDate>Sat, 31 May 2008 09:00:00 GMT</pubDate><guid>http://sqljp.com/yamaken/archive/2008/05/31/24815.aspx</guid><wfw:comment>http://sqljp.com/yamaken/comments/24815.aspx</wfw:comment><comments>http://sqljp.com/yamaken/archive/2008/05/31/24815.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://sqljp.com/yamaken/comments/commentRss/24815.aspx</wfw:commentRss><trackback:ping>http://sqljp.com/yamaken/services/trackbacks/24815.aspx</trackback:ping><description>&lt;P&gt;例によって &lt;a href="http://www.manoli.net/csharpformat/format.aspx" target="_blank"&gt;C# Code Format&lt;/a&gt; にて色づけ。本体がたった数行の癖に、無駄にコメントが長いので覚悟してください。&lt;/P&gt;
&lt;P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;rem targetexists.cmd&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;rem 作成者: YamaKen&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;rem バージョン: 0.01&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;rem 作成日: 本日、ってのはわかりづらいか。 2008.05.29 (GMT+0900) としておこう。&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;rem ■ Introduction (狙いの説明っぽい何か。)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;rem 特定文字列の存否判定を行うバッチファイル。&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;rem あんまり細かいロジックを入れてないので、単に関数として他のコードに入れて&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;rem 使いまわしてもいいんじゃないかな。&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;rem Scripting.FileSystemObject や WMI といったクラスを利用した&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;rem スクリプトプログラミングよりも、個人差なくだれでも、時間をかけないで&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;rem 作り込んで結果を得られるように(生産性)、また、ありあわせのコマンドで&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;rem 済ませることで、システム負荷を無駄に押し上げないように(リソース利用)、&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;rem を狙って作っている。&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;rem 捌くべき母体、対象件数が多ければ多いほど、この意識がどれほど有効か、よりはっきり分かるだろう。(少なくとも、運用管理者として自分が欲しいからそういう風に作ってる。)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;rem 少なくとも、特定パターンのファイル検索を行うためだけのコードごときが&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;rem 何分も、運用中のサーバの CPU 利用率を占有し、上限に張り付かせるようなアホな&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;rem コードは書いちゃいかんです。実行中のスクリプト内でリソースの&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;rem 利用率を制御する方法は VBScript には提供されてないんだから。&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;rem と、コメント部分を長々書いてしまったが本題はコメントアウトされない最後の数行だけ。&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;rem ///&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;rem ■ 機能説明っぽい何か。(何をやってるのかを解説してみる。)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;rem 指定ディレクトリ内の、特定文字列を名前に含むフォルダやファイルがあるかどうか&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;rem 確認する。このために即興で strflag という変数を定義し、中身の有無で存否確認を行う次第。&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;rem 最初の繰り返し行は、指定パターンのファイル存否確認を行って、その結果を&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;rem 標準出力(画面)ではなく strflag 変数に突っ込んでいる。&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;rem 指定文字列のパターンが見当たらなければ、findstr は結果を返さない。&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;rem よって、指定パターンの名前を含むファイルやフォルダがあれば変数に&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;rem 値が入るし、なければ変数は空のまま。&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;rem その次の数行では、その変数の中身を確認し、値の有無判別を行っている。&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;rem 条件分岐と実行部分は無駄に改行を入れているが、必要があればこの無駄部分で&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;rem 実行すべきコマンドを追加すりゃいい。&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;rem 全体を通しての小技としては、エスケープ文字の入れ方、コマンドの&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;rem 実行結果を変数に突っ込むアプローチ、それと判定の仕方くらいかな。&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;rem ありふれたコマンドでも、組み合わせればここまでできるぞっと。&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;rem ///&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;rem ■ 懸案っぽい愚痴っぽい何か。&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;rem 条件分岐(IF うんたら)の中でアクション部分にセットした set コマンドが&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;rem 動かない感じがするのは気のせい?&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;rem いや、別のコードを書いていて直面してたのだけどさ。&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;rem 指定パターンのファイル/フォルダ存否判定のモト。&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;For /F &lt;span class="str"&gt;"delims="&lt;/span&gt; %%f &lt;span class="kwrd"&gt;in&lt;/span&gt; (&lt;span class="str"&gt;'Dir [フルパス]^|FindStr /i ^"[文字列]^"'&lt;/span&gt;) DO (Set strFlag=%%f)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;rem 存否判定本体。 判定部分はちょっとだけ頑張った。&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;If &lt;span class="str"&gt;"%strFlag%"&lt;/span&gt;==^&lt;span class="str"&gt;"^%strFlag^%^"&lt;/span&gt; (&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;Echo No Match&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;) Else (&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;Echo Match Found&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;rem 何もなければ strFlag をカラにする。&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;set strFlag=&lt;/pre&gt;
&lt;/div&gt;&lt;/P&gt;&lt;img src ="http://sqljp.com/yamaken/aggbug/24815.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>YamaKen</dc:creator><title>メモ: FTP.exe の返す、戻り値に悩んでみる</title><link>http://sqljp.com/yamaken/archive/2008/02/08/24545.aspx</link><pubDate>Fri, 08 Feb 2008 01:39:00 GMT</pubDate><guid>http://sqljp.com/yamaken/archive/2008/02/08/24545.aspx</guid><wfw:comment>http://sqljp.com/yamaken/comments/24545.aspx</wfw:comment><comments>http://sqljp.com/yamaken/archive/2008/02/08/24545.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://sqljp.com/yamaken/comments/commentRss/24545.aspx</wfw:commentRss><trackback:ping>http://sqljp.com/yamaken/services/trackbacks/24545.aspx</trackback:ping><description>&lt;P&gt;結論: ftp.exe 自体がハングアップしてなけりゃ 0 が返るのが基本動作。ステータスコードに応じて Errorlevel 風味の値を返したいなら、テキストにリダイレクトして、 findstr /i "string_pattern" file_path のようにするとか、 more filename|findstr /i "string_pattern" という感じで中身を拾っていけばいい。エラーが出て終わってなければその旨、動作記録には残せるはずだ。ソイツを狙う。&lt;/P&gt;&lt;img src ="http://sqljp.com/yamaken/aggbug/24545.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>YamaKen</dc:creator><title>メモ:「一日前」の日付を手っ取り早く取得してバッチで使う</title><link>http://sqljp.com/yamaken/archive/2008/02/08/24544.aspx</link><pubDate>Fri, 08 Feb 2008 01:33:00 GMT</pubDate><guid>http://sqljp.com/yamaken/archive/2008/02/08/24544.aspx</guid><wfw:comment>http://sqljp.com/yamaken/comments/24544.aspx</wfw:comment><comments>http://sqljp.com/yamaken/archive/2008/02/08/24544.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://sqljp.com/yamaken/comments/commentRss/24544.aspx</wfw:commentRss><trackback:ping>http://sqljp.com/yamaken/services/trackbacks/24544.aspx</trackback:ping><description>&lt;P&gt;Tips ってほどでもないのでメモとする。&lt;br&gt;
PowerShell とか入ってないなら、VBScript の DateAdd 関数を使うと一番手っ取り早そう。数行書けば済む。&lt;br&gt;
そうじゃなくて当日の日付でよいというなら、そもそも WSH に逃げる必要はなく。 date /t (Windows 2000 の場合。)や %date% で何とかすりゃいい。&lt;br&gt;
ここの時点で中身を確認して、何か値が入っていればよいってのなら、変数を展開して、ソイツがから文字じゃなければいいってこと。&lt;/P&gt;
&lt;P&gt;
&lt;blockquote&gt;
(前略)&lt;br&gt;
if %somevar% =="" (goto getout) else (goto finish)&lt;br&gt;
(略)&lt;br&gt;
:getout&lt;br&gt;
echo 変数に値がセットされていません&lt;br&gt;
&lt;br&gt;
:finish&lt;br&gt;
echo %somevar%&lt;br&gt;
exit /B rc&lt;br&gt;
&lt;/blockquote&gt;

ってやっておけばいいか。 neq とかの評価方法と For の使い道よね、このへん。&lt;br&gt;
バッチファイルでも VBScript でも実装のために必要な材料はほぼ同じで、お膳立て、本体組み立て、後始末の三段がコアになるかなと。&lt;br&gt;&lt;img src ="http://sqljp.com/yamaken/aggbug/24544.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>YamaKen</dc:creator><title>PowerShell のスクリーンキャスト(VBASPCoder.com)</title><link>http://sqljp.com/yamaken/archive/2007/11/02/24211.aspx</link><pubDate>Fri, 02 Nov 2007 21:35:00 GMT</pubDate><guid>http://sqljp.com/yamaken/archive/2007/11/02/24211.aspx</guid><wfw:comment>http://sqljp.com/yamaken/comments/24211.aspx</wfw:comment><comments>http://sqljp.com/yamaken/archive/2007/11/02/24211.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://sqljp.com/yamaken/comments/commentRss/24211.aspx</wfw:commentRss><trackback:ping>http://sqljp.com/yamaken/services/trackbacks/24211.aspx</trackback:ping><description>&lt;P&gt;&lt;a title="入海さん(vbNullString さん)" href="http://www.vbaspcoder.com/" target="_blank"&gt;入海さん(vbNullString さん)&lt;/a&gt;(シアトル在住の日本人エンジニア)のサイトでスクリーンキャストが提供されている。あんまりゆっくりは閲覧できてないけど、PowerShell の使い方を柱に、旬な素材を扱っている様子。今のところ、第五回まで提供の模様。詳細は以下のURLから。
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.vbaspcoder.com/PermaLink,guid,6b178f6f-fd08-4def-9380-c4e90e42aee8.aspx" target="_blank"&gt;スクリーンキャスト第1回 PowerShell の基本中の基本&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vbaspcoder.com/PermaLink,guid,a8f11f4d-1aa9-4b47-b585-5daab2c6762a.aspx" target="_blank"&gt;スクリーンキャスト第2回 PowerShell の短縮コマンド(エイリアス)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vbaspcoder.com/PermaLink,guid,0973dd36-2610-4756-a10c-5b4f5c5fbfd9.aspx" target="_blank"&gt;スクリーンキャスト第3回 PowerShell でイベントログ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vbaspcoder.com/PermaLink,guid,c29cd136-6d09-4f30-aa76-814e019bed2e.aspx" target="_blank"&gt;スクリーンキャスト第4回 PowerShell の format-list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vbaspcoder.com/PermaLink,guid,670acafc-44b5-4e1f-9a64-d9f0bfb2f628.aspx" target="_blank"&gt;スクリーンキャスト第5回 PowerShell のスクリプトファイルを実行する&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
# こういう、日本語で提供される技術ネタがもっと増えるとうれしいですね。
&lt;/P&gt;&lt;img src ="http://sqljp.com/yamaken/aggbug/24211.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>YamaKen</dc:creator><title>メモ: バッチファイル内でエラーレベルを拾う</title><link>http://sqljp.com/yamaken/archive/2007/10/04/24078.aspx</link><pubDate>Thu, 04 Oct 2007 10:05:00 GMT</pubDate><guid>http://sqljp.com/yamaken/archive/2007/10/04/24078.aspx</guid><wfw:comment>http://sqljp.com/yamaken/comments/24078.aspx</wfw:comment><comments>http://sqljp.com/yamaken/archive/2007/10/04/24078.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://sqljp.com/yamaken/comments/commentRss/24078.aspx</wfw:commentRss><trackback:ping>http://sqljp.com/yamaken/services/trackbacks/24078.aspx</trackback:ping><description>&lt;P&gt;&lt;a title="" href="http://www.microsoft.com/windows/" target="_blank"&gt;Windows&lt;/a&gt; のバッチファイルで%errorlevel%という環境変数を使うと、直前に実行したコマンドの結果を使って条件指定できる。&lt;br&gt;
原始的ではあるけれども、想定したとおりに自分の命令が動かないときは特に、問題を追いかける一環として echo させたり、イベントログに吐き出すようにしていたりする。(VBScript などでもこれ、使えるわけで、変数=コマンド文、として変数の数値の成り行き次第で処理の追加を行ってみたりなどしている。)&lt;br&gt;
&lt;a title="Log Parser" href="http://www.logparser.com/" target="_blank"&gt;Log Parser&lt;/a&gt; のコマンド版は、通常のコマンド同様、実行結果に応じてこまめにエラーレベルを出してくれる。構文チェックや、そもそもの接続でこけたら5、欲しいフィールドが対象の中にないとそれ以外、という具合。わりと細かく状態を判別できる様子。&lt;br&gt;
但し、%errorlevel% には欲しいコマンドの実行結果のみが格納されうるわけではないので、エラーレベルは直後で拾っておかないと、あとで錯綜するはめになったりする。(そのようなわけで、手許では、適当な文字列を追加して、別変数としてこの errorlevel 変数の値を記録するようにしています。)&lt;br&gt;
エッセンスだけとれば、そう気づくきっかけになったのは、こんな↓バッチファイルです。例によって &lt;a href="http://manoli.net/csharpformat/" target="_blank"&gt;C# Code Format&lt;/a&gt; を使ってます。
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;@echo off&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;rem 本体は大まかにこんな感じ。&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;a title="Log Parser" href="http://www.logparser.com/" target="_blank"&gt;LogParser&lt;/a&gt;.exe -o:tab -formatmsg:on &lt;span class="str"&gt;"Select * INTO results.txt From [抽出ソース] where id LIKE 529"&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;rem 追加処理を行うと違う中身に代わってたりするんだよね。&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;echo %errorlevel%&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;rem エラーレベルを別変数に格納。ここでこれをやっておかないと、&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;rem 次の条件分岐の箇所では、なぜかエラーレベルが別物になってる。&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;rem たとえば 5 のときは 9009 とか。&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;set cmdresult=take%errorlevel%&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;echo %cmdresult% &amp; echo %errorlevel%&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; "%cmdresult%" ne "take0" (&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;[メッセージ用意して、途中終了した旨をログに書き込むパートにジャンプ]&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;(中略)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;exit&lt;/pre&gt;
&lt;/div&gt;
&lt;/P&gt;&lt;img src ="http://sqljp.com/yamaken/aggbug/24078.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>YamaKen</dc:creator><title>メモ: Windows 2000 に対する eventquery.vbs の実行について</title><link>http://sqljp.com/yamaken/archive/2007/09/18/24013.aspx</link><pubDate>Tue, 18 Sep 2007 07:43:00 GMT</pubDate><guid>http://sqljp.com/yamaken/archive/2007/09/18/24013.aspx</guid><wfw:comment>http://sqljp.com/yamaken/comments/24013.aspx</wfw:comment><comments>http://sqljp.com/yamaken/archive/2007/09/18/24013.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://sqljp.com/yamaken/comments/commentRss/24013.aspx</wfw:commentRss><trackback:ping>http://sqljp.com/yamaken/services/trackbacks/24013.aspx</trackback:ping><description>&lt;P&gt;&lt;a title="" href="http://www.microsoft.com/windows/" target="_blank"&gt;Windows&lt;/a&gt; 2000 サーバに対してイベントログの照会を行うとき、直接コマンドラインから行おうとすると、通常は同名のコマンドがないので蹴られる。こういう場合は周囲にある &lt;a title="XP" href="http://www.microsoft.com/japan/windowsxp/" target="_blank"&gt;XP&lt;/a&gt;/2003 のマシンを経由して eventquery.vbs を用いてログを取得するとストレスが少ない。一番ラクチンなのは &lt;a title="" href="http://www.logparser.com/" target="_blank"&gt;Log Parser&lt;/a&gt; だが、標準範囲内のツールしか使ってはいけないことも多いので…)&lt;br&gt;ところで、 &lt;a title="" href="http://www.microsoft.com/windows/" target="_blank"&gt;Windows&lt;/a&gt; &lt;a title="XP" href="http://www.microsoft.com/japan/windowsxp/" target="_blank"&gt;XP&lt;/a&gt;/2003 に搭載されている eventquery.vbs は、表示のきれなどを予防する意味で CSV 形式でデータを取得すると、わりと見やすいものになる。一部の「説明」データで改行コードを CRLF ではなく LF 乃至 CR を用いて書き連ねたもの(バックアップ系ソフトウェアや、 Exchange Server 200x など一部アプリケーションでの実装)をうまく扱えず、そのまま改行されることもあるのが困りものだけど。この点は &lt;a title="" href="http://www.logparser.com/" target="_blank"&gt;Log Parser&lt;/a&gt; でも変わらないので、もしもよほど気に入らなければ、自前でスクリプトを作ってもよいかも。 対応するデータのフィールドで改行コードに replace() をかければ、ヘンなところで改行されないようにはできる。&lt;br&gt;追記: Log Parser でも、たとえばコマンドライン版で -formatmsg:on というスイッチをつければ、Message 部分での改行コードの問題には、悩まされずに済む。
&lt;/P&gt;&lt;img src ="http://sqljp.com/yamaken/aggbug/24013.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>YamaKen</dc:creator><title>メモ: バッチファイルでコマンド文を細かく構成する</title><link>http://sqljp.com/yamaken/archive/2007/09/12/23997.aspx</link><pubDate>Wed, 12 Sep 2007 12:40:00 GMT</pubDate><guid>http://sqljp.com/yamaken/archive/2007/09/12/23997.aspx</guid><wfw:comment>http://sqljp.com/yamaken/comments/23997.aspx</wfw:comment><comments>http://sqljp.com/yamaken/archive/2007/09/12/23997.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://sqljp.com/yamaken/comments/commentRss/23997.aspx</wfw:commentRss><trackback:ping>http://sqljp.com/yamaken/services/trackbacks/23997.aspx</trackback:ping><description>&lt;P&gt;以前 VBScript で &lt;a title="SQL" href="http://www.microsoft.com/japan/sql/" target="_blank"&gt;SQL&lt;/a&gt; 文を細かく分けて、構成していく方法をメモしたのだが、バッチファイルでも少し似たことが出来る。 set を用いた環境変数追加と、空白文字列の扱い方がポイント。&lt;/P&gt;
&lt;P&gt;空白文字列を扱うときは二重引用符でくくるか、スペースを冒頭に記述するとイケる。&lt;/P&gt;
&lt;P&gt;こうすることで、「微妙に、ちょっとずつ実行条件が違う」、似通ったコマンドを一括りにまとめて書いておくことが出来るので、ファイルをざっと見たときに見通しをつけやすくなる。&lt;/P&gt;
&lt;P&gt;setlocal/endlocal でシメるのと、 set xx = "" と、利用後の処理も忘れなければなおよし。&lt;/P&gt;&lt;img src ="http://sqljp.com/yamaken/aggbug/23997.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>YamaKen</dc:creator><title>メモ: 固定名のテキストログを日付でローテートするバッチファイル</title><link>http://sqljp.com/yamaken/archive/2007/05/26/23481.aspx</link><pubDate>Sat, 26 May 2007 18:31:00 GMT</pubDate><guid>http://sqljp.com/yamaken/archive/2007/05/26/23481.aspx</guid><wfw:comment>http://sqljp.com/yamaken/comments/23481.aspx</wfw:comment><comments>http://sqljp.com/yamaken/archive/2007/05/26/23481.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://sqljp.com/yamaken/comments/commentRss/23481.aspx</wfw:commentRss><trackback:ping>http://sqljp.com/yamaken/services/trackbacks/23481.aspx</trackback:ping><description>&lt;P&gt;過去にコレを基にバッチを作ったことあり。 &lt;A href="http://itpro.nikkeibp.co.jp/article/Windows/20051007/222450/" target=_blank&gt;forfiles.exe&lt;/A&gt; と組み合わせていた記憶がある。手間を考えると VBScript で ObjFile.Move などを使って日付を入れてった方がいいのかもしれないが。(或いは、河端さんの作った、 &lt;A href="http://www.kawabata.com/rentoday.asp" target=_blank&gt;rentoday.vbs&lt;/A&gt; と &lt;A href="http://www.kawabata.com/delold.asp" target=_blank&gt;delold.vbs&lt;/A&gt; を組み合わせるとか。) Linux なら logrotated にて&lt;A href="http://www.atmarkit.co.jp/flinux/rensai/linuxtips/409cngsyslogtime.html" target=_blank&gt;設定&lt;/A&gt;する。&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;Creating Log Archives on &lt;A title="" href="http://www.microsoft.com/windows/" target=_blank&gt;Windows&lt;/A&gt; 2000 &lt;A href="http://www.netadmintools.com/art228.html" target=_blank&gt;http://www.netadmintools.com/art228.html&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;rotate するなら一定期間を経たモノは個別 or 纏めて?cab か tgz に落とした上でメディアに入れるか、ログの格納専用マシンに置いておきたいところではある。&lt;/P&gt;&lt;img src ="http://sqljp.com/yamaken/aggbug/23481.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>
