お前ら、WindowsScripting使ってますか? Part3

このエントリーをはてなブックマークに追加
918名無し~3.EXE:04/10/29 23:50:32 ID:V0FW996l
>>917
print "<html>Hello world</html>"
919名無し~3.EXE:04/10/29 23:52:32 ID:Ap0nYukH
WSHの勉強を始めようと思って、本を一冊買おうと思ってるんだけど
オススメの本ってある?
>>3の本は随分古いようなので、今はどうなのかなと思って。
ちなみにおいらは、バッチファイルはある程度書ける、という程度のレベルです。
920919:04/10/29 23:53:57 ID:Ap0nYukH
× >>3の本〜
○ >>5の本〜
921名無し~3.EXE:04/10/29 23:59:41 ID:UwzqSupw
>>5の本は古いし、VBScripばかりなんだよね
922名無し~3.EXE:04/10/30 05:03:40 ID:wh/VjY2r
>>912 一週間も前だからもうみてないな。

どの時点で上手く行ってないのかがわからないけど、
スクリプトファイルにD&Dしたファイルが起動したQTで開けないってこと?
もしそうなら、QT起動時に引数として渡したらどうでしょ。

var file = WScript.Arguments.Unnamed.Item(0);
var oExec = WShell.Exec( "QuickTimePlayer" + " \"" + file + "\"" );

でもスクリプトにaviをD&DしてもWMPは起動しないし、外してるかな。
923912:04/11/03 01:47:40 ID:PB9dmDR7
>>922
たまに覗いてます!
ありがとうございました。QTにAVIを送り込むことが出来ました!

>でもスクリプトにaviをD&DしてもWMPは起動しないし、外してるかな。
WMPにAVIが関連付けされてるんですが、そのせいでWMP上でAVIが
再生されちゃうんですよ…。うちの環境だけですかね…。

でも、何とかQTでAVIを開けました。
後は、キーを送るの箇所辺りを弄ってみます。
どうも上手く作動してないっぽいです。
924912:04/11/03 02:45:25 ID:PB9dmDR7
立て続けにすみません。
>>922さんのおかげで、何とか1ファイルだけの処理を
上手くこなす事ができるようになりました。
有難うございます。

一つの処理時に次への実行を待機させるようなのは、
やはりSleepメソッドは無いでしょうか?
やたらSleep行が多いもので…。
これがクリアできたら、次は複数ファイルへの対応です!
ボチボチ調べながら自分自身でも頑張ってみます。
925912:04/11/03 02:46:35 ID:PB9dmDR7
>Sleepメソッドは無いでしょうか?

Sleepメソッド以外は無いでしょうか?の間違いです。
スレ汚しスマソ
926名無し~3.EXE:04/11/05 00:37:17 ID:g7DYgbKA
>912
複数ファイルスクリプトにD&Dして処理するのなら、
WScript.Arguments.Unnamed.lengthで名前なし引数の数を確認して
ループで順に取り出していけばいい。

>912のスクリプト、while(oExec.Status == 0) WScript.Sleep(1000); で
起動したQTPの終了を待ってるけど、その後さらにキーを送ってるから
ここのステータスチェックでのsleepはいらないんじゃない?

処理待ちSleepは、キーを送ってその処理待ちならSleepで待つしかないかな。
927名無し~3.EXE:04/11/05 00:37:28 ID:6HnHT4mY
こんな表記も出来るのね。今日初めて知った。

Dim a(2)
a(0)=array(0,1,2)
a(0)(0)=10
msgbox a(0)(0) ' 10と表示
928名無し~3.EXE:04/11/05 00:40:52 ID:PKEjFJ0R
ショートカットのリンク先に引数足して、
そのショートカットにファイルをドロップすると、
ショートカットで足した引数が WScript.Arguments で取れないみたいなんですが、
これは仕様ですか?

ショートカットで足した引数の後ろにドロップしたファイルがきて欲しい。
バッチファイルならいけたのに。
929名無し~3.EXE:04/11/05 21:50:54 ID:g7DYgbKA
>>928
ほんとだ、出来ない。

スマートじゃないけど
目的のスクリプトを引数付けて呼び出すスクリプトを書くとか?
930912:04/11/08 04:43:08 ID:2YtLn7z3
>>926
レスありがとうございます。遅くなってすみません。

