タグ:script ( 24 ) タグの人気記事

また、JScriptネタ

ここんところ、ずっとJScriptネタばっかりだけど、今まで会社でつかっていたツール類を作り直しているんだけどADOのRecordSetのデータ取得方法で高速なやり方というのをここで知ったんだけど、なんかいまいちわかんなかったんだけど、さっきやっとわかった。

以下はDBにMySQL使っているけど、DB変わってもちょっと変更するだけで済むから自分用にメモ。


var objADO = new ActiveXObject("ADODB.Connection");
objADO.Open("dsn=
MySQL;uid=xxxx;pwd=xxxx");
objADO.CursorLocation = 3;
var rs = objADO.Execute("SELECT * FROM 該当するテーブル名");

/*
getString メソッドは以下URLを参照した。
http://www.w3schools.com/ado/met_rs_getstring.asp
この場合には、カンマ区切りで表示をする
*/
var RSresult = rs.getString(2, 10000, ",", "\n", "NULL");
WScript.Echo(RSresult);

var nothing = rs.ActiveConnection;
objADO.Close();



ここんところ、JScript のコードを家帰ってから見ているうちに、だんだん見慣れてきたなぁ
[PR]
by h5y1m141 | 2006-09-13 22:50

JScript での配列とオブジェクトの列挙

MSDNのJScriptのページなどを参考にして配列とオブジェクトの使い方をちょっと勉強

/*
配列value1に10,11,12と値を格納して
配列の要素を全部表示
*/

var value1 = new Array(10,11,12);

for(var icount=0; icount < 3; icount++) {
WScript.Echo(value1[icount]);
}

/*
myObject というオブジェクトを生成して
そのオブジェクトのプロパティを表示
*/
var myObject = new Object();
myObject.name = "test";
myObject.age = "22";
myObject.phone = "00-0000-0000";

var tempProperty;
for (tempProperty in myObject) {
WScript.Echo(tempProperty + "\t" +
myObject[tempProperty]);
}


[PR]
by h5y1m141 | 2006-09-13 08:50

JScript 使ってインストールされているホットフィックスの一覧表示

これを見ながら、JScriptで、インストールされているホットフィックスの一覧を、hotfix.txt というファイルに書き出すスクリプト書いたけど、VBScriptと違う所が細かいけど結構あるから、なれないと書きづらいかも

var wbemFlagReturnImmediately = 0x10;
var wbemFlagForwardOnly = 0x20;

var objWMIService = GetObject("winmgmts:\\\\.\\root\\CIMV2");
var colItems = objWMIService.ExecQuery(
"Select * from Win32_QuickFixEngineering",
"WQL",wbemFlagReturnImmediately |
wbemFlagForwardOnly);
var objFSO = new ActiveXObject("Scripting.FileSystemObject");
var objText = objFSO.CreateTextFile("c:\\hotfix.txt",true);
var enumItems = new Enumerator(colItems);
var HotFixID
for (; !enumItems.atEnd(); enumItems.moveNext()) {
var objItem = enumItems.item();
HotFixID = HotFixID + objItem.ServicePackInEffect + "\n";
}
objText.WriteLine(HotFixID);
objText.Close();

[PR]
by h5y1m141 | 2006-09-11 20:44

一定時間毎に処理をする

今まで、会社のPCでタスクスケジューラーで、一定時間毎に定型処理をしていたんだけど、ちょっと諸事情により、タスクスケジューラー使えなくなったので、スクリプト書くことにしたんだけど、折角だから、今までみたく、VBScriptではなく、JScript で書いてみた。

完成形じゃないけど、こんな感じの処理だったら、一定時間毎に処理ができる

function checkHours() {
var currentTime,currentHours;
currentTime = new Date();
currentHours = currentTime.getHours();
return(currentHours);
}

function checkMinutes() {
var currentTime,currentMinutes;
currentTime = new Date();
currentMinutes = currentTime.getMinutes();
return(currentMinutes);
}

do {
var m,h;
h = checkHours();
m = checkMinutes();
if (m== 0) {
WScript.Echo ("処理A");
}
else {
WScript.Echo ("処理B");
}

/*
ループしつづけるとCPU使用率上がるので
待ってから処理を行う。30000だと30秒
*/

WScript.Sleep (30000);
} while(h<22);

[PR]
by h5y1m141 | 2006-09-06 21:25

ちょっと勉強

MacでPerlの勉強しはじめているんだけど、さしあたって会社にあったSpidering hacksのLWP::Simpleを用いた簡単なデータ取得っていうやつを書いていたんだけど、本に書いてある通りにやってもうまくいかなかったんだけど、どうもPerlがLWP::Simpleのディレクトリを検索してくれなくてえらーになっていたみたい

なので、

BEGIN {
unshift @INC,'/Users/xxxxxx/.cpan/build/libwww-perl-5.805';
}

という一文を追加したらできた!

!/usr/bin/perl -w
use strict;
BEGIN {
unshift @INC,'/Users/xxxxxx/.cpan/build/libwww-perl-5.805';
}
use LWP::Simple;
use Encode;
use encoding 'shiftjis';
binmode(STDERR, ':raw:encoding(shiftjis)');
my $url = 'http://www.yahoo.co.jp';

my $content = get($url);
$content = decode('shiftjis',$content);
print $content;
[PR]
by h5y1m141 | 2006-06-18 21:38

Ruby を勉強してみてVBScriptのことを少し考えてみた

今までVBScriptと何かのオブジェクト(WMI、ADSIや、フリーのBASP21とか)を組み合わせて色々スクリプトを書いてきたので、Rubyも比較的自分にはとっつきやすいかも。

日経ソフトウェアのサンプルで、Rubyでのファイル処理のコードがあって、IOクラスのFileクラスとやらを利用していたけど、これってVBScriptでいうところのFileSystemObject 使う感覚とあんまりかわんないと思った。

今まであまりみつからなかったWMIネタのサンプルもHey,Scripting Guyというとっても参考になるサイトもあるわけだから、VBScriptで出来ることって、意外に多いんじゃないのかとちょっと見直した。
ただ、RubyにはRAAというPerlのCPANみたいなものがあるから、こういう仕組みがVBscriptにないのが、ちょっと残念な所。この辺り改善されればよいのに。

BASP21のPro版の一部機能がどんどんフリー版に移植されていけばよいのにと勝手に期待しているんだけどねー
[PR]
by h5y1m141 | 2005-04-28 16:06 | 業界動向

Ruby をWindowsで使うためのセットアップ

今月の日経ソフトウェアの記事を参考に

1.ActiveScriptRuby 1.8.2.2 をダウンロードしてインストール

2.RDE(Ruby専用の開発環境)のセットアップのために下記のZIPファイルをダウンロードして適当な場所に解凍

0.991patch.zip
0.990zip
RDE DLL

3.解凍したZIPファイルの0.990zip に、patchとdllを上書きコピーする

4.RDE.exe起動後、Tool → Option からOther2タブをクリックしてTranslationFiles 解凍したフォルダのTranslations\Japanese.xml を選択すると日本語表示が可能になる。

あとはTool →エディタ設定で任意の日本語フォントを選択すればO.K

5.HELPファイルはこちらにある。(最新はこちら)それを参照できるように設定する
[PR]
by h5y1m141 | 2005-04-25 10:44 | 業界動向

iTunes のプレイリスト作成スクリプト

Windows Script ノスゝメというページにMP3自動更新プレイリストを作成するスクリプトがあったのですが、WMI つかえば、もう少しスマートにできそうな気がしたので、ちょっと書いてみました。

PC上のMP3とAVI ファイルを検索して、ファイル出力しますが、MP3だけでよいという場合には11行目の

& "Where Extension ='mp3' or Extension='avi'")



