2009/03/14

日本の電池メーカ オワタ?・・・


こう云う成果をUSAで出されると、国内メーカにとってはイタいよね・・・ しかもMITって・・・

充電時間が最大36分の1になる画期的なリチウムイオン充電池が登場 - Gigazine [ 20090313 1238 ]

SIGMA SD14専用のリチウムイオンバッテリー BP-21 で云うと、3分30秒前後で充電完了するワケだ・・・
同じ大きさ(バッテリー容積)なら、撮影時間も延びるってコトだろうな・・・

そうなると、のて機でも、便利になるだろうが、結局、
(長時間使える)小型燃料電池と どっちが先に世に出るかで、市場における力関係が決まるだろうな・・・
実用化2~3年後とか云ってたら、まぁアウトだね。 安全性ってのもあるだろうが、Limit1yearってトコかな。
MITも、撃沈したくはナイだろうし、国内に拘らず日本メーカーと結託するコトを激しく推奨するよ。

2009/03/13

VBScriptで鯖管理 そにょ2・・・


このログのスクリプトは以後のログで更新しました。[ 20090411 1839 ]

鯖ってより、Windows(NT系2k以降)端末全般に云えるコトかも知らんが、
Windows起動時のアプリケーション自動起動・・・
[スタート]メニュー、[プログラム]配下の[スタートアップ]に登録したり、
レジストリの
   [HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run]    
に登録したりと、やり方は様々だろう。

ただ、残念なことに、これらでは起動順序を指定できない。

唯一その機能を持つレジストリキー RunOnce も、既知と思うが、
システムレベルのファイル更新向けなので、初回起動時にのみ動作し、設定が消去される。

スタートアップ起動させたいが、起動タイミングがカブると具合の悪いものも、意外に少なくはナイようだ。
しかも、スタートアップフォルダ登録では、ログオン時にしか機能しない。

ココで 紛らわしいので一応の解説を入れると、[スタートアップ]フォルダ登録での起動と云うのは、
Windowsのブート後、ログオン画面が表示され、
  (オートログオンを設定している場合は少し違うが、実際は同じ。
   マシンがショボいと、一瞬ログオン画面が見えることがあるので判る)
ユーザーがログオンした後の自動起動をサポートしている。
で、グループポリシーで云うトコロの"スタートアップスクリプト"と云うのが動作するタイミングは、
前述にあるWindowsブートの後半で実行される、
つまり、ログオンより、スタートアップのほうが先行動作する・・・ なんて紛らわしい・・・

で、チョイと判ってるヒトなら、グループポリシーで、スタートアップ/ログオンスクリプトに
実行させたい対象を設定して、起動順序をある程度、制御下においてみることも試みていると思う。
本来はスクリプトを登録するのがスヂっポイのだが、実行ファイルも直接置けるし、パラメータの指定も出来る。

で、そのグループポリシーのスクリプト登録、スタートアップ/ログオン/ログオフ/シャットダウン
それぞれ、分けて設定できる、RAMドライブのような変り種利用者だったら、この意味は判るだろうし、
中々に嬉しい機能だろう。
ただ残念ながら、起動順は設定できるようだが、次の処理までの移行時間までは設定できないと見える・・・

しかしまぁ、ココでもVBScriptが使えるってコトで、だったら・・・とチョイっと作って実働させている。

   sScriptor.zip    
▲ を、右クリックしてファイルとして保存してください。


   {sScriptor}.vbe

名称変更 - 拡張子以外 可
iniファイル無しでの単独起動 - 無効
パラメータ - ナシ


   {sScriptor}.ini

名称変更 - 拡張子以外 可

iniファイル内 行書式)

{アプリケーションフルパス};{Parameter};{CallType DDE or 省略};WindowType 0 or 1;{mSec(Interval)};[Title(Memo)]


{アプリケーションフルパス} 起動したいアプリケーションをフルパスで指定
{Parameter} アプリケーションに対するパラメータを記述
{CallType} rundll32.exeほかを使用したアプリケーション起動時には DDE それ以外は指定不要
{WindowType} 0(非表示) or 1(通常)
{mSec(Interval)} 次の処理平衡するまでの時間を1/1000Sec単位で指定
[Title(Memo)] 機能には影響しない、タイトルなどのメモを記述

行頭に;セミコロン配置で、非実行行。



iniファイル例)
   C:\Applications\System Tools\ProcessorManegements\CrystalCPUID\CrystalCPUID.exe;/F22 /P1 /E;;1;4000;[CrystalCPUID]    
C:\Applications\System Tools\Desktop Extension\IconPositionControl\KH Software Factory\KH DeskKeeper\deskkeep.exe;;;1;2500;[KH DeskKeeper]
C:\Applications\System Tools\HardwareControls\Monitor Extension\CoolMonitorOff\cmoff.exe;;;;2000;[CoolMonitorOff]
C:\WINDOWS\system32\SxgTkBar.exe;;;1;3000;[SxgTkBar]
C:\Program Files\Microsoft Office\Office10\OSA.EXE;-b -l;;1;1500;[Microsoft Office]
C:\Applications\System Tools\FEP Extension\XLangBar\XLangBar.exe;;;1;1500;[X LangBar]
C:\Program Files\Windows Defender\MSASCui.exe;-hide;;;5000;[Windows Defender]
C:\Program Files\LSoft Technologies Inc\Active@ Hard Disk Monitor\DiskMonitor.exe;hide;;1;3000;[DiskMonitor]
C:\Applications\Maintenance Tools\Status Uty\Processor Information\ClockSpeed_D\ClockSpeed_D.exe;;;1;1500;[ClockSpeed D]
C:\Program Files\Common Files\Adobe\Calibration\Adobe Gamma Loader.exe;;;;2000;[Adobe Gamma Loader]
C:\WINDOWS\system32\rundll32.exe;shell32.dll,Control_RunDLL desk.cpl,,3;DDE;1;2500;[MonitorProperty DDE]
;C:\WINDOWS\system32\taskmgr.exe;;;1;2000;[TaskManeger]


ちなみにグループポリシーで登録するファイルは、

C:\WINDOWS\system32\GroupPolicy
├ Machine
│ └ Scripts
│ ├ Startup
│ └ Shutdown
└ User
└ Scripts
├ Logon
└ Logoff
に、保存するのが本来らしい、が、そうでなくても機能する。
しかし、[スタートアップ]フォルダのように、ココに直接ファイルを置いただけでは機能しない。
[管理ツール]-[グループポリシー (グループ ポリシー オブジェクト エディタ)]内の、

 [コンピュータの構成]-[Windowsの設定]-[スクリプト(スタートアップ/シャットダウン)]
 [ユーザーの構成]-[Windowsの設定]-[スクリプト(ログオン/ログオフ)]
 
に対し、任意の処理へGUIを使って登録する必要がある。
また、前述のように、既定フォルダ以外に配されている場合は、フルパスでの登録が必要となる。
って、設定がGUIになってるので、心配はナイが・・・

で、以下に、その設定画面の画像を並べてみたので参考にしてほしい。








なんか、このログ作るのに、また新たな副産物が出来てしまった・・・
おかげで、ソースを作ったままの見た目で うp出来るようになった。
と、云うのも、Bloggerの余計な処理のおかげで、preタグが思うように機能しなくてね(-_-;)

んで、今回分のソースなど・・・
    '***** ↓↓↓ScriptTitle↓↓↓ *********************************************************     
' Startup/ShoutdownScripting with out TestMode
'- Created by LazwardFox -

' Update 20090313 1709 パラメータ省略によるエラー処理を訂正
' Update 20090311 1634 inArray を inArrays に差し替え、必須の lArray を追加
' iniLoaderを合せて修正
' Update 20090226 1908 テストルーチン排除
' Update 20090226 1202 DDE式の記述にフラグで対応へ変更
' Update 20090226 1025 DDE式の記述に、通常呼び出しを""で囲んで対応
' Update 20090226 0630 テストモード追加
' Update 20090226 0605 ウィンドウタイプの指定と、インターバルタイム設定可能に。
' Release 20090226 0451
' Update 20090226 0346 iniファイル仕様に変更
' DevStart 20090226 0235 単純動作のみ機能

'***** ↓↓↓ ObjectDecralations ↓↓↓ *************************************************
Dim WSHShell, Fs
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set Fs = WScript.CreateObject("Scripting.FileSystemObject") 'ファイル制御

