Windowsマシンのスクリプト

「日付をつけた連番のファイルを作成する」(今作ったのだが)のようなツールを作ろうとすると、わざわざC#とかC言語で書くのは面倒/大袈裟なので、スクリプトを使う、と思う多分。

日頃、C#やVB.NETを使っていると、このあたり忘れてしまうわけですが。果たして、構築し直した vaio type-T(ドライブが40GBしかないのが辛いところ…)では、Visual Studio 2008 は入れたものの、スクリプト言語は入れていない。はてどうしたものか。

私の馴染みなスクリプト言語と言えば、perl な訳ですが、先ほどのツールを作るために activeperl をダウンロードして、というのは面倒なので、やっぱり windows マシンならば vbscript というところでしょう。という訳で作ってみました。。。何故か 30 分近くも掛ってしまった。。。忘れているからねぇ。
できたソースはこんな感じ

‘==============================================================
‘ 連番でテキストファイルを作成するスクリプト
‘==============================================================

dim fso  ‘ファイルオブジェクト
dim folder  ‘作成先のフォルダ名
dim file  ‘作成するファイル名
dim n       ‘本日

‘==============================================================
‘定数
‘==============================================================
folder = “c:\work\blog\memo\”

set fso = WScript.CreateObject(“Scripting.FileSystemObject”)
‘日付を取得
n = now
file = Year(n) & Right(“00” & Month(n),2)  & Right(“00” & Day(n), 2 )

‘ファイルの新規作成
for i = 1 to 99
 f = folder & file & “_” & right(“00” & i, 2 ) & “.txt”
 if fso.FileExists( f ) = false then
  set ofile = fso.OpenTextFile( f, 2, true )
  ‘ofile.WriteBlankLines(1) ‘ひとつだけ空行を作る
  ofile.Close
  exit for
 end if
next

さて、ソースコードの話はどうでもいいわけですが、今回のような軽いスクリプトを作るときに何がいいのかなぁと思うと、

 * perl
 * ruby
 * phython(←使ったことはない)
 * vbscript

ぐらいが候補ですかねぇ。最近は PHP のスクリプトもあります。

perl, ruby, 多分 phython は正規表現が楽なので、テキストを検索してなんとかするというのがお得意。フォーマットをヒアドキュメントで書いて、それに埋め込んでいくというのはお手のものです。ヒアドキュメントというのは、perl のソースコードにドキュメント部分と変数部分を埋め込む方法で、asp.net や jsp に似ています。というか、asp,net や jsp が perl 等のヒアドキュメントに似ています。

具体的には、

print << EOF
名前: $name
住所: $address
EOF

な感じで詳細は、↓なぞを参照してください。

CGI-Perl 基礎実地編 – 実習3 (ヒアドキュメント)
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_kj03.htm

vbscript でヒアドキュメントをやることも可能は可能なんですが、perl 等ほどには手軽ではありません。

閑話休題。

スクリプト言語は、それぞれ特徴があって手に馴染むもの/馴染まないものがあり、私は大学の頃に fortran と perl を組み合わせていたために、ruby に手が出ておりません。先ほどのようなオブジェクト指向を使わない、簡単なツールであればさほど言語は問いません。

いえ「言語を問いません」と言いましたが、実は「問います」。というのも、この vaio type-T。さらの状態にしてしまったので、標準で付いているスクリプト言語以外は使えないわけで、となると、候補としては、

* vbscript
* javascript
* C#
* Visual Basic .NET

実は Windows XP3 や Vista のマシンでは既に .NET Framework が(勝手に)導入されており、実は環境変数を設定すれば Visual C# Express Edition を入れなくてもコンパイルができます。当然実行もできます。

具体的には

 1. C:\Windows\Microsoft.NET\Framework のフォルダを調べる。
 2. ↓のようなフォルダがあれば、
2009/04/13  19:00    <DIR>          v1.0.3705
2006/11/02  20:18    <DIR>          v1.1.4322
2009/04/14  19:24    <DIR>          v2.0.50727
2006/11/02  21:41    <DIR>          v3.0
2009/04/14  15:59    <DIR>          v3.5
 3. それぞれのフォルダに以下があればコンパイルできる。
  – csc.exe   C#のコンパイラ
  – vbc.exe   vb.net のコンパイラ

これは windows xp, vista の場合ですが、windows server 2008 の場合は条件がきつくなっていて、IIS や SQL Server 等が入っていないと、wscript.exe/cscript.exe しかありません。
# windows server 2008 の「core インストール」の場合は、.net framework が入らないので
# ありませんが。

つまり、手元で開発をするとか社内マシンの場合は perl やら ruby やらを入れてもよいわけですが、

 * 客先の運用マシン
 * 客先の運用サーバー
 * 社内でもサーバーの類

なんかは、このあたり「勝手に」何かソフトウェアを入れることを許されない。じゃあ、面倒な作業は手作業にするのかと言われれば、面倒だなぁが(私は)先に立ってしまうわけで。となると、適度に vbscript ぐらいは使えたほうがいいよね。という感触を持っているのですがどうでしょう?
# もともと、そういう方針で作られた訳なんですが。

そうそう、客先の環境にExcelが入っていれば、VBAで作るってのもあり。

カテゴリー: 開発 パーマリンク