& "Where Extension ='mp3'")

と変更すればO.K.


==MakePlayList.vbs==
Option explicit
Dim strComputer
Dim objWMIService
Dim colFiles
Dim objFIle
Dim strPlayList
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
("SELECT * FROM CIM_DataFile "_
& "Where Extension ='mp3' or Extension='avi'")

For Each objFIle in colFiles
strPlayList = strPlayList & objFile.Drive & _
objFile.Path & objFile.FileName & "." & _
objFile.Extension & vbCrLf
Next

' プレイリスト作成

Dim objFSO
Dim strNewFile
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set strNewFile = objFSO.CreateTextFile(".\PlayList.m3u", True)
strNewFile.Write(strPlayList)
strNewFile.Close
Set strNewFile = Nothing
==ここまで==
[PR]
by h5y1m141 | 2005-04-21 10:13 | 業界動向

電話ログシステムのvbs版

電話をかけるだけで、その音声がブログにアップされる「電話ログ」なるものを考え付いた方がいらっしゃるのだけど、ご本人が書かれているとおり、色々なものの組み合わせになっている。

電話からの入力はS Rec午後のこ~だに頼るけど、それ以外のPerl の処理とタスクスケジューラーの部分は、VBScript(と別途BASP21コンポーネント)だけで出来そうなきがするので、ちょろっと書いてみた。