'***** ↓↓↓Decralations↓↓↓ *********************************************************
Dim sTitle, artargets, iExe, sWq, rTarget, wType, sSec
Const vbWq = """"
sTitle = Fs.GetBaseName(Wscript.ScriptName)

'***** ↓↓↓MainRoutine↓↓↓ *********************************************************
arTargets = arIni(";")
If IsEmpty(arTargets) Then
Else
For Each iExe In arTargets
If IsEmpty(iExe(0)) or iExe(0) = "" Then
ElseIf iExe(0) = "" Then
ElseIf Fs.FileExists(iExe(0)) Then
sWq = vbWq
If IsEmpty(iExe(2)) or iExe(2) = "" Then
ElseIf Ucase(Cstr(iExe(2))) = "DDE" Then
sWq = ""
End If
rTarget = sWq & Cstr(iExe(0)) & sWq
If IsEmpty(iExe(1)) or iExe(1) = "" then
Else
rTarget = rTarget & " " & sWq & Cstr(iExe(1)) & sWq
End If
If IsEmpty(iExe(3)) or iExe(3) = "" Then
ElseIf IsNumeric(iExe(3)) Then
wType = Cint(iExe(3))
Else
wType = 0
End If

WSHShell.Run rTarget, wType
If IsEmpty(iExe(4)) or iExe(4) = "" Then
ElseIf IsNumeric(iExe(4)) Then
sSec = Cint(iExe(4))
WScript.Sleep sSec
Else
sSec = 0
End If
End If
Next
End If
Set Fs = Nothing
Set WSHShell = Nothing
Wscript.Quit

'***** ↓↓↓Functions↓↓↓ *********************************************************
'------------------------------------
'arIni - スクリプトと同名のiniファイルがあれば、内容を配列で取得
'- Created by LazwardFox -

' Update 20090226 0330
' Update 20090223 0550 変則的フォルダ名回避のため修正
' Release 20090223 0509

Public Function arIni(lS)
Dim sNFull, rFolder, sN, iniFile
sNFull = Wscript.ScriptFullName
rFolder = Fs.GetParentFolderName(sNFull)
sN = Fs.GetBaseName(sNFull)
iniFile = Fs.BuildPath(rFolder,sN & ".ini")
If Fs.FileExists(iniFile) Then
arINI = iniLoader(iniFile,lS,0)
End If
End Function

'------------------------------------
'iniLoader - 対象をiniファイルより取得、既存iniファイルのみ指定可。
'- Created by LazwardFox -

' Update 20090311 1650 inArraysに合せて修正
' Update 20090226 1025 DDE式の記述に対応
' Update 20090226 0855 データ内にコンマを利用可能に
' Update 20090226 0356 多重配列向けに修正
' Update 20090223 0550 戻り値可変 [ 0 - 配列 ] [ 1 - lSplitterで指定した区切り文字で連結された文字列 ]
' Release 20090223 0509

Public Function iniLoader(iniFile, lSplitter, Control)
Dim nS
nS = Fs.GetFile(iniFile).size
If nS = 0 Then
iniLoader = Array(Fs.GetParentFolderName(iniFile))
Else
If IsEmpty(lSplitter) Then
lSplitter = ","
End If
Dim iFile, lResult, strResults, rL, iniLoaded
Set iFile = Fs.OpenTextFile(iniFile,1) 'iniファイルを読み取りモードで開く
WScript.Sleep 150
Do Until iFile.AtEndOfStream '読み込み
rL = iFile.ReadLine
lResult = lResult & "**" & rL & "**"
Loop
WScript.Sleep 150
iFile.Close 'Iniファイルを閉じる
strResults = Replace(Replace(lResult,"****","*"),"**","")
If Control = 0 Then
inArrays strResults, "*" & lSplitter, iniLoader
Else
iniLoader = Replace(strResults,"*",lSplitter)
End If
End If
End Function

'------------------------------------
'inArrays - 多次元配列構築
'- Created by LazwardFox -

'配列 及び 文字列から、区切り文字を指定して多重配列を作成し返す。

' Update 20090228 1248 strLimitters指定に、区切り文字 ~(チルダ)不要に。
' Update 20090228 0833 配列のほか、文字列もソースに適用可能に。
' Update 20090223 0917

'inArrays(
' tSources - 区切り文字を含む文字列 ないし、それらで構成された配列
' ,strLimitters - 区切り文字を順番に並べた文字列を指定
' ,arReturn - 戻り値が代入されます。
' )

Function inArrays(tSources, strLimitters, arReturn)
Dim arSources, arLimitters, iLimitter, arInArrays, iSource, Pc
arSources = tSources
lArray strLimitters, arLimitters '< Update 20090228 1248
For Each iLimitter In arLimitters
If VarType(arSources) = 8 Then
arInArrays = Split(arSources,iLimitter)
Else
Pc = 0
ReDim arInArrays(0)
For Each iSource in arSources
ReDim Preserve arInArrays(Pc)
arInArrays(Pc) = Split(iSource,iLimitter)
Pc = Pc + 1
Next
End If
arSources = arInArrays
arInArrays = Null
Next
arReturn = arSources
End Function

'------------------------------------
'文字列を1文字ずつバラし、配列として返す
'- Created by LazwardFox -

' Release 20090228 1246

' lArray(
' strLetters - 分解したい文字列
' ,rArray - 戻り値が代入されます。任意の変数名を指定
' )

Function lArray(strLetters, rArray)
Dim Pc, rLetters()
Set objADO = CreateObject("ADODB.Stream")
With objADO
.Type = 2
.Open
.WriteText strLetters
Pc = 0
.Position = 0
Do Until .EOS
ReDim Preserve rLetters(Pc)
rLetters(Pc) = .ReadText(1)
Pc = Pc + 1
Loop
End With
rArray = rLetters
objADO.Close
Set objADO = Nothing
End Function


ウチの鯖タンでは、
[HKEY_USERS\.DEFAULT] や [HKEY_CURRENT_USER] 他の
[Software\Microsoft\Windows\CurrentVersion\Run] の中身を全部移行して利用している。

コイツを使って、最速起動に繋がるBoot時のスタートアップパターンとか、見つけてみるのも一興かとw

・・・ただ、タスクマネージャだけはヤメといたほうがイイよ、最小化指定で起動すると、
起動自体は出来るケド、ウインドウとして開かなくなるからww

PowerBar(のて機やUPS接続機以外では不要)は、ココには"身"の記述無かったので、触れていない。
Dr.ワトソンも、敢えて触れずにおいている。(存在忘れてたってのが正しいが・・・)
<そのまま使えるVBscript 鯖管理 起動順序 グループポリシー スタートアップ ログオン ログオフ シャットダウン>

所詮ソノ程度か・・・


関係省庁や自動車メーカーってぇ程度でデキるコトなんてソンなモンだろうなε-( ̄ヘ ̄)┌ヤレヤレ

ITS:交通事故防止に先端情報技術、10年度実現へ - 毎日.jp [ 20090309 1434 ]

バカな御役所連中じゃ、金掛けて無用に規模の大きなハコを作りたがるキライがあるので、
こう云うハナシが出てきたら、注意して推移を見ていかないと、
JHと結託した企業らに、無駄に金を取られる結果となったETCの二の舞となるのだが、
どのくらいのイパーン人が、そう云ったコトを理解しているコトやら・・・
ま、アタマの悪いヤシらが、いくらボられようと知ったこっちゃナイけどネww

はっきり云って、普及も安易な最良策には、そんな大掛かりな設備も費用も、全く必要ない。

★ETC車載器に、WiFiとWiMAX、そしてナビと共用可能なGPSのアンテナを組み込み、
 車ごとにIPv6のUniqueアドレスを割り当てWebサーバとして機能させる。

★車同士がFONのような、WiFiのアクセスポイント 及び 中継局として機能するようにする。

★それぞれのユニット(車)が近接することで通信を開始、それぞれの移動方向を識別し、
 交差点などでの、見通し外位置の車両接近を感知し、警告を表示できるようにする。

コレだけでも、出会い頭の事故などは、カナリ減らせると云うのは、想像に易しい。
ついでに、フラッシュメモリに近接車両のIPをログするようにしておけば、
当て逃げなどの事故の際にも、犯人検挙に寄与できるだろう。

そこで更に、

★安価なUSBカムを接続できるようにし、フラッシュメモリレコーダ回路も搭載し、
 上記Webサーバ機能を利用して、ドライブレコーダ/移動Webカムとして稼動させる。
 
この、Webカム化っては、コレが以外に必須だ。
と云うのも、事故の場合、対象車両炎上などで、機材が灰になるコトもあるだろうし、
機器不良に寄る万一のレコードミスも、結構考えられる。
公開化しておくことで、何れかの他者が記録を取っているコトを期待できる。
そう云う向きを逆手にとって、バックアップとして利用するとwww
接続しているIPすべてをログとり、他のユニット(車両)と相互記録する構造なら、
そう云う折にも、事故に巻き込まれていない ないし、破損軽微な近接車両から画像やIPのログを回収できる。

また、コレはオマケだか、

★信号機や道路標識などにも同様の機能と、Webカムレコーダを追加し、
 接近車両管制(事故防止)Serverとして機能させる。

当然、近接する車両のWebカメラ画像も記録するよう構成するべきだろう。
イマドキ高価な監視カメラなど使わなくとも、高度な画像補正処理がたった1つの石だけで、
それも一瞬で出来ちまう時代だ、チャチぃ防水(赤外線撮影モード付き)Webカムと、
いくらもしないフラッシュメモリレコーダ回路を組み込むだけで、用を成す。
まぁ、コイツに関しては、管轄が警察や国土交通省になるだろうから、ひき逃げなど多々ある事故も、
税金から無駄な人件費や、貴重な時間掛けて捜査する必要性はなくなる。
コノ程度の設備への投資なら、経年換算で、役立たずに掛ける人件費よりは、余程安上がりだ。

そもそも、現在の技術なら、試行機ツクるのにも、殆ど金は必要ナイだろう。
それこそ "ひまつぶし"レベルで出来るワナΨ(`∀´)Ψ

ソノ上、それらシステムは、ユビキタスシステムの一翼を担わせることもでき、一石二鳥と云うわけだ。
以前 国を挙げてヤルと宣うてた、"日本全国隈なくインターネット環境を敷設する"ってのにも、寄与出来そうじゃネ?w
折角コスト掛けてナニかヤるなら、一石で多数の鳥をオトとせるほうが、イイに決まってる。

どうせ今後、車載ETC機は なにかしら必要な社会になってくるだろし、
JHがメーカーに対し、新車への標準搭載を要請しているらしいので、
結局、そう遠からず、要らなくても憑いてくるようになるだろう。
だったら、ココで提案したような機能が追加されてた方が、まだ実があるのではないだろうか?

コイシを流用すれば、いちいちカードを挿すタイプのETC車載器は要らんワナ。
IPv6アドレスを、ETCゲートで取得して、基幹サーバで、対象に課金すればイイだけだし、
(ココは陸運局のナンバー登録管理システムとも連携すべきだろう)
クレジットカードも要らんワナ、銀行のDebitシステムとJH基幹が連動すればコト足りる。

そう考えてみると、現行のETCなんて、ホントバカな構成のシステム組んだモノだな、JHも・・・

しかしまぁ、聴かれてもいないのに、こんな提案してやるなんて、我ながらマヌケだワ、一銭にもならんのに・・・

って、ココに挙げた例は、チョイと考えて思いついた分だけだ、引き出し開ければ案など幾らでもある。
もっとも、こんなログ、車両メーカーや関係省庁の連中が見てるとは とても思えんがねw
ま、ちったぁアタマ使って安全なクルマと交通システムを創るよう、健闘されたし。

やってもうた・・・


プロバイダ切り替えを半ば諦め、解約を保留していたGyaOに戻したまではよかったが、
うっかり、フレッツ光のCTUの設定をそのままにしてしまい、ファイアウォール周りが、
Interlink向けのままで、鯖が外部から繋がらない状態に(゚Д゚;)

宅内からでは、ケータイ使ってテストするくらいしか、
鯖内Webベースでの外部接続テストができない状態なので、すっかり忘れてた(´ヘ`;)

訂正を施し、今、ようやく接続を確認できて ひと安心w
もう、
   おきつねさまのひまつぶし http://www.okitsunesama.com    
で、問題なく繋がる・・・

・・・で、何故にプロバイダを戻したのか? 別段Interlinkの品質に不満は無かった。
が、料金を比較する上で、肝心なコトをすっかり忘れていた。

まず、このイナカでの USEN GyaO光 の場合、with Flets なので、
NTTのをすべて込みでの金額が、
サービス単価数量購入金額ご利用期間
ホームタイプ ISP月額基本料 1,16211,1621月 1日~ 1月31日 
光屋内配線使用料 2001月 1日~ 1月31日 
フレッツ・光プレミアム F利用料 3,0001月 1日~ 1月31日 
消費税218
合  計4,580
となっている。
要は、比較の考え方自体が間違っていたワケだ・・・

ここいらヘン、関東に居た時は、GyaOのマンションタイプで、
USEN側とは直接接続だったので、回線も同社(実際はダークファイバのUSEN借り上げ)だったし、
コチラでも、同社をプロバイダとして選択し、with Flets というカタチでの利用だったので、
料金においても、NTT回線介在でのネットワーク利用と云う感覚は無くなっていた・・・

とは云え過去には、インターネットって NTTの回線+プロバイダの接続サービス ってのしか
選択肢ナイ時代があったんだよね~ あまりに昔のことなので、ホンキで忘却してた・・・ ^_^;

ツマるトコ、Interlinkの場合、あの料金に、NTTの回線分が別途上乗せされるワケで、
切り替えるほどの低価格にはなり得ない・・・むしろ、NTT側の割引がない分、割高になる・・・
で、已む無く、お試し期間中だったInterlinkを断ったと・・・

ただ、USEN GyaOも、NTTの割引期間が切れるまでに、
この地域では光接続最安値の BBIQ へ切り替えるコトも検討している。

アソコも最近は、"鯖キンシ"なんつ~ボケたコト云わなくなったらしいし、
PPPoEギライの当方だが、結局NTTも同じ処理だし、だったらBBIQ選択しないテはナイよな・・・

関東圏でUSEN選択したのは、むしろ価格よりも、光LANをそのまま敷設し、
キホンでIPを8個割り振られるってコトに魅力を感じたコトが要因として大きかった。
(その割には安かったのだが^_^;)
で 以前、USENに問い合わせたみたのだが、どうやらもう、イナカでは自社回線の増設はヤル気ナイらしい・・・
光接続を全国の家庭に ってフレ込みで立ち上がった事業だったような気がしたのだが・・・
志が微妙になってしまっている現状、USENもオワタか?

2009/03/11

VBScriptで鯖管理 そにょ1 オマケ・・・


DateFolderCreateもアーカイブを用意したので ドゾ♪

   DateFolderCreate.zip    
▲ を、右クリックしてファイルとして保存してください。


しっかし、エンコードファイル.vbeを、直接やり取りできないコトをすっかり忘却ってたよ^_^;
<そのまま使えるVBScript 日付 フォルダ 作成 自動化 複数 ルートフォルダ 指定可能>

2009/03/10

VBScriptで、日付付きFileBackup・・・


FileBackupper.vbs と .vbe を、暫定で今使ってるままをうpしました。
ファイル/フォルダ右クリックのコンテキストメニューに、
[バックアップ作成]を追加する機能はまだ付いていない版です。

デキルコトは、対象ファイル/フォルダの名称を、
"[元FileName] yyyymmdd hhnnss.[拡張子]" に 変え、コピーを取るだけ。

実働のブツなので使えますが、未使用関数が載ったままになってたりと、
効率が悪い部分が残っています。

改訂版も後日うpするので、コノ分は、あくまで、参考までに・・・

   FileBackupper.zip    
▲ を、右クリックしてファイルとして保存してください。

使い方は至って簡単、ファイルやフォルダをドラッグするだけ。
ショートカットでの利用も可。

    '***** ↓↓↓ScriptTitle↓↓↓ *********************************************************     
'File/Folder Backuper
'- Created by LazwardFox -

'TargetFile Autobackup
'ドラッグ(パラメータ指定)されたファイルを、
'名称に年月日時分秒を付けて同じフォルダ内にコピーをとる

'Update 20090209 2035
'Release 20060712 1736 フォルダのコピーにも対応させ、正式発行
'DevStart 20060413 1026

'***** ↓↓↓ ObjectDecralations ↓↓↓ *************************************************

Set Parameters = WScript.Arguments 'パラメーター取得
If Parameters.Count <= 0 Then
Wscript.Quit
End If

Set WSHShell = WScript.CreateObject("WScript.Shell")
Set Fs = WScript.CreateObject("Scripting.FileSystemObject") 'ファイル制御

'***** ↓↓↓ Decralations ↓↓↓ *************************************************

Public Target, Source, ThisScript
Public Extention, NameOnly, ProcessFolder
Dim SourceFolder, SourceFiles, SourceFile, RNameOnly
Public Result

Dim BackupFile, strFiles, strResult, SettedPF

'***** ↓↓↓MainRoutine↓↓↓ *********************************************************
ThisScriptFull = Wscript.ScriptFullName
ThisScript = Fs.GetBaseName(ThisScriptFull)

For Each SourceFile in Parameters
BackupFile = BackupName(SourceFile )
If Extention = "" Then
Fs.CopyFolder SourceFile, BackupFile
Control = "FolderCopy"
Else
Fs.CopyFile SourceFile, BackupFile
Control = "FileCopy"
End If
'ResultMake '▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
If strResult = "" then
strResult = vbCrlf & "● " & ProcessFolder & "  " & vbCrlf
SettedPF = ProcessFolder
Else
If SettedPF = ProcessFolder Then
Else
SettedPF = ProcessFolder
strResult = strResult & vbCrlf & vbCrlf & "● " & ProcessFolder & "  " & vbCrlf
End If
End If
strResult = strResult & vbCrlf & "  " & NameOnly & "  " & vbCrlf & vbTab & " ▼  " & vbCrlf & "  " & vbTab & RNameOnly & "  " & vbCrlf
'▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
Next
Msgbox strResult,,ThisScript & " " & Control
Set Fs = Nothing
Set WSHShell = Nothing

Wscript.Quit

'***** ↓↓↓Functions↓↓↓ *********************************************************
'------------------------------------
'BackupName - バックアップ後の名称を構築
'- Created by LazwardFox -

'フルパスを返す
'結果表示用変数に値を代入
'NameOnly - ファイル名
'RNameOnly - 変換後ファイル名
'ファイル/フォルダの識別
'Extention - 値が空白で返されたら 対象はフォルダ

'注)完全な独立関数にはなっていない。

'Release 20060712 1743

Public Function BackupName(SourceName )
Dim FoldersFiles, FoldersCount, FileNamesEx, BlockCount, BackupString
FileNamesEx = Split(SourceName,".")
BlockCount = UBound(FileNamesEx)
If BlockCount > 0 Then 'File
Extention = "." & FileNamesEx(BlockCount)
Else 'Folder
Extention = ""
End If
BackupString = " " & iDT(""," ","",0) & Extention

FoldersFiles = Split(SourceName,"\")
FoldersCount = UBound(FoldersFiles)
If Extention = "" Then 'Folder
NameOnly = SourceName
ProcessFolder = SourceName
RNameOnly = SourceName & BackupString
BackupName = RNameOnly
Else 'File
NameOnly = FoldersFiles(FoldersCount)
ProcessFolder = Replace(SourceName, NameOnly, "")
BackupName = Replace(SourceName, Extention, BackupString)
RNameOnly = Replace(BackupName, ProcessFolder, "")
End If
End Function

Public Function FolderSelector()
OnFolder = UpdatesCopy()
For Each SourceFile In SourceFolder.SubFolders
Set SourceFolder = SourceFile
OnFolder = UpdatesCopy()
'▼ Tester ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
msgbox "2 - サブフォルダ数 - " & OnFolder,,ThisScript
'▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
If OnFolder = 0 Then
Else
Set LSourceFolder = SourceFolder
For Each tSourceFolder In LSourceFolder.SubFolders
Set SourceFolder = tSourceFolder
FolderSelector()
Set tSourceFolder = SourceFolder
Next
Set SourceFolder = LSourceFolder
End If
Next
End Function

'------------------------------------
'UpdatesCopy
'- Created by LazwardFox -

Public Function UpdatesCopy()
'▼ Tester ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
If SourceFolder.Files.Count = 0 Then
If SourceFolder.Name="" Then
FolderName = "Root"
Else
FolderName = SourceFolder.Name
End If
msgbox "3 - " & FolderName & vbCrLf & "対象フォルダにファイルが無い",,"UpdatesCopy"
Else
tResult = SourceFolder.name & " - " & SourceFolder.Files.Count & vbCrLf
End If
'▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

For Each SourceFile In SourceFolder.Files
tResult = tResult & SourceFile.Path & vbcrlf
Next

'▼ Tester ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
tResult = Replace(tResult & "_", vbcrlf & "_","")
If Not tResult = "_" Then
msgbox "4 - ファイル一覧" & vbCrLf & tResult,,ThisScript
End If
'▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

UpdatesCopy = SourceFolder.SubFolders.Count
End Function

'------------------------------------
'iDT - 日時文字列 ないし 日/時配列取得 for VBScript
'- Created by LazwardFox -


' Update 20090228 0458 変数宣言変更
' Update 20090223 0959 時刻桁処理変更
' Update 20090223 0253 Len記述忘れ修正
' Update 20090223 0135 変数宣言忘れ修正
' Update 20090210 0218
' Update 20090210 0115
' Release 20090209 2035

' iDT (
' dSplitter - DateSplitString (Normal - "/")
' ,dtSeparater - Date/Time SepaleteString (Normal - " ")
' ,tSplitter - TimeSplitString (Normal - ":")
' ,Control - 配列化 0 or 1 (Default - 1)
' )

Public Function iDT(dSplitter,dtSeparater,tSplitter,Control)
Dim nX, nD, nS, strHMS, sResult 'Update 20090228 0458
nX = Now()
nD = FormatDateTime(Date(),0)
nS = ":" & Split(CStr(FormatDateTime(nX,3)),":")(2) 'Update 20090223 0951
strHMS = FormatDateTime(nX,4) & nS 'Update 20090223 0951
If tSplitter = ":" Then
Else
strHMS = Replace(strHMS,":",tSplitter)
End If
sResult = Cstr(Replace(nD,"/",dSplitter)) & "*" & strHMS
If Control = 1 Then
iDT = Split(sResult,"*")
Else
iDT = Replace(sResult,"*",dtSeparater)
End If
End Function


しかし、リリース2006年かぁ・・・(遠い目) ファイル文字列処理に初々しさがあるよねw

ちなみに、もっと程度の低い版なら、2004年にはあったw
更に前だとWinBatch版、もっと前はBatファイルだったなぁ・・・(更に遠い目)

もう、過去のHDDクラッシュで、ソース紛失してるケド^_^;
<そのまま使えるVBscript 日付 添付 バックアップ ファイル フォルダ>

WindowsScriptEncoderを便利に・・・


    このログは、コチラのログ も併読してください。     

----------------- [ Update 20090317 2113 ]
このログのスクリプトのアーカイブはコチラの版に差し替えました。


通常のWindowsアプリケーションの挙動なら、その本体やショートカットを作成し、
対象ファイルをドロップすれば、ソースファイルのあるフォルダに結果を返してくれそうなものだが、
WindowsScriptEncoderは、そのままでは、長いファイル名に対応できてない上、書式がカナリ厄介。

書式)
   "[インストール先]\screnc.exe" "対象ファイル.vbs" "エンコード後のファイル.vbe"    


   screnc.exe - エンコーダ本体    
レジストリにも所在が登録されてない上、
Pathも通ってないので、起動の際は要フルパス記述。
ショートカット作成時には、作業フォルダにパスを指定しておいたほうが無難だ。

[インストール先フォルダ]
既定は "C:\Program Files\Windows Script Encoder\" だと思う、多分・・・
少なくともウチの機器ではココだった。

{"対象ファイル.vbs"}
対象ソースとなるVBScriptファイルをフルパスで指定

{"エンコード後のファイル.vbe"}
任意のファイル名に拡張子.vbeを付けてフルパス指定


まず、エンコード後の名称を、フルパスで拡張子までキッチリ指定しないと正しく動作しないってのがヘン。
また、コンソールアプリなので、スペースを含んでいたり、長いファイル名は、
[ " ]ダブルクォーテーションで囲む必要がある。

このような仕様では、どうやったって、単純にショートカットを配し、ドロップして利用・・・ とはイかないワケだワ(´ヘ`;)
最終的に、内容がエンコードされて、拡張子が変わるだけでいいのに、何故こんな指定方法なのか・・・
(安易な不正アクセスを防ぐイミでは、有効かもしれないケド・・・)
結果のファイル名.vbeを、ソース.vbsと異なるようにしたい向きを除き、とてもユーザーフレンドリーとは云いがたい・・・

今回も使い方は、以下スクリプトをコピってテキストエディタに貼り、
VBSEncodeConnection.vbs として保存後、実行スクリプト保存フォルダを任意に作成し、ソコへ放り込んで、
ショートカットをデスクトップ他、使いやすい場所に配してください。

あとは、作成した.vbsファイルをまとめてドラッグするだけで利用できます。

エンコーダのインストール先は、スクリプト中の
   Const Enc = "C:\Program Files\Windows Script Encoder\screnc.exe"    
を書き換えれば、任意に変更可能です。

今回は、組み込み関数は一切ないデスw つか、要らないと云うほうが正しいカナ。

    '***** ↓↓↓ScriptTitle↓↓↓ *********************************************************     
'VBSEncodeConnection
'- Created by LazwardFox -

'パラメータ指定、ないし、vbsファイルドロップで、
'同一フォルダ上にエンコード済みファイル(.vbe)を作成する。
'このスクリプトのショートカットに対してドロップしても有効。
'テキストエディタなどのマクロに登録しての利用も可

'単独起動 - 無効

'Update 20090309 1901 発行向けに調整
'Update 20090210 0109
'Release 20050112 1213
'DevStart 20050111 2117

'***** ↓↓↓ ObjectDecralations ↓↓↓ *************************************************
Dim Args, Wsh, Fs

Set Args = WScript.Arguments 'パラメーター取得
If Args.Count <= 0 Then
Wscript.Quit
End If
Set Wsh = WScript.CreateObject("WScript.Shell")
Set Fs = WScript.CreateObject("Scripting.FileSystemObject") 'ファイル操作

'***** ↓↓↓Decralations↓↓↓ *********************************************************
Dim vbSp, vbTc, vbCt, vbWt, vbTs, vbCs
Dim tFile, Tf, Ef, Info, pTarget

Const vbWq = """"
Const Enc = "C:\Program Files\Windows Script Encoder\screnc.exe"

