<?xml version="1.0" encoding="UTF-8" ?> <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>スクリプト</title><link>http://blogs.wankuma.com/yamada/category/2253.aspx</link><description>WSH やら VBScript やら (PowerShell は？)</description><managingEditor>やまだ</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>やまだ</dc:creator><title>私家版 VBScript 経験則</title><link>http://blogs.wankuma.com/yamada/archive/2011/02/27/197303.aspx</link><pubDate>Sun, 27 Feb 2011 21:01:00 GMT</pubDate><guid>http://blogs.wankuma.com/yamada/archive/2011/02/27/197303.aspx</guid><wfw:comment>http://blogs.wankuma.com/yamada/comments/197303.aspx</wfw:comment><comments>http://blogs.wankuma.com/yamada/archive/2011/02/27/197303.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yamada/comments/commentRss/197303.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yamada/services/trackbacks/197303.aspx</trackback:ping><description>&lt;p&gt;わたしとたわしの違い&lt;/p&gt; &lt;p&gt;- きれいに洗う手助けをするのがたわし&lt;br&gt;- いろんなところを汚してしまうのがわたし&lt;/p&gt; &lt;p&gt;いや、そんなことはどうでもよくて。&lt;/p&gt; &lt;p&gt;やまだです。ただいまフェイドアウト中です。笑……えない (T^T)&lt;/p&gt; &lt;p&gt;えーと、今頃 VBScript 使いまくりの状態なんですが。&lt;br&gt;客先納品みたいな話は置いておいて、身の回りの業務効率改善なんかだと、これが一番使える言語ではないかと思ったり。&lt;br&gt;で、使っていて思ったことを書き並べてみよーかと。いや、もの凄くいまさらの話なのはよくわかってますけど。&lt;/p&gt; &lt;ol&gt; &lt;li&gt;とりあえず　Option Explicit 書いとけ&lt;br&gt;&lt;br&gt;ある意味、鉄則ですかね。&lt;br&gt;暗黙の変数宣言になってしまうと、変数名のタイプミスをしていても別変数の扱いになってしまってなかなか&lt;br&gt;気づかない、とかよく言われていた気もしますが。&lt;br&gt;でも、それ以前の話として、自分の使う変数をリストアップしておくって大事なことかな、と。&lt;br&gt;コードを整理する良いきっかけになるんじゃないかと。あ、いや、ちゃんと設計してから作れば良い話なんですけど、&lt;br&gt;そんな余裕がないからこそ VBScript 使ってるともいえるわけで(苦笑)。&lt;br&gt; &lt;li&gt;えーと、とりあえず実行前にカレントディレクトリ移動しときません？&lt;br&gt;&lt;br&gt;VBScript 実行するときにコードがあるところ以外がカレントになることって、(意図的にやらなければ)ほとんどない&lt;br&gt;気もしますけど……。&lt;br&gt;とりあえず、以下のような感じ？&lt;br&gt;&lt;br&gt;Set objShell = CreateObject("WScript.Shell")&lt;br&gt;Set objFso = CreateObject("Scripting.FileSystemObject")&lt;br&gt;objShell.CurrentDirectory = objFso.GetParentFolderName(objFso.GetFile(WScript.ScriptFullName))&lt;br&gt;&lt;br&gt;バッチファイルだと、以下の一行で済んじゃいますけどね。&lt;br&gt;&lt;br&gt;cd /d %~dp0&lt;br&gt;&lt;br&gt;ついでに、Unix のシェルだと以下のような感じかな？&lt;br&gt;&lt;br&gt;cd $(dirname $0)&lt;br&gt; &lt;li&gt;バッチファイルとの組み合わせありきで考えても良くない？&lt;br&gt;&lt;br&gt;いや、ちょっとしたツールなら VBScript だけで作れますし、共通ルーチン化するなら &lt;a href="http://msdn.microsoft.com/ja-jp/library/cc364501.aspx"&gt;WSF ファイル&lt;/a&gt;にすれば良い、と&lt;br&gt;いう話もありますけどね。&lt;br&gt;バッチファイルから呼び出す形にすれば、環境依存のパラメータはバッチ側に持たせて、共通化できる部分を VBScript &lt;br&gt;にすれば良いのではないかと。そうすれば、VBScript 直呼び出しの際にエンジンは CScript と WScript のどちらになって&lt;br&gt;いるのかなんて気にしなくて済みますし。 &lt;br&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2976ee94-bec5-4314-84fd-8d7ec891c1c5&amp;amp;displayLang=ja"&gt;スクリプトエンコーダー&lt;/a&gt;は過信するな&lt;br&gt;&lt;br&gt;エンコードするんだから、ちょっとした文法チェックぐらいしてくれるんじゃないかと少しは期待はしてしまいましたが。&lt;br&gt;えー、閉じかっこの対応チェックもしてくれてなかったようです……。&lt;br&gt;日本語メッセージはエンコードしてくれないし、結構簡単にデコードもできるようですしねぇ。&lt;br&gt;ただ、手元にコードがあるとついついいつまでも手を入れてしまう、という場合に、エンコードすることで一区切りつける、&lt;br&gt;というぐらいの感覚ではどうかな、と。&lt;br&gt;他人にコードを見せないため、というより、うっかり自分がいつまでも手を入れないためにエンコード化(笑)。&lt;br&gt; &lt;li&gt;VBA（Visual Basic for Application) より VBS(VBScript) で&lt;br&gt;&lt;br&gt;この辺で異論のある方は多いかもしれませんが。&lt;br&gt;むしろ Excel 使う場合でも、VBScript でいーんじゃないかと。VBAの方が、スクリプトの開発環境が整っている、との&lt;br&gt;話はありますけどね。VBScript は&lt;a href="http://msdn.microsoft.com/ja-jp/library/cc364460.aspx"&gt;この辺&lt;/a&gt;を見ながら頑張る、ということで。&lt;br&gt;マクロセキュリティのチェックがどうとか、マクロ付きの場合は拡張子がどうとか、誰かに Excel ファイルのデータを渡す&lt;br&gt;際にマクロ外したりとか、いろいろと面倒なことがありますし。&lt;br&gt;あと、Excel の外から起動したい場合には、やっぱり VBScript かなぁ、と。&lt;br&gt; &lt;li&gt;On Error Resume Next と On Error Goto 0 は使い分けろ&lt;br&gt;&lt;br&gt;最初は On Error Resume Next は入れない方が良いです。エラーがあっても素通りしちゃうとねぇ。&lt;br&gt;でも、そのままだと問答無用でプログラムが落ちますし、Excel アクセス中だと Excel のプロセスがゾンビのように&lt;br&gt;残ってしまうので注意。エラーが確認されたところから順に、以下のようにエラーチェックを入れていくべきかと。&lt;br&gt;&lt;br&gt;On Error Resume Next&lt;br&gt;’エラー原因箇所&lt;br&gt;If Err.Number &amp;gt; 0 Then&lt;br&gt;…&lt;br&gt;On Error Goto 0&lt;br&gt;&lt;br&gt;Excel 操作する場合なんかだと、最終的には全アクセス行ごとにこのパターンで括った方が良いのではないかという。&lt;br&gt; &lt;li&gt;バッチで動かすなら WScript.Interactive で判定だっ&lt;br&gt;&lt;br&gt;エクスプローラやコマンドプロンプトで動作確認した後、タスクで実行しようとしてはまることがありました。&lt;br&gt;バッチモードでだけ動かない場合、どうやってデバッグしたら良いものやら、ということで。&lt;br&gt;バッチモードだと「スクリプトのエラーおよびプロンプトを非表示にする」らしいですが、じゃあダイアログやメッセージ&lt;br&gt;ボックスを表示するプログラムだとどうなるかというと、「問答無用で(何もなかったかのように)そこで処理を終了する」&lt;br&gt;みたいです。&lt;br&gt;単純にそこだけスキップしてくれるのではないかと思った私が浅はかでした……。&lt;br&gt;ということで、バッチで動かす可能性のある VBScript のコードでは、WScript.Echo や MsgBox の呼び出し時には&lt;br&gt;WScript.Interactive でバッチモードか否かの判定を行うようにしておきましょう。&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;ということで、自分のための備忘録でした(結局それかいっ)。&lt;/p&gt; &lt;p&gt;では。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/yamada/aggbug/197303.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>やまだ</dc:creator><title>VBScript ってまだまだ使える？</title><link>http://blogs.wankuma.com/yamada/archive/2011/01/31/196768.aspx</link><pubDate>Mon, 31 Jan 2011 23:00:00 GMT</pubDate><guid>http://blogs.wankuma.com/yamada/archive/2011/01/31/196768.aspx</guid><wfw:comment>http://blogs.wankuma.com/yamada/comments/196768.aspx</wfw:comment><comments>http://blogs.wankuma.com/yamada/archive/2011/01/31/196768.aspx#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yamada/comments/commentRss/196768.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yamada/services/trackbacks/196768.aspx</trackback:ping><description>&lt;p&gt;今年の目標は、今年中に今年度の目標を決めることです。１月も終わりの日にこんなことを書いている&lt;/p&gt; &lt;p&gt;ぐらいなので、妥当な目標かとｗ&lt;/p&gt; &lt;p&gt;えーと、やまだです。&lt;/p&gt; &lt;p&gt;月に１回のエントリすら書かなくなったら、おそらくそのままフェイドアウトするだろうと思っておりましたが、&lt;/p&gt; &lt;p&gt;なんとか昨年は持ちこたえたようですｗ&lt;/p&gt; &lt;p&gt;でも、おそらく今年いっぱいはもたないだろうと思います(苦笑)。&lt;/p&gt; &lt;p&gt;皆様いかがお過ごしでしょーか。&lt;/p&gt; &lt;p&gt;えー、私はいっぱいいっぱいです。『お前らみんな敵だー』状態です。はい、被害妄想入ってます(笑)。&lt;/p&gt; &lt;p&gt;で、あふれた作業をなんとかすべく、ひたすら最近は隙を見つけて定常的な作業のスクリプト化を行ってたりします。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;最新のデータを取得する。&lt;/li&gt; &lt;li&gt;Excelから/にデータを読み込む/書き込む。&lt;/li&gt; &lt;li&gt;取得データをメール送信する。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;この辺をスクリプトで書いて、あとはタスクに仕込んでおけば、意外と省力化はできるもんだなと。&lt;/p&gt; &lt;p&gt;で、この程度のことだったら、C#やVB.NET、PowerShell とか持ち出さなくとも、VBScript で充分&lt;/p&gt; &lt;p&gt;だったりするんじゃないかと思ったりもします。というか、VBScript でないものを使う必然性があまり&lt;/p&gt; &lt;p&gt;感じられなかったりするんですが。&lt;/p&gt; &lt;p&gt;まー、確かに数千行のデータを Excel に書き出すと、CPU がかなりぶん回って青息吐息だったりは&lt;/p&gt; &lt;p&gt;してますけどね。&lt;/p&gt; &lt;p&gt;あと、メール送信に関しては CDO.Message の仕様がよくわからないんですよねー。あまりドキュメント&lt;/p&gt; &lt;p&gt;も見当たらなくて。やっぱり、Excel のオブジェクトブラウザで追っかけていくしかないのかしら？&lt;/p&gt; &lt;p&gt;では、また。&lt;/p&gt; &lt;p&gt;＃たぶん、来月はまだ消えていないんじゃないかと……。&lt;/p&gt; &lt;p&gt;本年も、消息のあるうちは(＜をい)、よろしくお願いいたします。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/yamada/aggbug/196768.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>やまだ</dc:creator><title>Windows Script Host （WSH） メモ</title><link>http://blogs.wankuma.com/yamada/archive/2008/01/14/117388.aspx</link><pubDate>Mon, 14 Jan 2008 23:08:00 GMT</pubDate><guid>http://blogs.wankuma.com/yamada/archive/2008/01/14/117388.aspx</guid><wfw:comment>http://blogs.wankuma.com/yamada/comments/117388.aspx</wfw:comment><comments>http://blogs.wankuma.com/yamada/archive/2008/01/14/117388.aspx#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yamada/comments/commentRss/117388.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yamada/services/trackbacks/117388.aspx</trackback:ping><description>&lt;p&gt;新年になって初めてのエントリです。今年もよろしくお願いします。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;あけました。&lt;/p&gt; &lt;p&gt;……。&lt;/p&gt; &lt;p&gt;今年もしまらない年になりそうです。orz&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;いろいろな意味でいまさらのような気もしますが、ちょっとWSHを触る機会があったのでついでにメモしておきます。&lt;/p&gt; &lt;p&gt;＃必要な時に、情報が埋没していて探すことがよくあるので。&lt;/p&gt; &lt;p&gt;Windows Script Host （WSH） ってのは、VBScript や JScript で記述されたスクリプトをWindows上で動かすための環境（？）です。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ランタイムとドキュメントは以下のページから入手できます。&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.microsoft.com/japan/msdn/scripting/" href="http://www.microsoft.com/japan/msdn/scripting/"&gt;http://www.microsoft.com/japan/msdn/scripting/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;＃Vista以降はもうサポートされないんだろうか？&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;デバッグのやり方としては、以下の呼び出しで実行可能……のはずだったと思う。&lt;/p&gt; &lt;p&gt;cscript 対象ファイル名 オプション //X&lt;/p&gt; &lt;p&gt;＃ VS2005 ではデバッグ対象に含まれていたはずだけど、VS2008では見つからなかったような……。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Windows Script Encoder でスクリプト中の文字列を簡易的に暗号化することができます。&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=2976ee94-bec5-4314-84fd-8d7ec891c1c5&amp;amp;DisplayLang=ja" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2976ee94-bec5-4314-84fd-8d7ec891c1c5&amp;amp;DisplayLang=ja"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=2976ee94-bec5-4314-84fd-8d7ec891c1c5&amp;amp;DisplayLang=ja&lt;/a&gt;&lt;/p&gt; &lt;p&gt;VBScript のファイルを暗号化した場合、拡張子は .vbs から .vbe に変わります。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ほとんど名前を聞かないですが、もう WSH は消えていくことになるんでしょうかねぇ……。&lt;/p&gt; &lt;p&gt;これはこれで便利なんだが。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/yamada/aggbug/117388.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>