手元にテスト利用可能なFTPサーバーなかったので、FTPのPutの処理があやしいかもしれないけど、たぶんこれで問題ない気がする。

==ここからUpToMoblog.vbs==
Option explicit
On Error Resume Next
Dim strComputer
Dim objWMIService
Dim colMonitoredEvents
Dim objLatestEvent

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\cimv2")
If Err <>0 then
Wscript.Echo now & vbtab & "Can't connect tagetmachine."
Wscript.Quit
Else
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceCreationEvent " _
& "WITHIN 10 WHERE " _
& "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
& "TargetInstance.GroupComponent= " _
& "'Win32_Directory.Name=""c:\\\\temp""'")
Do

Set objLatestEvent = colMonitoredEvents.NextEvent
Wscript.Echo now & vbtab & objLatestEvent.TargetInstance.PartComponent
call UseFTP
call sendEmail
Loop
End if

Sub sendEmail

Dim objBobj
Dim strSvrname
Dim strMailTo
Dim strMailFrom
Dim strMailSubj
Dim strMailBody
Dim strMailAttachment
Dim Msg

Set objBobj = WScript.CreateObject("basp21")
strSvrname = "xxxx.xxxx.xxx.xxx"
strMailTo = "xxxx.xxxx.xxx.xxx"
strMailFrom = "xxxx.xxxx.xxx.xxx"
strMailSubj = "xxxx.xxxx.xxx.xxx"
strMailBody = "xxxx.xxxx.xxx.xxx"
strMailAttachment = "xxxx.xxxx.xxx.xxx"

msg = objBobj.SendMail(strSvrname,strMailTo,strMailFrom,strMailSubj,strMailBody,strMailAttachment)

End sub

Sub UseFTP

Dim objFTP
Dim strFTPSvrname
Dim strFTPloginuser
Dim strFTPloginpasswd
Dim rc

Set objFTP = CreateObject("basp21.FTP")
strFTPSvrname = "xxxx.xxxx.xxx.xxx"
strFTPloginuser = "xxxx.xxxx.xxx.xxx"
strFTPloginpasswd = "xxxx.xxxx.xxx.xxx"

rc = objFTP.Connect(strFTPSvrname,strFTPloginuser,strFTPloginpasswd)

If rc= 0 Then
objFTP.Command("pasv")
rc = objFTP.PutFile("C:\temp","html/images",1)
objFTP.Close
End if

End sub
==ここまでUpToMoblog.vbs==

ちなみに上記のスクリプトの"xxxx.xxxx.xxx.xxx" の箇所を適宜修正して
利用する必要がありますけど。

strSvrname:SMTPサーバーを指定
strMailTo:宛先のメールアドレスを指定
strMailFrom:送信者のメールアドレスを指定
strMailSubj:メールの題名を指定
strMailBody:メールの本文を指定
strMailAttachment:メールに添付するファイルを指定
strFTPSvrname:FTPサーバーを指定
strFTPloginuser:FTPサーバーへのログインIDを指定
strFTPloginpasswd:FTPサーバーへのログインパスワードを指定
[PR]
by h5y1m141 | 2005-04-18 14:45 | 業界動向

WSHでのSSL

WSH+何かのコンポーネントをつかってSSLできるのかどうか、調べる必要があって、BASP21でできないのかなぁと思ったら、Pro版のFAQによると、Pro版には、SSL機能があるので、これだったらできるみたい(ただしライセンス料金10万弱だけど)。とりあえずメモ。

ちなみに、他の言語だったら手軽に出来そうな気がする(Ruby
Perl +何かのModule(IO::Socket::SSLあたりかな?)
[PR]
by h5y1m141 | 2005-03-30 14:25 | 業界動向