vbSp = " "
vbTc = vbTab & vbCrlf
vbCt = vbCrlf & vbTab
vbWt = vbWq & vbTab
vbTs = String(2,vbTab)
vbCs = String(2,vbCrLf)

'***** ↓↓↓MainRoutine↓↓↓ *********************************************************
For iC = 0 To Args.count - 1
tFile = Args(iC)
If Fs.FileExists(tFile) then
Ext = Fs.GetExtensionName(tFile)
If Lcase(Ext) = "vbs" Then
Tf = vbWq & tFile & vbWq
Ef = Replace(Tf,"." & Ext,".vbe")
Info = "Before" & vbCrlf & vbSp & Tf & vbSp & vbCrlf & vbCrlf & _
"After" & vbCrlf & vbSp & Ef & vbSp & vbCrlf
If Msgbox(Info, vbYesNo, "VBS Encode") = vbYes then
pTarget = vbWq & Enc & vbWq & " " & Tf & " " & Ef
Wsh.Run pTarget, 0
End If
End If
End If
Next
Set Args = Nothing
Set Fs = Nothing
Set Wsh = Nothing

Wscript.Quit



ま、ソコはソレ、不便なら、問題を解消する策を講じられる位でないと、
MS製品なんて使ってられんと云うコトで・・・w