>WScript.Arguments.Unnamed.lengthで名前なし引数の数を確認して
>ループで順に取り出していけばいい。
初心者なんで、何を言われてるかチンプンカンプン状態ですが、
WScript.Arguments.Unnamed.lengthをヒントにやってみます。

>ここのステータスチェックでのsleepはいらないんじゃない?
そこのsleepは処置待ちでのスリープです。
後、起動時にも即時にキーを送ってるっぽいので、今のバージョンでは、
多数sleep入れてしまっております。

ご教授ありがとうございます!
931名無し~3.EXE:04/11/09 04:46:23 ID:E7QupWoW
>>4
DynaCall - Win32APIコール
http://www.borncity.com/WSHBazaar/WSHDynaCall.htm
ここ落ちてないですか?そのうち復旧するのかな?
dynacallが必要なんです。
932名無し~3.EXE:04/11/09 11:30:22 ID:yAu/BLvf
microsoftのwshのサンプルってどこにありますか?
ヘルプには

>Windows Script Host のサンプルをダウンロードするには
>Microsoft Windows Script Technologies の Web サイト (http://www.microsoft.com/japan/) のナビゲーション ウィンドウ領域にある [Windows Scripting Host] をクリックします。
>メニューにある [ダウンロード] をクリックします。
>ダウンロード ページの [サンプル スクリプト (英語)] をクリックします。[ファイルのダウンロード] ダイアログ ボックスが表示されます。
と書いてありますがそんなページは見つかりません。

また他にもよいサンプルのおいてあるところがありましたら教えてください。
やりたいことは、ファイルとレジストリ操作、ダイアログの表示です。
933名無し~3.EXE:04/11/09 17:50:10 ID:OHm2GMYi
すみません、質問なのですが

Set IE=Wscript.CreateObject("InternetExplorer.Application")

↑の場合の「InternetExplorer.Application」の部分は、どうやったら調べられるのですか?
934名無し~3.EXE:04/11/09 22:24:03 ID:GAuhza3Q
>931
Upローダ教えてくれたらUpするよ。
2chでUpされた物を信用できるのならだけど。

>932
MSDNじゃ駄目なん?
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/vtoriMicrosoftWindowsScriptTechnologies.asp
あとは>3にある個人サイトとか。

>933
oleview.exe。
ttp://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/oleview-o.asp
935名無し~3.EXE:04/11/09 23:03:44 ID:OHm2GMYi
>>934
レスありがとうございます。
win2000のサイトのようですが、このoleview.exeは、XP SP2でも使えますか?
936名無し~3.EXE:04/11/09 23:05:16 ID:4UinI7d0
まあまずは試してみ。
937名無し~3.EXE:04/11/09 23:24:54 ID:uAkdiH+f
>>931
ttp://web.archive.org/web/20010706182517/http://www.borncity.de/WSHBazaar/dynawrap95.zip
9x系ならInternet Archiveから落ちたよ
Internet Archiveのバグで1バイトかけているので
ファイルの最後にバイナリエディタで00を追加すれば解凍できる
938名無し~3.EXE:04/11/09 23:34:00 ID:GAuhza3Q
>>935
>934のはver5.0。xpでも問題ないと思うよ。
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en
こっちがたぶん最新版でver5.1。でも他のも入ってるからファイルがちょっとでかい。
939名無し~3.EXE:04/11/10 00:32:10 ID:dH38g6sq
WSHかバッチファイルでデスクトップのスクリーンショットを取って
bmpかjpgでファイルに保存することはできるでしょうか?
940名無し~3.EXE:04/11/10 00:38:11 ID:IgUgxNFd
>>939
そういうCOMを探すより、そういうEXEを探したほうが早いでしょう。
941935:04/11/10 00:59:55 ID:0IqHZxsT
>>938
どうもです。>>934のをインストールしてみたら、「iviewers.dllがない」って言われたので
ネット検索して見つけだしてコピー、ついでにoldバージョンの日本語化パッチを見つけたので
一工夫して日本語化、そしてOleviewには検索機能がないらしく、見方を把握するのに
手こずっていたら、こんな時間になってしまいました。
ProgID というのが該当部分なのですね。分かってしまえば便利ですね。

というわけで、>>934のはXP SP2でも問題なく動作しました。
>>938のリソースキットも面白そうなのでダウンロードしました。
ありがとうございました。
942名無し~3.EXE:04/11/10 07:35:12 ID:ANC3jy5y
>>939
キンタマ露出させる前にログぐらい嫁
943m:04/11/10 12:00:00 ID:PmMEJcSc
あるキー配下にあるキー名を取得したい場合ってどうするんですか?

具体的には
HKCU\Softwareの中にあるキーを片っ端からゴニョゴニョしたいんです。
ってか他のキーにもゴニョゴニョする事を考えいるので、配下のキーを全部・・・的な
動作を知りたいです。
944名無し~3.EXE:04/11/10 12:27:37 ID:IgUgxNFd
>>943
WMI EnumKey でぐぐれ
945名無し~3.EXE:04/11/10 12:28:59 ID:/7A6p4zJ
946名無し~3.EXE:04/11/10 12:45:00 ID:/7A6p4zJ
Win98でもWMIを手動インストールはできるのか。知らなかった。
947m:04/11/10 15:01:48 ID:PmMEJcSc
> 944-955

ぬおぉぉ、助かりました
まさにこんな動きです。

WMIって良く解らんかったので頭が回りませんでした。
948名無し~3.EXE:04/11/10 16:14:53 ID:Qneit69U
レジストリを検索して特定の文字列を見つけたら削除するスクリプトなんて
WSHで実現できないでしょうか?

ファイルやレジストリキーの削除は検索して出来るようになったのですが、
量が多いとめんどくさいので検索機能を使って一気にやりたいのです。
949名無し~3.EXE:04/11/10 16:21:04 ID:/7A6p4zJ
>>948
>  WSHで実現できないでしょうか?
できるよ。
すぐ上でやりとりされてるのを参考にすればいい。

//でもぶっちゃけ一気に数十台のマシンをとか言うんでない限りスクリプト書くより適当なレジストリエディタ使う方が早そうだが。
950948:04/11/10 18:00:06 ID:u2p4OJfV
>>949
レスありがとうございます。
ちょっと前のやりとりを参考に読んで自分でできるか試してみます。

ちなみにそのレジストリエディタはどのようなものでしょうか?
Vectorでちょっと見てみたのですが、検索して削除ってのはWinに付属の
レジストリエディタとあまり変わらなかったみたいなので。
よかったら教えてください。
951948:04/11/10 18:34:13 ID:0pHBdo5H
二つほど教えてください。
1、vbsの拡張子だと実行するファイルの拡張子をWSFにするとエラーになりますけど、
これは何か宣言すれば動作するようになるのでしょうか?
今まで実害が無かったのでずっとvbsのままにしていましたが気味悪いので。

2、もうひとつですが、ファイルの名前を今日の日付にしてあるファイルをコピーしたい
のですが、これはどうすればできますか?
ファイル操作は初めてでコピーのやり方や日付情報の取り方すら分かりません。
ここのログを検索してもファイルの削除の方法は書いてあったのですが、
コピーの方法はどこにも書いてありませんでした。
952名無し~3.EXE:04/11/10 18:48:45 ID:lTopE8CH

放置放置
953名無し~3.EXE:04/11/10 18:58:50 ID:/7A6p4zJ
まあ取りあえずMSDN読め。
Google使え。
954名無し~3.EXE:04/11/10 20:37:49 ID:0m1rxycB
>>951>>5の参考文献から何か買ったほうが良さそうだな
955名無し~3.EXE:04/11/10 23:57:09 ID:fbxEpDl6
MsgBoxでvbYesvbNo等以外にすること出来る?

例えば、4つぐらいのボタンを並べるとかやりたいんだけどYes No Cancel以外できなくて。
956名無し~3.EXE:04/11/11 00:07:30 ID:gp8+fVfY
MsgBoxとはそんなもんだ。
簡単に出せるけど、できることが限られてる。

IEを起動して、MsgBox風の外観にして、
HTMLでボタンを並べて、入力結果を元のスクリプトに返してやればいい。
957名無し~3.EXE:04/11/11 00:36:59 ID:cNYXWVQr
初心者が増えてきたな。良いことだ。
958名無し~3.EXE:04/11/11 16:12:50 ID:fZTohmvy
空白のあるフォルダや実行ファイルに引数を送るときは通常
"""c:hoge\hoge.exe -x"""
でやるよね?

でも、フォルダ名や引数が場合によって変わるからどうしてもこの形式が
使えないんだけど、こういうときに空白のフォルダ名や引数を送るには
どうしたらいいの?
ショートカットを作るとなると大量になるのでそれも無理です。
できたら、Wscript.run "C:\"+hogedir+"hoge.exe " +hoge
見たいな形でできたらいいんだけど、これって無理ですか?
959名無し~3.EXE:04/11/11 16:23:40 ID:YEYQryb+
例も日本語もむちゃくちゃだが、適当に引数の前後に"を付け加えるQuote関数でも作るとか。
960958:04/11/11 16:31:00 ID:CBKbTJ5A
""""で解決しました。すみませんでした。
961名無し~3.EXE:04/11/11 18:28:40 ID:ENl8B5W0
過去ログやテンプレのサイトも一通り読んでも分からないので教えてください。

http://pc5.2ch.net/test/read.cgi/win/1058829737/l50
などの2ちゃんのスレを . や / で切り分けて順番を並び替えることはできませんか?

例えば上の例だったら
http://www.aaa.co.jp/2ch_logbackup/pc5-win/1058/1058829737.mht
などのように.などや文字列の一部で切り分けて文字列操作をしたいのですが、
やり方が分かりません。
やりかたを教えてください。
962名無し~3.EXE:04/11/11 18:37:34 ID:YEYQryb+
わざわざ「2ちゃんのスレ」などと書く必要はないな。URL文字列の、とかなら分かるけど。

Split関数(VBScript)/splitメソッド(JScript)で文字列配列にして、
適切に処理して、
"/"なりなんなりを間に挟んで再結合とか。

//先頭のttp://は事前に削除しといた方がやりやすい
963名無し~3.EXE:04/11/12 11:26:57 ID:uCMuzyOf
961です。
やってみたのですが、どうしてもできません。
とりあえずURLを入力させて各要素をひとつずつ表示させようと
しているのですが、それすらできません。
lengthやsplitの使い方が間違っていると思うのですが、
どなたか教えていただけないでしょうか?
MSDNに当たっても
function SplitDemo(){
var s, ss;
var s = "The rain in Spain falls mainly in the plain.";
// スペースの位置で分割します。
ss = s.split(" ");
return(ss);
}
と言う例があるだけでそれを真似たのですが出来てないみたいです。

以下、ソース
Dim i,RURL,ss

RURL=inputbox("input URL")
ss=split(RURL,"/") 'ss=RURL.split("/")でも出来ず
for i=0 to ss.length 'ss.countなども試したが出来ず
msgbox ss[i]
next i

Wscript.Quit intMsg
964名無し~3.EXE:04/11/12 11:51:26 ID:gsoQ0tnO
>>963
VBScriptとJScriptがごっちゃになりまくってるね。

JScriptならsplitから返ってくるのがArrayオブジェクトなので、そのlengthプロパティを参照できる。
VBScriptだと、配列は配列なのでUBound関数を使って配列長を取得する必要がある。
大抵は、同じような機能をJScriptはオブジェクトベースで、VBScriptは関数ベースで解決しているから、
異なる言語のサンプルを見る時はそれに対応した自分の扱う言語上での表現に留意しないといけない。

あと、JScriptは配列要素へのアクセスは[index]だけど、VBScriptだと(index)になる。
965名無し~3.EXE:04/11/12 13:57:16 ID:A+iYBMN8
NTFSのファイルストリームに格納されているコメントの取得と設定のやり方を教えてください。
966名無し~3.EXE:04/11/12 14:59:41 ID:32lcMbL0
>>963
こんな感じじゃないかな。

Dim i, RURL, ss
RURL = InputBox("input URL", "hoge", "http://pc5.2ch.net/test/read.cgi/win/1058829737/")
ss = Split(RURL, "/")
For Each i In ss
MsgBox(i)
Next
967名無し~3.EXE
>>963
よく、MidやSplitを駆使して文字列を切り貼りしているのを見かけるが、
変則パターンがあると、バグを入れ込むしロジックも複雑になる。
VBSでもJSでも 正規表現の置換使うのが一番手っ取り早いのではないかと。
http://(\w+).+(\w+)/(\d{4})(\d{6})(/l\d+)?$

http://www.aaa.co.jp/2ch_logbackup/$1-$2/$3/$3$4.wht
みたいな感じで。ぱっとみぃで適当に作ってみたが。