とは云え、今回は手順も面倒なので、ソースとエンコード済みのファイルをDL出来るようにしてみました、
   VBSEncodeConnection.zip    
▲ を、右クリックしてファイルとして保存してください。

----------------- [ Update 20090317 2113 ]
このアーカイブはコチラの版に差し替えました。


今までのモノも、似た対応できたんだけど、面倒だったのでw
あと、セキュリティ的に、テキストのほうが安心できる人も多いかと思ったし・・・ (^_^;

ちなみに、エンコード後のファイルはバイナリ形式な上、既にヒトが読めるカタチになってません、
修正や改変は出来ないので、ソースは大事に保管してください。

また、エンコード後のファイル.vbeは、Web環境で利用する場合、
対応している対象がIEだけらしいとのレポートを読んだ記憶があります。(未確認、誤報なら嬉しいが・・・)
あくまで、ローカルでの運用に留めた方が無難かと思われます。


-----------
次回は、FileBackUpper.vbe辺りをソース込みで うp予定。
対象ファイルの名称を "[元FileName] yyyymmdd hhnnss.[拡張子]" に 変え、コピーを取るだけのモノ。
長いこと利用しているブツで、HTML/JavaScript/VBScript etc.. 版管理に威力を発揮している。
初期起動で、ファイル/フォルダ右クリックのコンテキストメニューに、
[バックアップ作成]を追加するようレジストリ設定を行える機能の追加版を用意する予定。
乞うご期待。
<そのまま使えるVBscript WindowsScriptEncoder 容易 使い方>

2009/03/09

ググるさん1ページ目に・・・


・・・検索ワード "おきつねさま" だけで載るようになった^_^; (70件圏内)

気まぐれで、以前シゴトで使ってたVBScriptとかの持ちネタを放出しだしたからか?w
そお云う引き出しなら まだまだあるのだがw♪

VBScriptで日付処理 それから・・・


C++で作成してる別アプリが完了次第、
VBScriptでの日付処理最終版にとりかかる予定。

ただ思うに、C++で .NetFrameworkを利用して、
日付関連の文字列返すActiveXオブジェクトを組んだほうが効率良い様な気も・・・

シェアウェアなら似たようなのあるみたいだけど、
   VisualBasic関数のラッパーDLL VBWRAP ver1.00    
日付だけでイイって向きには、コスト掛けてまでってのはチョットね・・・

Excelワークシート関数に・・・


DateSerialがナイことに、さっき気がついた・・・

ナニをイマサラと云われそうだが、ソレもソノ筈、
    '----------------------------------------         
'Worksheet向けDateSerial
'- Created by LazwardFox -

'update 200903090716 微修正
'Release200511291534

Public Function iDateSerial(Optional ByVal iYear As Variant = "", _
Optional ByVal iMonth As Variant = "", _
Optional ByVal iDay As Variant = "", _
Optional ByVal iFormat As Variant = "") As Variant
On Error Resume Next
Application.Volatile
Dim Result
Result = DateSerial(iYear, iMonth, iDay)
If IsError(Result) Then '※
Result = Now() '※
End If '※
If iFormat = "" Then
Else
Result = Format(Result, iFormat)
End If
iDateSerial = Result
End Function
こんなのツクってアドインとして組み込んで使っていたので、そのコトを忘れていた(;゚д゚)ァ....


Worksheet上で
   =iDateSerial(2009,3,0,"yyyy/mm/dd")    
こう使う。

当然、引数はセル参照を指定できるので、当時は それなりに使えたよ。

ちなみに、今日追加したのは、文字列返しの部分と、不正入力対応・・・
デモ、ホントに使うのなら、不正値での動作は、エラーを返すほうがイイのかも知れない・・・
そうしたい場合は、※印の行を消して使ってくださいなっと♪


P.S. コッチのほうが無難かも・・・
    '----------------------------------------         
'Worksheet向けDateSerial
'- Created by LazwardFox -

'update 200903090824 再微修正
'Release200511291534

Public Function iDateSerial(Optional ByVal iYear As Variant = "", _
Optional ByVal iMonth As Variant = "", _
Optional ByVal iDay As Variant = "", _
Optional ByVal iFormat As Variant = "") As Variant
On Error Resume Next
Application.Volatile
Dim Result
If iYear="" And iMonth="" And iDay="" Then
Result = Date()
Else
Result = DateSerial(iYear, iMonth, iDay)
End If
If iFormat = "" Then
Else
Result = Format(Result, iFormat)
End If
iDateSerial = Result
End Function

VBScriptで月末日取得 最強処理・・・


つか、VBSで無くとも応用できます、閏とか一切気にしなくてイイです。

今日の月の月末日は ってのは
   n = Now()
ny = Year(n)
nm = Month(n)

ML = DateValue(ny,nm+1,0)
コレだけ(爆)

優良サイトではないので変数宣言省いてマスΨ(`∀´)Ψ

単に日付が欲しいだけで、イチイチ閏なんて計算してらんないって、バカらしくてw
ただ、税額処理だの、給与計算だのってぇのでは、意外に使える(実際使ってた)

+1 0 ってトコがツボ。大体殆どの開発環境で使えるし、
Excelワークシート関数なら
   =DATEVALUE(YEAR(NOW())&"/"&MONTH(NOW())+1&"/1")-1    
こうなる。

Excel/AccessなどのVBAでも有効な手段。
   Dim nYear As Integer ,nMonth As Integer

nYear = 2009
nMonth = 2

'日付値が欲しい場合
LastDay = DateSerial(nYear, nMonth + 1, 0)

'日のみ欲しい場合
LastDay = Day(DateSerial(nYear, nMonth + 1, 0))


Excelに対し、DateControls.xlaと云うExcelAddinファイルをツクって、
モジュールにFunctionsと銘打って、その中に記述していた関数、
Public宣言とApplication.Volatile記述で、ワークシート関数として使っていたブツ。
    '----------------------------------------         
'LastDayGet - Serial値から日付を取得し同月の末日を返す。
'- Created by LazwardFox -

'閏月対応

'update 200607031715 エラートラップ修正
'Release200511291534

Public Function LastDay(Optional ByVal Target As Variant = "") As Integer
On Error Resume Next
Application.Volatile
If Target = "" Or Target = 0 Or IsError(Target) Then
Target = Now()
End If
LastDay = Day(DateSerial(Year(Target), Month(Target) + 1, 0))
End Function


しかし、最近はExcelも使わなくなったなぁ・・・

って、職があった頃から、Excelには見切りつけて、
数百MB規模のデカいデータは、VBSで適宜処理して、AccessやSQL鯖にブチ込んで処理してたケドねww

つか、プーしてる今となっては、無用の長物だけどねww
<月末 日付取得 うるう Excel Access VBA>

云うたトコロで所詮・・・


元々Excel&AccessVBA使いが、以前、仕事の都合でVBScriptに手を出したので、移植モノも多いのデス。

なので、時折間違って、
    Public Function      
って、無意味に宣言記述してしまうコトも、いまだにあったり・・・^_^;

まぁ、日付に関しては、Script系では、VBAの使い良さに勝てないデスね・・・
・・・VBA:VisualBasic for Applicationの略
MSOffice製品のマクロ機能を司ってるのがコイシ。・・・って既知だろな、どうせ;

当然本家VisualBasicも、同様に処理できるので、
以前紹介したような、複雑なスクリプトなど無用の長物そのものなのデス。
だったらナンで書いたのか・・・ ソコに山があったのデス! (VBSで)ドコまでやれば、
そのヘン近づけられるかってのに興味があっただけなのデスww

VBScript実行が抑制される?・・・


VBScriptの.vbsファイルは、一部のセキュアアプリで実行が許可されないか、
実行確認画面をクリックする必要に迫られることがある。
(KingS●ft製のでヤラれたコトがある、数年前に・・・)
タスクで自動動作させたい向きには非常に厄介だ。

それらを避けたい場合は、.vbsファイルをエンコードして利用するコトで、
セキュアを維持しつつの自動化への解決となることが多い。

エンコード後の拡張子は .vbe

肝心のエンコーダは、 WindowsScriptEncoderと云うのが、
Microsoftサイトで配布(要認証)されているので、利用されたし。

ソースを読まれたくない場合などにも良いかと・・・w

VBScriptで鯖管理 そにょ1・・・


Update 20090311 0300
   ココのScriptも、以後のログにアーカイブ用意しました。    

Windowsのタスクに登録して、日毎フォルダを作成するだけのスクリプト。
当然設定は 1日1度 00:00 に 動作させる。

なんでそんなモノ要るのかって?
毎日定点で写真を撮ってるので、保存毎にフォルダ作るのが面倒になったからwww
ちなみに、ココで公開したスクリプトは、元々コレ向けだったものが多いですww

今回の分は、以前の仕事で、

"起動後、特定条件の日だけにデータ取得を動作させるよう、処理を自動化してくれ"

と依頼されて創ったモノをバラし、その断片に、新たな構想を加えて作成したモノです。
(確か、六曜で云う、大安 の日だけって指定だったと思う 当然Windowsのタスクにそんな器用な設定はない。)

iniファイル配置で、複数フォルダを対象に出来るのが、ちょっとだけ凝った点w
つか、コレに関しては、用途的に必須だったってのが事実^_^;

と云うのも、タスクにvbsやvbeを登録する場合、
ソレ自体はスクリプトであって、実行する本体ではないので、パラメータの指定が出来ないと云う罠が・・・
もっとも、ランタイム自体から記述してしまえばイイのだろうが、面倒だ。
どうせなら単純登録だけで使いたい・・・ と云う なんとも手抜きな欲がココまでさせたとも云える・・・
それに、複数のフォルダに同処理を施したかったってものあったので、iniファイルを読み込むカタチにしたと(´ヘ`;)

デキルコトはってぇと、指定フォルダ配下に、
   [指定したフォルダ]
└ yyyy
└ mm
└ dd
と云うカタチでフォルダを追加するだけw
指定したターゲットフォルダは、既存していることが必須で、ない場合、処理は実行されません。
自動でターゲットフォルダを作成する処理も検討しましたが、セキュリティ的に疑問を感じた為ヤメました。

書式)
    DateFolderCreate.vbe {対象フォルダ名{,対象フォルダ名}    


パラメータ無指定の場合
   [スクリプトを起動したフォルダ]
└ 2009
└ 03
└ 09
と、なり、

コマンドラインやショートカットからの、パラメータ指定起動の場合、
   [指定したフォルダ]
└ 2009
└ 03
└ 09
と なります。

また、スクリプトが配されているフォルダに、スクリプトと同名のiniファイルがあり、
   C:\Target,C:\Target\Target   
ないし、
   C:\Target
C:\Target\Target
と記述があれば、

   C:\Target
├ 2009
│ └ 03
│ └ 09
└ Target
└ 2009
└ 03
└ 09
と、云う結果になります。

指定先に、対象が既存の場合は、スキップするようになっているので、殆ど意識無く使えます。


毎度のコトながら、役割ごとに関数化してあるので、流用もしやすいかと・・・

▼ウチの鯖たん上で、実働してるスクリプトそのもの・・・^_^;
    '***** ↓↓↓ScriptTitle↓↓↓ *********************************************************     
'PhotoFolderCreate
'- Created by LazwardFox -
'単独起動で、起動フォルダに日付でフォルダを作成。
'パラメータ指定で複数フォルダ上に同一処理を実行。

'注) 20090223 0300 タスクマネージャ動作時、直接指定の場合、パラメータ指定不可

' Update 20090223 1442 必要関数のみに削減
' Update 20090223 1438 関数拡張
' Update 20090223 0253 iniファイルによるフォルダ指定を可能に、スクリプトファイル名を変更して利用。
' Update 20090223 0253 iDT修正
' Update 20090223 0135 iDT修正
' Update 20090222 2141
' Release 20090222 2108
' DevStart 20090222 2014

'***** ↓↓↓ ObjectDecralations ↓↓↓ *************************************************
Set Parameters = WScript.Arguments 'パラメーター取得
Set Fs = WScript.CreateObject("Scripting.FileSystemObject") 'ファイル制御

'***** ↓↓↓ Decralations ↓↓↓ *************************************************
Dim arTargets, iRoot, tFolder, sCD, arCD, iChk, sCN

'***** ↓↓↓MainRoutine↓↓↓ *********************************************************
If Parameters.Count > 0 Then
arTargets = Split(Parameters(0),",")
Else
arTargets = TargetFolders()
End IF
arCD = Split(iDT("\"," ",":",1)(0),"\")
For Each iRoot In arTargets
If Fs.FolderExists(iRoot) Then
tFolder = iRoot
For Each iChk In arCD
sCN = Fs.BuildPath(tFolder,iChk)
If Fs.FolderExists(sCN) Then
Else
Fs.CreateFolder sCN
End If
tFolder = sCN
Next
Else
End If
Next
Set Fs = Nothing
Set WSHShell = Nothing
Wscript.Quit

'***** ↓↓↓Functions↓↓↓ *********************************************************
'------------------------------------
'iDT - 日時文字列 ないし 日/時配列取得 for VBScript
'- Created by LazwardFox -

'Update 20090228 0458 変数宣言変更
'Update 20090223 0959 時刻桁処理変更
'Update 20090223 0253 Len記述忘れ修正
'Update 20090223 0135 変数宣言忘れ修正
'Update 20090210 0218
'Update 20090210 0115
'Release 20090209 2035

' iDT (
' dSplitter - DateSplitString (Normal - "/")
' ,dtSeparater - Date/Time SepaleteString (Normal - " ")
' ,tSplitter - TimeSplitString (Normal - ":")
' ,Control - 配列化 0 or 1 (Default - 1)
' )

Public Function iDT(dSplitter,dtSeparater,tSplitter,Control)
Dim nX, nD, nS, strHMS, sResult 'Update 20090228 0458
nX = Now()
nD = FormatDateTime(Date(),0)
nS = ":" & Split(CStr(FormatDateTime(nX,3)),":")(2) 'Update 20090223 0951
strHMS = FormatDateTime(nX,4) & nS 'Update 20090223 0951
If tSplitter = ":" Then
Else
strHMS = Replace(strHMS,":",tSplitter)
End If
sResult = Cstr(Replace(nD,"/",dSplitter)) & "*" & strHMS
If Control = 1 Then
iDT = Split(sResult,"*")
Else
iDT = Replace(sResult,"*",dtSeparater)
End If
End Function

'------------------------------------
'TargetFolders
'- Created by LazwardFox -
'スクリプトと同名のiniファイルがあれば、内容を配列で取得
'対象フォルダを取得、iniファイルがあれば優先する。戻り値は配列

' Update 20090223 0550 変則的フォルダ名回避のため修正
' Release 20090223 0509

Public Function TargetFolders()
Dim sNFull, rFolder, sN, iniFile
sNFull = Wscript.ScriptFullName
rFolder = Fs.GetParentFolderName(sNFull)
sN = Fs.GetBaseName(sNFull)
iniFile = Fs.BuildPath(rFolder,sN & ".ini")
If Fs.FileExists(iniFile) Then
TargetFolders = iniLoader(iniFile,0)
Else
TargetFolders = Array(rFolder)
End If
End Function

'------------------------------------
'iniLoader - 対象をiniファイルより取得。
'- Created by LazwardFox -

' Update 20090223 0550 戻り値可変 [ 0 - 配列 ] [ 1 - カンマ区切り文字列 ]
' Release 20090223 0509

Public Function iniLoader(iniFile, Control)
Dim nS
nS = Fs.GetFile(iniFile).size
If nS = 0 Then
iniLoader = Array(Fs.GetParentFolderName(iniFile))
Else
Dim iFile, lResult, strResults
Set iFile = Fs.OpenTextFile(iniFile,1) 'iniファイルを読み取りモードで開く
WScript.Sleep 150
Do Until iFile.AtEndOfStream '読み込み
lResult = lResult & ";" & iFile.ReadLine & ";"
Loop
WScript.Sleep 150
iFile.Close 'Iniファイルを閉じる
strResults = Replace(Replace(lResult,";;",","),";","")
If Control = 0 Then
iniLoader = Split(strResults, ",")
Else
iniLoader = strResults
End If
End If
End Function


って、以前のログから読んでるヒトには、使用関数周り、ドコかで見覚え感ありありでしょうが、
まぁ、御愛嬌と云うコトでww

・・・つか、こんなのに用がある閲覧者が居るのかってコトのほうが、いささか疑問だが(´ヘ`;)
<そのまま使えるVBScript 日付 フォルダ 作成 自動化 複数 ルートフォルダ 指定可能>

もう・・・


いい加減、StyleSheetの宣言が鬱陶しくなってキタので、外部ファイル化した。

・・・って、単に今までのを集約して、テキストに貼っつけて、cssファイル作っただけなんだけどねw
ただ、自鯖上の各テストサイトの分、管理グダグダになってたのでスッキリした。

2009/03/08

エラい目みた・・・


WMI呼び出しだけで済まそうと手を付けたC#が、1日程度で挙動を把握できたコトにチョーシづき・・・って、
得られた値は、レジストリにあるクロックアップ前のモノで、全く使い物にならなかったのだが・・・(;_;
・・・で、面倒を省みず、RDTSC命令を使うが為に、C++の敷居を跨いでしまったってのはマズかった・・・
なんか、ほぼ睡眠も取らずに獲り憑かれたように・・・ま、3日ほどで こいつも大体把握できたのでイイんだけどねw

しかしアレだね、C#やC++が使えると、デキるコトが格段に広がるのはイイんだケド、
後者なんてもうアレは、完全に人間向けでないでしょ、あの記述は・・・ ^_^;
しかも、同じ処理させるだけで、アレだけ多様な対象の列挙の仕方があるのか と、
ホンキで考え込んでしまったよ・・・

しかし、使ってみて更にMSのWindowsに対する手抜き具合を知った感があるね。
プロセッサのRDTSC命令の扱い1つ取っても そう思えるよ・・・

・・・てっきり、Winは、休止モードから回復した時に、全てのレジスタに元の値がセットされてしまって、
検出方法がないから、休止復帰のRUNレジストリキーがナイのかと思ってたら、サにアらず、
しっかり初期化されてましたよ・・・ Visたんトカもコノへん未拡張のままなのかな?
マシン重いと、休止モードに頼りたくなるよね~ww

つか、プロセッサ多コア時代に、クロックの取得がハードレベルでデフォサポートされてないってのはドウなの?
石メーカーも、もう少し考えてツクれよってハナシにならないか?
実際、OSサイドからパワーマネージしようと思ったら、クロックの正確な値を得るのに、
レジスタ上のticksが頼りって ちょっとね・・・ しかもコア毎に可変でしょ、イマドキの石って・・・

ナニが不満ってGeodeNX1750@14Wは、某著名CrystalCPUIDナシでは、フルクロックにならんのよコレが!
ソレを補う監視ツールを創りたかっただけなんだよね~ C#だのC++だのに手を出した理由って・・・

しかも環境が VSExpressEditionなモンだから、肝心の欲しい機能を含むALTが憑いてなくて使えんし・・・
ま 結局、無くても全然困らなかったけどねww

しかし、1000msec取得するだけのインターバルタイマまで自分で書かないとならないとは・・・
VBScriptより辛いかしらん(´ヘ`;)

Windows.Forms.Timerに逃げる(クロック表示フォームあるし)というのも手段なのだが、
フォーム(を完全に)非表示とか、フォーム無しVer.とかでも動作させたい場合にチト困る・・・
マシンがショボいと、イラんトコに神経使うのよコレが・・・
動画再生もイッパイ×2なのは仕方ナイとして、Adobe製品やMSOffice製品ですらカナりキツい・・・
ソレらを使うには、あの軽いCrystalCPUIDすら常駐させて置けないんだから、ドウにもナラん(-_-;)

まぁ、完成したらココとかに うpする(ソースのほう)と思うケド、機器依存激しいカモねwww
敢えて普及してるんだか してナイんだか判らん .NetFramework3.5を多用しようと目論んでいると云うΨ(`∀´)Ψ

・・・でも、基本的なモノしか描き込んでいない・・・そう、それは まるで、背景白い手抜き漫画のようなwww
・・・な、カンジだし、以外に大丈夫かな、カナ? ^_^;

2009/03/04

ソレに比べて・・・


コッチの商品▼って、照明としてもヨさげだけど、

超高輝度ELシート - 株式会社 海光社

原稿や写真フィルム確認向けのライトテーブルの代わりに向いてるような希ガス
・・・価格と寿命が折り合うかが疑問ではあるが^_^;

諸元情報中に

 ※発光色ホワイトは太陽光に当る場所に設置した場合、
  紫外線の影響で赤色顔料が退色して少しづつ青味を帯びてゆきます。

とあるが、コレでは一般利用するにはムリがあるなぁ と思いつつ見てたら、
 
 防湿ラミネートによる長寿命化
 空気中の水分をの侵入を防ぐために積層フィルムでラミネートしています。

ともある、だったら、

●曲げられる必要があるなら
 紫外線遮光フィルムを表層に貼る、ないし、同特性のあるラミネート材料を使う

●板状で使うなら
 紫外線遮光透明塗料をコーティングする、ないし、紫外線遮光プラスチック板を表層に充てがう

と云った構造にするだけでも、劣化防止に効果が上がりそうなものだが、検討しなかったのだろうか?
最近の紫外線カット系商品の可視光透過率の高さは、
過去のモノとは比較にならない程 性能が向上しているのだが・・・


   ----------  update 200903080203 
サイトから問い合わせてたら、先日レスきました。
で、今は、UV対策済み商品もラインナップしているとのコト。
ただ、ライトテーブル代わりにするには、もう少し精進が要りそうな御様子^_^;
今後に期待!

国内大手企業って・・・


いちいち イマサラ感 炸裂させてくれるトコ多いよな~

「省電力」有機EL照明に進出 出光、13年めど 欧米で事業化検討 - FujiSankei Business i [ 20090303 ]

って、ホント今更、しかも検討とか云ってるし・・・ コレだからコッチ出のイナカ企業はよぅ・・・(´ヘ`;)

ついに手を付けてしまった・・・


VB6.0やVisualStudio.NET(2k2)に触れていた過去から逃れるかの如く、
つい先頃までは、出来るコトは殆どをVBScriptでカタづけてきたのだが、
JavaScriptに触れたあたりから、創りたいモノに欲が出てしまい、
とうとう、処理可能な範疇を超えてしまったらしい・・・

已む無く、インストールはしてあったVisualBasic2k8に手を出したが、
どうやら更に足りなくて、VC++やVC#にまで食指が伸びてしまった・・・
つか、マシンスペックがアレなもんで、デバッグするだけで停まりそうなのだよ(|| ゚Д゚)
マトモな機材が揃うまでは関わりたくなかった開発環境だったのだが・・・

しかし作りたいのは、スペックの低さマトモじゃない機器向けなんだけどね(´ヘ`;)

2009/02/28

VBScriptで日付処理 そにょ3・・・


日付の処理だけ、某Format関数を模してみた。・・・あくまで暫定版。
限られた指定方法で、要素を並べ替えられる程度しか機能しないが、
新たに曜日を要素として取得可能になっている。

書式)
   iDTw({tDate}, {tNow}, {sFormat}, {dSplitter}, {tSplitter}, {dtSeparator}, Control)    

{tDate} 日付情報(時間を含まない) Date()ないし等価
{tNow} 時間情報 Now()ないし等価
{sFormat} OutPutFormat (Default - "Y/M/D H:N:S")
{dSplitter} DateSplitString (Normal - "/")
{tSplitter} TimeSplitString (Normal - ":")
{dtSeparater} Date/Time SepaleteString (Default - " ")
Control 0 文字列 / 1 配列化 (Default - 0)


{sFormat}に対し、半角英大文字の、"YMD" で 日付部分を
"W"で曜日を "HN" で 時分を "S" で秒を、それぞれ任意の位置に配置できます。

★オマケ
   "S HNS YMD [W] HN"    
のようなデタラメな呼び出しも可能^_^;


曜日取得処理 GetWeekDay
装飾も含めて好きなように曜日文字列を取得したいが為だけに作成したモノ。
単なる曜日取得と異なり、逆引き検索や対応データへの変換など、
パラメータの適用次第で応用の幅を広げられるようになっている。
また、iDTw を使う場合、変数 strWeekday をPublicで宣言し、
この関数(の結果)を事前に代入しておくコトが必須となる。
なんだか、海外のライブラリ使ってるみたいで使いデ悪くて、お蔵入りさせてたブツではあるがw

書式)
   GetWeekday(YMD, wFormat, WeekdaysString, nDepth)

   YMD - 日付を指定 (Date関数と等価値)
   wFormat - 戻り値に対する装飾を指定 例) " [ W ] "
   WeekdaysString - 曜日のリストを入力 ・・・リストの構成はサンプル参照のことw
   nDepth - リスト中の次元の深さを指定 (0~)


lArray や inArrays は、これらの為に用意したモノとも云える・・・

    '***** ↓↓↓ScriptTitle↓↓↓ *********************************************************     
'GetWeekDay & iDTw & lArray & inArrays
'- Created by LazwardFox -

' スクリプトライブラリの一部

' Release 20090228 1639

'***** ↓↓↓ Decralations ↓↓↓ ******************************************************
Const strWeekdays = "1:月:MON:Mon:Monday,2:火:TUE:Tue:Tuesday,3:水:WED:Wed:Wednesday,4:木:THU:Thu:Thursday,5:金:FRI:Fri:Friday,6:土:SAT:Sat:Saturday,7:日:SUN:Sun:Sunday"
Const vbWq = """"
Public strWeekday

Dim varNow, VarDate, sDa, sDb, sDc, sDd, sDe, testResult


'***** ↓↓↓Main(Test)Routine↓↓↓ ***************************************************
varNow = Now()
varDate = Date()

'Function GetWeekday(YMD,wFormat,WeekdaysString,nDepth)
strWeekday = GetWeekday(varDate,,strWeekdays,3)

sDa = iDTw(varDate,varNow,"YMD [W] HN","/",":",,0) '文字列テスト
sDb = iDTw(varDate,varNow,"YMD",,,,0) '文字列テスト
sDc = iDTw(,,"YMD*[W]*HNS",,,"*",1) '配列テスト
sDd = iDTw(,,"YMDWHNS","",""," ",0) 'スプリッタ無しテスト
sDe = iDTw(,,"YMD [ W ] HNS","",""," ",0) 'スプリッタ無しテスト

testResult = "iDTw(" & "varDate,varNow," & vbWq & "YMD [W] HN" & vbWq & "," & vbWq & "/" & vbWq & "," & vbWq & ":" & vbWq & ",,0) - <String YMD[W]HN> - >>> " & sDa & vbTab & vbCrLf _
& "iDTw(" & "varDate,varNow," & vbWq & "YMD" & vbWq & ",,,,0) - <String YMD Only> - >>> " & sDb & vbTab & vbCrLf _
& "iDTw(" & ",," & vbWq & "YMD*[W]*HNS" & vbWq & ",,," & vbWq & "*" & vbWq & ",1) - <Array iDTw(1)> - >>> " & sDc(1) & vbTab & vbCrLf _
& "iDTw(" & ",," & vbWq & "YMDWHNS" & vbWq & "," & vbWq & vbWq & "," & vbWq & vbWq & "," & vbWq & " " & vbWq & ",0) - <String NoSplitter> - >>> " & sDd & vbTab & vbCrLf _
& "iDTw(" & ",," & vbWq & "YMD [ W ] HNS" & vbWq & "," & vbWq & vbWq & "," & vbWq & vbWq & "," & vbWq & " " & vbWq & ",0) - <String Full> - >>>" & sDe & vbTab

msgbox testResult,,"Test"

'***** ↓↓↓Functions↓↓↓ ***********************************************************
'------------------------------------
'GetWeekDay - 曜日文字列配列化及び取得
'- Created by LazwardFox -

' Update 20090228 1403 inArraysの新版向けに変更
' Update 20090228 0855 配列化関数をinArraysに差し替え
' Update 20090223 1544
' Release 20090223
' Develop 20090223 1018

' GetWeekday(
' YMD - 日付を指定 (Date関数と等価値)
' ,wFormat - 戻り値に対する装飾を指定 例) " [ W ] "
' ,WeekdaysString - 曜日のリストを入力
' ,nDepth - リスト中の次元の深さを指定 (0~)
' )

Function GetWeekday(YMD,wFormat,WeekdaysString,nDepth)
Dim arsWeekdays,arWeekdays
If TypeName(WeekdaysString) = "Error" Then
ElseIf VarType(arWeekdays) = vbArray Then
Else
inArrays WeekdaysString,",:",arWeekdays
End If
If TypeName(wFormat) = "Error" Then
GetWeekday = arWeekdays(Weekday(YMD,2) - 1)(nDepth)
Else
GetWeekday = Replace(wFormat,"W",arWeekdays(Weekday(YMD,2) - 1)(nDepth))
End If
End Function

'------------------------------------
'iDTw - 日時(曜日)文字列 ないし 日/曜日/時 配列取得 for VBScript
'- Created by LazwardFox -

' Update 20090228 1403 inArraysの新版向けに変更
' Release 20090223 1413 iDTから改良

' Control以外のパラメータを省略可

' iDTw (
' {tDate}日付情報(時間を含まない)Date()ないし等価
' ,{tNow}時間情報Now()ないし等価
' ,{sFormat}OutPutFormat(Default - "YMD HNS")
' ,{dSplitter}DateSplitString (Normal - "/")
' ,{tSplitter}TimeSplitString (Normal - ":")
' ,{dtSeparater}Date/Time SepaleteString (Default - " ")
' ,Control0 文字列 / 1 配列化 (Default - 0)
' )

'記述例) iDTw(,,,,,0)- 現在の年月日/時分秒を配列で取得
'iDTw(,,"YMD*W*HNS",,"*",0)- 現在の年月日/曜日/時分秒を配列で取得

'曜日を取得する場合、事前に 変数strWeekdayをPublicで宣言し、
'GetWeekDay を実行、代入しておく必要があります。

Function iDTw(tDate,tNow,sFormat,dSplitter,tSplitter,dtSeparator,Control)
Dim nS, strHNS, arHNS, iHNS, valHNS'Update 20090223 0135

If TypeName(tDate) = "Error" Then
tDate = Date()
End If
If TypeName(tNow) = "Error" Then
tNow = Now()
End If
If TypeName(dSplitter) = "Error" Then
dSplitter = "/"
End If
If TypeName(tSplitter) = "Error" Then
tSplitter = ":"
End If
If TypeName(Control) = "Error" Then
Control = 0
End If
If TypeName(dtSeparator) = "Error" Then
If Control = 1 Then
dtSeparator = "*"
Else
dtSeparator = " "
End If
End If

strS = Split(CStr(FormatDateTime(tNow,3)),":")(2) 'Update 20090223 0951
strHN = FormatDateTime(tNow,4) 'Update 20090223 1428
strHNS = FormatDateTime(tNow,4) & tSplitter & strS 'Update 20090223 0951

If TypeName(sFormat) = "Error" Then
sFormat = "YMD" & dtSeparator & "HNS"
End If

If dSplitter = "/" Then
Else
tDate = Replace(tDate,"/",dSplitter)
End If
If tSplitter = ":" Then
Else
strHNS = Replace(strHNS,":",tSplitter)
End If

sFormat = Replace(sFormat,"YMD",tDate)
sFormat = Replace(sFormat,"HNS",strHNS)
sFormat = Replace(sFormat,"HN",strHN)
sFormat = Replace(sFormat,"S",strS)

If TypeName(sFormat) = "Error" Then
Else
wExist = Instr(1,sFormat,"W",1)
If wExist = 0 Then
Else
sFormat = Replace(sFormat,"W",strWeekday)
End If
End If
If Control = 0 Then
iDTw = sFormat
Else
iDTw = Split(sFormat,dtSeparator)
End If
End Function


'------------------------------------
'lArray - 文字列を1文字ずつバラし、配列として返す
'- Created by LazwardFox -

' Release 20090228 1246

' lArray(
' strLetters - 分解したい文字列
' ,rArray - 戻り値が代入されます。任意の変数名を指定
' )

Function lArray(strLetters, rArray)
Dim Pc, rLetters()
Set objADO = CreateObject("ADODB.Stream")
With objADO
.Type = 2
.Open
.WriteText strLetters
Pc = 0
.Position = 0
Do Until .EOS
ReDim Preserve rLetters(Pc)
rLetters(Pc) = .ReadText(1)
Pc = Pc + 1
Loop
End With
rArray = rLetters
objADO.Close
Set objADO = Nothing
End Function

'------------------------------------
'inArrays - 多次元配列構築
'- Created by LazwardFox -

'配列 及び 文字列から、区切り文字を指定して多重配列を作成し返す。

' inArrays(
' tSources - 区切り文字を含む文字列 ないし、それらで構成された配列
' ,strLimitters - 区切り文字を順番に並べた文字列を指定
' ,arReturn - 戻り値が代入されます。
' )

' Update 20090228 1248 strLimitters指定に、区切り文字 ~(チルダ)不要に。
' Update 20090228 0833 配列のほか、文字列もソースに適用可能に。
' Update 20090223 0917

Function inArrays(tSources, strLimitters, arReturn)
Dim arSources, arLimitters, iLimitter, arInArrays, iSource, Pc
arSources = tSources
lArray strLimitters, arLimitters '< Update 20090228 1248
For Each iLimitter In arLimitters
If VarType(arSources) = 8 Then
arInArrays = Split(arSources,iLimitter)
Else
Pc = 0
ReDim arInArrays(0)
For Each iSource in arSources
ReDim Preserve arInArrays(Pc)
arInArrays(Pc) = Split(iSource,iLimitter)
Pc = Pc + 1
Next
End If
arSources = arInArrays
arInArrays = Null
Next
arReturn = arSources
End Function


更に自由度の高い書式指定機能付スクリプトを作成するので、この分も要らなくなったりするww

似たようなものばかりでアレなんだケド、色んなデータへのアプローチの仕方があるというコトで、
なにかしら参考になっていればいいなぁ・・・(´ヘ`;)
<そのまま使える スクリプト 年月日 曜日 時分秒 文字列 配列変数 取得 Format Text FormatDateTime>

VBScriptで多次元配列 そにょ2・・・


外部関数追加で、スプリット文字列に区切り文字 ~(チルダ)を不要にしてみた。
あと、バラバラに列挙してたスクリプトを、ファイルのままに張ってみたw
ただ、Tabが全部ツブれてしまうんだよね・・・


以下を、空のテキストファイルにコピペして、任意の名前に、拡張子.vbsをつければ動作します。

    '***** ↓↓↓ScriptTitle↓↓↓ *********************************************************     
'lArray & inArrays
'- Created by LazwardFox -

' スクリプトライブラリの一部

' Release 20090228 1330

'***** ↓↓↓ Decralations ↓↓↓ ******************************************************
Const strWeekdays = "1:月:MON:Mon:Monday,2:火:TUE:Tue:Tuesday,3:水:WED:Wed:Wednesday,4:木:THU:Thu:Thursday,5:金:FRI:Fri:Friday,6:土:SAT:Sat:Saturday,7:日:SUN:Sun:Sunday"
Dim arWeekday, sD

'***** ↓↓↓Main(Test)Routine↓↓↓ ***************************************************
arWeekday = Split(strWeekdays,",")
inArrays arWeekday, ":", sD
msgbox sD(2)(3),,"Test"

inArrays strWeekdays, ",:", sD
msgbox sD(2)(3),,"Test"

'***** ↓↓↓Functions↓↓↓ ***********************************************************
'------------------------------------
'lArray - 文字列を1文字ずつバラし、配列として返す
'- Created by LazwardFox -

' Release 20090228 1246

' lArray(
' strLetters - 分解したい文字列
' ,rArray - 戻り値が代入されます。任意の変数名を指定
' )

Function lArray(strLetters, rArray)
Dim Pc, rLetters()
Set objADO = CreateObject("ADODB.Stream")
With objADO
.Type = 2
.Open
.WriteText strLetters
Pc = 0
.Position = 0
Do Until .EOS
ReDim Preserve rLetters(Pc)
rLetters(Pc) = .ReadText(1)
Pc = Pc + 1
Loop
End With
rArray = rLetters
objADO.Close
Set objADO = Nothing
End Function

'------------------------------------
'inArrays - 多次元配列構築
'- Created by LazwardFox -

'配列 及び 文字列から、区切り文字を指定して多重配列を作成し返す。

' Update 20090228 1248 strLimitters指定に、区切り文字 ~(チルダ)不要に。
' Update 20090228 0833 配列のほか、文字列もソースに適用可能に。
' Update 20090223 0917

'inArrays(
' tSources - 区切り文字を含む文字列 ないし、それらで構成された配列
' ,strLimitters - 区切り文字を順番に並べた文字列を指定
' ,arReturn - 戻り値が代入されます。
' )

Function inArrays(tSources, strLimitters, arReturn)
Dim arSources, arLimitters, iLimitter, arInArrays, iSource, Pc
arSources = tSources
lArray strLimitters, arLimitters '< Update 20090228 1248
For Each iLimitter In arLimitters
If VarType(arSources) = 8 Then
arInArrays = Split(arSources,iLimitter)
Else
Pc = 0
ReDim arInArrays(0)
For Each iSource in arSources
ReDim Preserve arInArrays(Pc)
arInArrays(Pc) = Split(iSource,iLimitter)
Pc = Pc + 1
Next
End If
arSources = arInArrays
arInArrays = Null
Next
arReturn = arSources
End Function


lArrayでは、文字列を文字にバラす際、ADODBオブジェクトに文字列を書き込み、
それを先頭から1文字ずつ読み出して、変数へ配列を追加しつつ、値を代入している。

書式)
   lArray (strLetters, rArray)

strLetters - 分解したい文字列
rArray - 戻り値が代入されます。任意の変数名を指定


書式)
   inArrays(tSources, strLimitters, arReturn)

tSourcess - 区切り文字を含む文字列 ないし、それらで構成された配列変数を指定
strLimitters - 区切り文字を、次元の浅さ順に並べた文字列を記述
arReturn - 戻り値(配列)が代入されます。任意の変数名を指定
しっかし、VBScriptでドコまでやるつもりなのか・・・ 書いた本人がクビ傾げてるワ・・・(´ヘ`;)