WSH(・∀・)スレッド! Pa ..
39:デフォルトの名無しさん
08/05/18 01:46:05
>>28
new ActiveXObject('wscript.shell').PopUp('pause');
40:28
08/05/18 06:45:44
>>29 >>39
ありがとう。結局今のところ cscript //D を使うバッチ
ファイル経由で起動してます。教えていただいた方法も
後々試してみたいと思います。
んが、今気づいたんですが、結局デバッグできればいいので
wsf ファイルにして <?job debug="true"?> を使うというのも
いいかなと思っています。
ところでせっかく wsf ファイルで書くジョブのコメントなどを
設定したとしても、特に活用法ほうってないですよねぇ。
wsf ファイルを右クリックしたらジョブ一覧がコンテキストメニューに
かっこよく出てきたり・・・・しないよなぁ。
ところで wsh から ADODB の RecordSet を使ってかなりのデータ
処理ができる気がしてきました。しかし ADODB の中でいろいろと
定義されている定数群を識別子じゃなくてじかに書かなきゃならん
のが面倒っぽい。これも wsf の reference タグで解決?
41:デフォルトの名無しさん
08/05/19 22:39:55
正規表現を使った置換で
hogera=12345
purururu=00000
ranran=99999
これを
hogera=11111
purururu=11111
ranran=11111
こうしたい。
=の左側は英文字。右側は5桁の数字。
どうやったらいいですか?
JScriptです。
42:デフォルトの名無しさん
08/05/19 23:48:44
単に、5桁の数字を "11111" の置換するだけなら、
"hogera=12345".replace(/(\d{5})/, "11111")
でいい。でも、12345=12345 が 11111=12345 になるのが嫌なら
"purururu=00000".replace(/^([A-Za-z]+)=(\d{5})$/, "$1=11111")
とかにすればいい。
43:デフォルトの名無しさん
08/05/19 23:56:09
var s1 = "hogera=12345\npurururu=00000\nranran=99999\n";
WScript.Echo(s1);
var s2 = s1.replace(/^([A-Za-z]+)=(\d{5})$/, "$1=11111");
WScript.Echo(s2);
変わらない。何で?
44:デフォルトの名無しさん
08/05/20 01:28:42
mオプションつけれ
45:デフォルトの名無しさん
08/05/20 05:40:41
var s1 = "hogera=12345\npurururu=00000\nranran=99999\n";
WScript.Echo(s1);
var s2 = s1.replace(/^([A-Za-z]+)=(\d{5})$/gm, "$1=11111");
WScript.Echo(s2);
出来たぁ!ありがと!
46:デフォルトの名無しさん
08/05/23 10:16:36
JScript の中から、今の環境でどんなオブジェクトが使えるかを
知る方法はありますか?たとえば o がオブジェクトだとすると、
for (i in o) print (i); でそのオブジェクトのプロパティ一覧が
得られますが、そもそもどんなオブジェクトがあるのかなと。
WScript オブジェクトとかその環境独自のオブジェクトが
最初から用意されていると思うのですが、それをスクリプト内から
知る方法はあるのでしょうか?
47:46
08/05/23 10:21:56
列挙できると書きましたが、もちろん DontEnum 属性が
設定されていたらだめですね。無視して列挙させるという
ようなメタレベルでの操作もできないようですし。
48:デフォルトの名無しさん
08/05/23 12:47:52
jscriptには定数はないのでしょうか?
Microsoftのページには定数は const みたいに書いてあるのですが、
構文エラーと言われます。
49:デフォルトの名無しさん
08/05/23 18:59:09
123
'abc'
50:デフォルトの名無しさん
08/05/24 07:09:08
>>49
すみません、定数の定義の話です。
つか var つけないと定数になるのかと思ったら、WSH?(Windows Script)のvarはもともといらないのね。
constもつかえないっぽい
51:デフォルトの名無しさん
08/05/24 12:30:20
昔ながらの全部大文字とか勝手にして「これは定数。」って脳内補完しとけばよし。
52:デフォルトの名無しさん
08/05/24 13:04:39
>>48
> Microsoftのページには定数は const みたいに書いてあるのですが、
> 構文エラーと言われます。
それJScript.NETの説明。
>>50
> WSH?(Windows Script)のvarはもともといらないのね。
varなしで変数を宣言すると、グローバル変数になっちゃうぞ。
53:デフォルトの名無しさん
08/05/24 18:26:40
>>52
うへー、ぜんぜん違うのね。
ありがとう。
この辺のことはどこに書いてあるんだろう
54:デフォルトの名無しさん
08/05/24 21:24:09
>>1 の公式
55:名無しさん@Linuxザウルス
08/05/26 13:31:35
makewin.exeでexe化しておいたvbsが
savceの5/26定義パターンから木馬として片端から検疫されてた..
なんでmakewin&exe化したのが木馬扱いされてんねん
あああダメージでかいわ..orz
56:デフォルトの名無しさん
08/05/26 22:22:49
CreateObject("WScript.Shell").SendKeys "moji"
mojiと書きたいのですが。
その前にIMEを切りたいのですが、できますか?
57:デフォルトの名無しさん
08/05/27 01:50:36
はい
58:デフォルトの名無しさん
08/05/27 01:59:53
{kanji}
59:デフォルトの名無しさん
08/05/27 23:50:09
VBScriptの記述で質問です、引数(フォルダのドラッグを想定)で与えられたフォルダの中身を、
コマンドラインで順に処理したいのですが(実行処理を確認したいため)直ぐにターミナルが閉じてしまいます。
今回初めて、VBScriptを作成したのですが、どこがおかしいのか分からない状況です。
おかしい点を教えていただけないでしょうか。
#実行処理が確認できるのであれば、コマンドラインで処理する必要はないのですが、どの様な
#方法があるのか調べることができませんでした。もし他によい方法があれば教えてください。
Set fso = CreateObject("Scripting.FileSystemObject")
Set args = WScript.Arguments
Set WSHShell=Wscript.CreateObject("Wscript.Shell")
'引数チェック
if args.Count <> 1 Then
WScript.Echo "Usage: test.vbs (target folder path)"
WScript.Quit()
End If
'コマンドラインで実行
If LCase(fso.GetFileName(WScript.FullName)) = "wscript.exe" Then
WshShell.Run "cscript """ & WScript.ScriptFullName & """" & args(0) & """",1,False
WScript.Quit
End If
Set folder = fso.GetFolder(args(0))
'フォルダを内のファイル一覧を取得
For Each file In folder.Files
WScript.Echo file.Name
Next
60:59
08/05/27 23:59:39
最終的な目標ですが、フォルダ内にあるファイル全てを順に、あるアプリケーションに
引数として渡して処理を自動化したいと考えてます。よろしくお願いします。
61:デフォルトの名無しさん
08/05/28 00:08:17
WshShell.Run "cmd /k cscript """ & WScript.ScriptFullName & """ " & args(0) & """",1,False
62:60
08/05/28 00:17:04
>61
レスありがとうございます。上手く動作することができました。
本当に助かりました!
63:デフォルトの名無しさん
08/06/01 15:29:48
>>48
typelibrary作って<reference>で参照すれば?
64:デフォルトの名無しさん
08/06/01 20:28:57
WSHを使って、タスクトレイで動いてるアプリとメッセージのやり取りってできますか?
65:デフォルトの名無しさん
08/06/01 20:37:43
出来ますよ
そういうCOMを探すか作るかすれば
66:デフォルトの名無しさん
08/06/02 13:24:17
WSHってメッセージキュー扱えないのか
67:デフォルトの名無しさん
08/06/02 14:13:29
MSMQ使えるだろ
68:デフォルトの名無しさん
08/06/02 22:15:19
NGワード
そういうCOM
69:デフォルトの名無しさん
08/06/02 22:31:06
UWSC使えば?
70:デフォルトの名無しさん
08/06/03 08:35:11
Office2007+Vistaなんですが、MSEもしくは、それ相当のものってないんですか?見あたりません
71:デフォルトの名無しさん
08/06/03 09:06:44
>>68
WSHはいわばCOMを使う土台なわけで
COMを使うことを否定したら何にも出来ないぞ
COMを使うこと自体は否定しないが、COMのDL先書いて
そのCOMを使ったコードまで書いてくれなきゃヤダってなら
自分でブログラムを書く人が集まる場であるこの板に来るのが間違い
72:デフォルトの名無しさん
08/06/03 12:55:18
>>71がこの板に来るのが間違い
73:デフォルトの名無しさん
08/06/03 19:07:02
>>71
中身がないレスは読む価値もないってだけの話
74:デフォルトの名無しさん
08/06/03 21:12:29
悔しかったの?
75:デフォルトの名無しさん
08/06/03 22:58:18
>>71は例の基地外なのか
76:デフォルトの名無しさん
08/06/04 01:16:04
>>71
中身がないレスしかできないってだけの話
77:デフォルトの名無しさん
08/06/04 03:22:31
COMでWordファイルに書き出したりするプログラム書いてみたのですが
ログインユーザがAdministrator権限あるときはちゃんと動くのですが
ないときは例外が出るみたいです
Administrator権限がないとCOMでOfficeの*.Applicationにはアクセス出来ないのでしょうか?
78:デフォルトの名無しさん
08/06/04 07:58:27
>>77
セキュリティオプションの「Visual Basic プロジェクトへのアクセスを信頼する」あたりをチェックすればいけるんじゃないの?
確認してないけど
79:デフォルトの名無しさん
08/06/05 02:12:27
やってみます
ありがとうございました
80:デフォルトの名無しさん
08/06/05 03:21:41
>>77
URLリンク(support.microsoft.com)
81:デフォルトの名無しさん
08/06/05 06:28:49
>>80
>>77 じゃないけど自分も同じような現象で過去あきらめた.
で,リンク先読んでみたいんだけど,いまいちわからなかた.
リンク先で言及されているのは,サーバ内でWordのファイルを
自動生成するというような話だよね.>>77 は普通の
クライアント環境で対話的に使っているのだと思うんだけど.
82:デフォルトの名無しさん
08/06/05 06:56:29
>>80
何度読んでも眠たくなる文章だ
83:デフォルトの名無しさん
08/06/11 06:53:26
wshでSQLServer2000と2005のテーブルの内容を取得するのはどうやるんですか?
なるべく高速な方法が良いです。
更新はしないのでSELECTが出来ればいいです。
84:デフォルトの名無しさん
08/06/11 08:19:08
>>83
ADOを使う
ADODB.Connection とかのキーワードでぐぐってみれ
85:デフォルトの名無しさん
08/06/11 23:10:26
vbsで、
TEST_PATHに"C:\TEST\*.txt"を入れて以下のように
動かしたら"C:\TEST\*.txtt"ファイルのようなものまで
消えてしまいました。
ワイルドカードを使用して、拡張子txtのみを削除する
方法は無いのでしょうか?
objFSO.DeleteFile TEST_PATH
86:デフォルトの名無しさん
08/06/11 23:29:46
>>84
Thanks!
87:デフォルトの名無しさん
08/06/12 00:27:05
>>85
たぶんないと思う。
自分でファイルのリストを取得してから通常の文字列マッチング
で絞り込むくらいしか思い浮かばない。
88:デフォルトの名無しさん
08/06/12 01:00:09
>>85
ひどい仕様だな
89:デフォルトの名無しさん
08/06/12 03:25:01
NTFSならレジストリで8.3ファイル名の記録をオフにすれば
そういう挙動が起きなくなるとどこかで見た気がする。
90:デフォルトの名無しさん
08/06/12 05:03:36
Dim arr()
msgbox Ubound(arr) 'error
ReDim arr(9)
Redimをする前に、arrに値が入っているか
どうかを調べる方法はないでしょうか?
Redimをする前に、Ubound()で調べようとすると
エラー「インデックスが有効範囲にありません」
となります。
91:デフォルトの名無しさん
08/06/12 13:39:45
if err.description="インデックスが有効範囲にありません" then
92:90
08/06/12 18:41:03
>>91を参考にして下記でできました。ありがとうございます。
on error Resume Next
WScript.Arguments.Item(0)
if Err.Number <> 0 then msgbox "引数無し"
Err.clear
on error goto 0
93:デフォルトの名無しさん
08/06/12 22:36:39
if WScript.Arguments.Count = 0 then msgbox "引数無し"
94:90
08/06/13 01:51:11
>>93 私なりにやったのですが、そのようなコードを書けなかった
です。ありがとうございます。
95:デフォルトの名無しさん
08/06/17 22:24:32
VBScriptを使って、HTTPステータスコードを取得する方法を探しています。
ある任意のWeb画面に対してスクリプトでリクエストを行い、HTTPステータスコード(200 ok 等)を
取得する方法はありますでしょうか。
どなたかご存知の方がいらっしゃいましたら、ご教授下さい。
96:デフォルトの名無しさん
08/06/17 22:46:00
>>95
まかせろ!
検索してやった!
URLリンク(oshiete1.watch.impress.co.jp)
97:>>95
08/06/17 22:52:20
>>96
検索ありがとうございます。
確認してみたんですが、この先に紹介してあるサイトはVB?でしょうか。
どうもVBScriptに応用する方法が分かりません。
98:デフォルトの名無しさん
08/06/17 23:09:41
>>97
・・・まーいーや。
Microsoft.XMLHTTP とかの status プロパティ使えばできるでしょ。
99:>>95
08/06/18 06:54:28
>>98
有難う御座いました。
勉強不足の為、すぐに理解できませんでしたが
きちんと出来ました。
助かりました。m(_ _)m
100:デフォルトの名無しさん
08/06/26 18:15:00
処理1
msgbox "AAAA"
処理2
上記を実行し、ウィンドウンがでてきて、
OKボタンを押すと、処理2に移ります。
OKボタンを押さずとも、処理2に移る方法が
ありませんか? Wait:=Falseみたいな事できま
せんか?
101:デフォルトの名無しさん
08/06/26 18:45:56
.run "msgbox.vbs"
102:デフォルトの名無しさん
08/06/26 22:03:00
WSHはマルチスレッドじゃないからね
1プロセス1スレッドで、書かれたことを"順次"実行していくだけで
Megboxを出した状態で他の処理もするなどの"同時"実行は出来ない
やりたければ>>101も書いてるように別プロセスに非同期でMegboxを出させるしか無い
103:100
08/06/27 12:25:19
>>101 それにします。ありがとうございます。
>>102 マルチスレッドの事はわかりませんが、
「同時にできない」という事だけは覚えておきます。
104:デフォルトの名無しさん
08/06/27 12:37:02
WSH5.8からは出来るようになるかも
105:デフォルトの名無しさん
08/06/28 15:11:17
WSHってまだバージョンアップするの?
106:デフォルトの名無しさん
08/06/28 17:13:30
WSHは滅びんよ、何度でも甦るさ
107:デフォルトの名無しさん
08/06/28 21:01:14
PowerShell
108:デフォルトの名無しさん
08/06/29 02:10:47
PSH
109:デフォルトの名無しさん
08/07/07 23:08:32
VBSで質問です。
hoge.txtが以下の形式であります。
--- hoge.txt --------
foo 001
bar 001
(文字列、ブランク、3桁の数字、改行)
みたいな感じ。
このテキストに記載された文字列と一致する文字列が引数だったら、
同じ文字列の行の数字を+1させたいんです。
たとえば、引数が「foo」だった場合、「foo 002」みたいにしたいんです。
こんな感じの特定行を抜き出してのファイルに記載された文字列の置き換えって出来るんでしょうか?
というか、どんな風に組めばいいか教えてください(泣)
110:デフォルトの名無しさん
08/07/08 00:55:20
>>109
やりたいのって、マッチした文字列をカウントするようなこと?
ファイルの入出力がOKなら、
一行読んでは、Splitして、文字列と整数の構造体に
放り込む、を繰り返して一度全部構造体に入れる。
CLng CIntでもつかって後ろの要素は整数型変換すりゃいい。
使う構造体はハッシュ(Dictionary)でいいんじゃないかな。
マッチしたら、要素をインクリメント処理するを繰り返し、
終わったらJoinでもつかってファイルに書き出せば?
111:デフォルトの名無しさん
08/07/08 03:38:20
毎回ファイル全体書き換えていいなら>>110
必要な場所だけ書き換えたいなら
最大999までっていう制限で良い場合は
R/Wでオープンしてseekして書き換え
必要な場所だけ書き換える方針で
最大いくつになるか分からない場合は
999超えたときに末尾に追加行を作って
999-追加なしなら999
999-000なら1000
999-001なら1001
という処理を入れれば良い
112:デフォルトの名無しさん
08/07/08 13:05:43
COBOLer ですね わかります
113:デフォルトの名無しさん
08/07/08 17:00:48
吉岡照雄って人のOnErrorResumeNext.VBSの解説テキスト読んでるんだけど(2)の後半がよくわからない
On Error GoTo 0で復帰しちゃったら何事もなく処理が再開されちゃうから
ンなもん実装すんなよ!、おまいらも使うなよ!
って言ってるのかしら
114:デフォルトの名無しさん
08/07/08 20:40:17
>>92-93
115:デフォルトの名無しさん
08/07/09 05:33:05
exceptionが無かった頃はそうするしかなかった
いまならtry-catchで済む話
116:デフォルトの名無しさん
08/07/09 13:04:13
いまでもtry-catchつかえないよ
117:デフォルトの名無しさん
08/07/09 15:50:29
.NETなら使える
118:デフォルトの名無しさん
08/07/09 17:37:06
>>117
で?ややこしくならないようにまとめてくれ。
119:デフォルトの名無しさん
08/07/09 21:20:46
まとめるとJScriptを使えばよい
120:デフォルトの名無しさん
08/07/09 21:27:22
超シンプルなデータベースを作りたいと思っています
フォルダ内に100のテキストがあったとして その中に a="赤" とか
a="白"と書いてあり それを読み取り 最終的に割合を出すようにしたいのですが
いいサンプルなどないでしょうか?
121:デフォルトの名無しさん
08/07/09 22:05:46
var fso = new ActiveXObject("Scripting.FileSystemObject");
var Shukei = {};
var Sum = 0;
// カレントフォルダの全ての *.txt ファイルの1行目を読み,Shukeiに集計する
var f = fso.GetFolder(".");
for (var fc = new Enumerator(f.Files); !fc.atEnd(); fc.moveNext()) {
var file = fc.item();
if (/\.txt$/.test(file.Name)) {
var stream = file.OpenAsTextStream();
var s = stream.ReadLine();
stream.Close();
eval(s);
if (a in Shukei)
Shukei[a]++;
else
Shukei[a] = 1;
Sum++;
}
}
// 結果表示
for (var i in Shukei)
WScript.Echo(i + ": " + (100 * Shukei[i] / Sum) + "%");
122:デフォルトの名無しさん
08/07/09 22:16:21
サンプルまで作ってもらってありがとうございます
行:1、文字:28、コード:800A0401、ソース:Micosoft VBScriptコンパイルエラー
これがでて試せないんですが何が問題なんでしょうか?
123:デフォルトの名無しさん
08/07/09 22:25:59
>>122
拡張子は .js です
124:デフォルトの名無しさん
08/07/09 22:30:24
ありがとうございます vbsだけじゃなくて jsもつかえるんですね
125:デフォルトの名無しさん
08/07/09 22:32:25
JScriptだから
126:デフォルトの名無しさん
08/07/09 23:56:31
>>113
On Error Goto ErrLabel
エラー
ErrLabel:
msgbox "キャッチ"
これをやってみたけど、ダメだった。VBAならできた。
127:デフォルトの名無しさん
08/07/10 15:32:51
helpよめ
128:デフォルトの名無しさん
08/07/13 13:00:54
パスワード入力の時どうしてる?
129:デフォルトの名無しさん
08/07/13 17:15:30
バッチとか、シェルとかPHPしか経験無いんですが、
Wshってマスターするのに、どのくらいの時間が掛かりますか?
130:デフォルトの名無しさん
08/07/13 17:29:40
マスターってなんだよ
と、突っ込まざるを得ない
131:デフォルトの名無しさん
08/07/13 17:43:18
プログラミング言語をマスターしようといっている時点で終わってる。
132:デフォルトの名無しさん
08/07/13 17:47:23
ライブラリの仕様とか、用意されてるものとか、その開発環境で実現できることが
さっと頭に浮かぶほうが、「マスターした」に近いよね。
133:デフォルトの名無しさん
08/07/13 17:49:39
しかも聞いてるのが時間って・・・
134:129
08/07/13 19:33:27
>>132
そういうことですね。
ある程度バッチで出来ちゃうから
なかなかwshやろうと思わないんだよね
135:デフォルトの名無しさん
08/07/13 19:59:02
まぁ、WSHはCOM使うのが得意で、VBかJSで書きますってだけで、
そのCOMと同じ機能を持ったCLIプログラムが最初から用意されて、
それに精通しているなら、それらを組み合わせてバッチでやろうと思うよね。
でもWSHのほうが、多少細かいハンドルできるから、覚えたいという気持ちはわかる。
ちょっとしたファイルの入出力とか、シェル周り、FileSystemObject周りは便利。
136:デフォルトの名無しさん
08/07/13 20:36:51
シェル周り便利なの?
137:デフォルトの名無しさん
08/07/13 20:48:06
>>136
FSOで一通りのファイル操作はできるし、それ以外はShell.Runとかでいいからという発想での話。
138:デフォルトの名無しさん
08/07/13 20:51:41
コマンドプロンプトが一瞬表示されてしまうと嫌がられる
139:デフォルトの名無しさん
08/07/13 20:57:08
>>138
runの第二引数に0じゃだめだっけ?
140:デフォルトの名無しさん
08/07/14 09:18:44
>>135
VB≠VBS
141:デフォルトの名無しさん
08/07/14 09:33:15
>>140
どゆこと?
142:デフォルトの名無しさん
08/07/14 21:05:26
>>141
VBSはVBライクで、VBとは違うって言いたいだけなのかな?
143:デフォルトの名無しさん
08/07/14 22:35:20
WSH スレに VB はいらんでしょ
ってことじゃないかな。
まあ、>>135 の勘違いか typo なんだろうけど、ちいせい奴としか思えない >>140
144:デフォルトの名無しさん
08/07/14 22:54:40
>>128
htmlでフォームを作って、パスワード入力欄に入力してもらう。
Enterを押したら、submitボタンが反応して、ページを読み込もうとするから、それを検出して・・・
って、もっといい方法があると思う
>>138
表示されないようにコマンドから返ってくる文字列を取得する
妙に複雑なコードを見たことがあるな
145:デフォルトの名無しさん
08/07/14 23:24:12
>>138
タスク
WScript.exe //E:JScript hoge.CMD
hoge.CMD
@if(0==0)WScript.Quit(new ActiveXObject('WScript.Shell').Run('"'+WScript.ScriptFullName+'"',0,true));@else
REM バッチファイルだよーん
:@end
146:デフォルトの名無しさん
08/07/14 23:31:47
>>128
Hey, Scripting Guy!
URLリンク(www.microsoft.com)
147:デフォルトの名無しさん
08/07/17 17:30:06
VBScriptを書く時、みなさんは、どんなエディターを
使っていますか?
148:デフォルトの名無しさん
08/07/17 21:20:28
Excel
149:デフォルトの名無しさん
08/07/17 21:45:51
男は黙ってメモ帳。
150:デフォルトの名無しさん
08/07/17 21:53:42
男じゃない場合↓
151:デフォルトの名無しさん
08/07/17 22:04:04
Microsoft Visual Web Developer 2008 Express Edition
152:デフォルトの名無しさん
08/07/17 22:11:39
サクラ
153:デフォルトの名無しさん
08/07/18 01:35:27
コントロールパネルの「コンポーネントの追加と削除」一覧と
インストールの状態の有無を出力したいと考えているのですが
WSHやWMIで可能でしょうか?
154:デフォルトの名無しさん
08/07/18 13:07:01
まぁ、レジストリ管理されてるものっぽいし、
レジストリ操作か、WMIでかのうじゃないの?
155:デフォルトの名無しさん
08/07/18 17:06:08
でもまあ、具体的なやり方は自分で調べろってことで
156:デフォルトの名無しさん
08/07/18 17:57:35
URLリンク(www.microsoft.com)
157:マイク ◆yrBrqfF1Ew
08/07/19 07:10:06
>>147
ずっとterapadを使ってる。
テキストファイルはほとんどterapadとxyzzyとnotepadで開いてる。
158:デフォルトの名無しさん
08/07/22 01:06:42
フォーカスされたチェックボックスをオンに
する方法がありますか? お願いします。
obj.SendKeys " "
上記でスペースを押せば、オンオフが切り替わります。
しかし、切り替えたいのでなくて、オンにしたいのです。
159:デフォルトの名無しさん
08/07/22 02:57:56
どんな状況で、何をやっているのか想像つかね。
160:デフォルトの名無しさん
08/07/22 14:27:59
obj.SendKeys "On"
161:デフォルトの名無しさん
08/07/22 17:58:33
>>160
つまらん。
162:デフォルトの名無しさん
08/07/23 01:56:06
シリアルポートに文字出力して、その応答を受け取るにはどうすれば
出力だけならCreateTextFile → WriteLineでできたっぽいですが、ReadLineすると怒られます
163:デフォルトの名無しさん
08/07/23 23:30:55
>>162
できたって、え?
164:デフォルトの名無しさん
08/07/24 05:08:00
指定位置、指定サイズ、指定表示状態(アイコン、詳細表示など)でフォルダウィンドウ(エクスプローラー)を起動できちゃったりしますか?
165:デフォルトの名無しさん
08/07/24 08:44:21
出来ちゃいますよ
アレ使えば
166:デフォルトの名無しさん
08/07/24 15:17:40
Shell.Explorer
System.Object
など、使い道が無さそうなProgIDがレジストリにいっぱいあるのはなぜ?
167:デフォルトの名無しさん
08/07/24 18:35:25 BE:555198645-2BP(802)
>>165
ヤダァ♪
もう、えっちぃ♥
168:デフォルトの名無しさん
08/07/24 23:48:00
COmってリファレンスないもの、多いよな
169:デフォルトの名無しさん
08/07/25 00:08:03
アレってなあに?
170:デフォルトの名無しさん
08/07/25 00:12:34
>>166
System.Objectは.NET Frameworkのもの。
確かにWSH (COM)ではこれだけあっても役立つとは思えないけど。
171:デフォルトの名無しさん
08/07/26 16:23:19
set x=createobject("explorer.application")
x.top=100
x.left=100
x.visible=true
だろ
172:デフォルトの名無しさん
08/07/26 22:07:11
実行したら
ActiveXコンポーネントはオブジェクトを作成できません:'explorer.application'
って出た
173:デフォルトの名無しさん
08/07/27 00:24:26
C08AFD90-F2A1-11D1-8455-00A0C91F3880
にprogidを登録しろ
174:デフォルトの名無しさん
08/07/27 00:27:13
internetをつけてみろ
175:デフォルトの名無しさん
08/07/27 00:32:51
それだとIEになるぞなもし
176:デフォルトの名無しさん
08/07/27 15:29:30
レジストリに
C08AFD90-F2A1-11D1-8455-00A0C91F3880
がないのに、使えるのはなぜ?
177:デフォルトの名無しさん
08/07/28 17:16:08
なぜWSHでwindowsを終了させられないのですか?
178:デフォルトの名無しさん
08/07/28 21:00:13
WSHスクリプトを起動するより、電源ボタンを押すほうが簡単だからかも?
179:デフォルトの名無しさん
08/07/28 21:05:03
>>177
出来るけど、なにか?
180:デフォルトの名無しさん
08/07/28 23:21:04
WMI使ってできるよねぇ。
181:デフォルトの名無しさん
08/07/28 23:50:19
WScript.Echo("電源ボタンを押してください");
182:デフォルトの名無しさん
08/07/29 19:35:52
createobject("shell.application").shutdown
183:デフォルトの名無しさん
08/08/01 10:37:00
フォームの自動入力させているんだけど、
IEじゃなくて、IEコンポーネントつかったブラウザとかソフトに入力する方法って無いですかね。
184:デフォルトの名無しさん
08/08/01 11:17:45
ありますよ。
因みに「どうやるの?」とか「具体的なやり方は?」とか、ネチっこく聞いてこないでで。
ただでさえ暑いんだから。
185:デフォルトの名無しさん
08/08/01 11:24:00
ヒントだけでも教えてもらえないでしょうか?
186:デフォルトの名無しさん
08/08/01 20:42:35 BE:333119243-2BP(802)
>>184
キサマは湘南海岸でプログラミングしてるのかと、小1時間…
187:デフォルトの名無しさん
08/08/01 21:28:43
set o2 = createobject("vb2ch.clsThread")
o2.sage
188:デフォルトの名無しさん
08/08/01 22:03:23
if nothing is nothing then msgbox (nothing is nothing)
189:デフォルトの名無しさん
08/08/01 23:03:27
>>183
EnumWindowsしてWindowの中にInternet_Explorer_Serverクラスがあるか探せばいいと思う
190:デフォルトの名無しさん
08/08/03 03:14:00
191:デフォルトの名無しさん
08/08/03 03:39:35
For Each ObjFile in CreateObject("Scripting.FileSystemObject").getFolder(CreateObject("Wscript.Shell").CurrentDirectory).Files
ObjFile.name = "new" & ObjFile.name
msgbox ObjFile.name
Next
フォルダに2つのファイルがあり、上記を実行します。
Forで2ループしてほしいのですが、4ループします。
なぜですか?
192:デフォルトの名無しさん
08/08/03 03:55:42
ループの中でリネームするから
193:デフォルトの名無しさん
08/08/03 08:07:09
>>191
普通に2回しか回らないぞ (@Windows2000SP4)
194:デフォルトの名無しさん
08/08/03 14:43:26
a ->newa
b ->newb
newa -> newnewa
newb -> newnewb
195:デフォルトの名無しさん
08/08/03 16:47:09
それが起るなら、無限ループになりそうなもんだが。
196:デフォルトの名無しさん
08/08/03 22:38:20
隠しファイルが2つあるとか
197:デフォルトの名無しさん
08/08/03 23:19:39
ファイル名によるんじゃないの?
ファイルのコレクションを得る時内部でどういったソートしてんのか知らんけど。
リネーム後のファイルが、処理済ファイルと未処理ファイルのどちらに振り分けられるかの違い。
経験則でいうと、ファイルコレクションに対してリネーム処理をするといったような場合は
一旦全ファイル名の配列を得るとかして、
その配列に対して、即ち明示的にファイル名を指定してループ処理しなければおかしくなる。
for ... in でコレクションからひとつひとつファイルを取り出しつつリネームしていく、
といったオンザフライな処理では恐らく望んだ結果は得られない。
リネームすることで大元のコレクションの内容がリアルタイムで変わっちゃう感じ。
泥臭いけど俺はいつもこうしてる。
var f1 = objFSO.GetFolder(folderspec);
var f2 = new Enumerator(f1.Files);
var arr = new Array();
for (; !f2.atEnd(); f2.moveNext()) arr.push(f2.item().Name);
var f, i;
for (i = 0; i < arr.length; i++) {
f = objFSO.GetFile(objFSO.BuildPath(folderspec, arr[i]));
f.Name = "new" + f.Name;
}
198:デフォルトの名無しさん
08/08/04 05:15:53
自分もそこでよく悩んだな
ループ中でリネームするとリネーム後のファイルがFilesコレクションに追加されてそのファイルも処理対象になっちゃうんだよな
そして延々と"new"が付加されていく
それ理解するのに時間かかった
199:191
08/08/04 05:24:31
>>192 たしかにリネームしなければ正常です。
>>193-195 回る数は2,3,4と不定ですが、無限はないです。
>>196 隠しファイルはないです。
>>197
>コレクションの内容がリアルタイムで変わっちゃう感じ
特にこの一言でイメージできて分った気がします。
なので頑張ったのですが、どうしてもコードが読めません。
>>197をVBScriptにしてくれないでしょうか?
200:デフォルトの名無しさん
08/08/04 05:47:12
ええええ!?
201:デフォルトの名無しさん
08/08/04 07:07:03
うちも普通に2回しか回らないよ、XP SP3
202:デフォルトの名無しさん
08/08/04 08:10:08
>>199
コード読めなくても、その上で文章説明してるんだから
その通りにVBSで書けば良いだけだろ
ここはPC初心者板ではなくプログラム技術板なので
ここに来る以上、そのくらいは自分でやれなくちゃね
203:デフォルトの名無しさん
08/08/04 11:03:45
「PC初心者板」という言葉を持ち出してくる奴は
この板で有名な基地外の特徴なので
構わなくていいですよ。
204:デフォルトの名無しさん
08/08/04 11:04:03
普通に2回しか回らないね。(XP SP3)
2回以上回ってる人はどんな環境でやってるの?
205:デフォルトの名無しさん
08/08/04 11:11:10
プログラミングに関しては全く初心者なんで、変なこと言ってるかも知れないけど
For Each ObjFile in CreateObject("Scripting.FileSystemObject").getFolder(CreateObject("Wscript.Shell").CurrentDirectory).Files
これって毎回オブジェクト作ってるわけじゃなくて、最初の1回作ったときに
コレクションは出揃ってメモリに書き込まれるというわけじゃないの?
2回以上回る時は内容にアクセスするたびにオブジェクトを作り直してるわけ?
206:デフォルトの名無しさん
08/08/04 15:00:36
For Each ObjFile in CreateObject("Scripting.FileSystemObject").getFolder(CreateObject("Wscript.Shell").CurrentDirectory).Files
If Left(ObjFile.name,3)<>"new" Then ObjFile.name = "new" & ObjFile.name
msgbox ObjFile.name
Next
で、どう?
207:デフォルトの名無しさん
08/08/04 15:03:32
For Each ObjFile in CreateObject("Scripting.FileSystemObject").getFolder(".").Files
208:デフォルトの名無しさん
08/08/04 15:12:10
>2回以上回る時は内容にアクセスするたびにオブジェクトを作り直してるわけ?
作り「直して」るわけ、ではなかろう
209:199
08/08/04 16:48:49
>>202の言う通りですね。
>>199レスでのコード依頼は、躊躇しながらも書いてしまったのですが、
やはり場違いなので取り消します。
さまざまなレスありがとうございます。
210:デフォルトの名無しさん
08/08/04 18:34:22
環境書いておくれよ
211:デフォルトの名無しさん
08/08/04 21:27:00
XPSP2/WSH5.7
上の簡単なリネームで試してみたら2回だったけど
ちょっと前に書いた自分のごちゃごちゃしたリネームのスクリプトだと
なんかリネームしたのが追加された覚えがあるな…
特定のメソッドを使ったりとかでコレクションへの追加が発動するんかな
そのスクリプトもどこかいったから確かめようがないな、ごめんよ
212:デフォルトの名無しさん
08/08/04 22:21:43
For Each ObjFile in Folder.Files
ObjFile.name = "new" & ObjFile.name
msgbox Folder.Files.Count
Next
してみ
213:デフォルトの名無しさん
08/08/04 22:42:35
VBscriptでApplication型のオブジェクトの宣言ってもしかして出来ない?
214:デフォルトの名無しさん
08/08/04 23:01:07
>>212
普通に2が2回表示されたよ
XP SP3
215:デフォルトの名無しさん
08/08/04 23:10:30
>>191
Set Files = CreateObject("Scripting.FileSystemObject").getFolder(CreateObject("Wscript.Shell").CurrentDirectory).Files
For Each File In Files
File.Name = "new" & File.Name
For Each File1 In Files
WScript.Echo File1.Name
Next
Next
ってやると、Files の内容はリアルタイムに変わってる。
でも、外側のループは正常に2回しか回らない。
ファイルをコピーするようにすると、Files はちゃんと増えるけど、
それでも外側のループは最初にあったファイルしか対象にしない。
なので、For Each の In に続く部分は一回しか評価してないみたい。
じゃあと言うことで、ループ中にファイルを削除すると今度は削除
した奴はそ知らぬ顔でスキップする。
う〜む、どうやっても >>191 の4ループは再現しない。
とりあえず、環境と再現した時のファイル名を書いてくれないか。
>>213
VBScript ではそもそも型付の宣言なんかできません。
216:デフォルトの名無しさん
08/08/04 23:14:33
>>213
createobject("Excel.Application")
createobject("Word.Application")
createobject("Autocad.Application")
217:197
08/08/04 23:20:45
>>212
リネームすることでコレクション内のポインタ(moveNext() で動くやつ)の位置に
(恐らく)不整合が出るだけであって、ファイル数自体が増えるわけではないよ。
「(元のファイル名) -> (リネーム後のファイル名) (コレクションの要素数)」という
フォーマットで結果を吐き出すスクリプト。(当方環境:Me/WSH5.6)
var targetDir = "C:\\TEST"; // '1.TXT'、'2.TXT' の2枚のファイルが入っている。
var objFSO = WScript.CreateObject("Scripting.FileSystemObject");
var fo = objFSO.GetFolder(targetDir);
var fc = fo.Files;
var fe = new Enumerator(fc);
var filename = "";
var arr = new Array();
for (; !fe.atEnd(); fe.moveNext()) {
filename = fe.item().Name;
fe.item().Name = "_" + fe.item().Name; ... (a)
//fe.item().Name = "~" + fe.item().Name; ... (b)
arr.push(filename + " -> " + fe.item().Name + " (" + fc.Count + ")");
}
WScript.Echo(arr.join("\n"));
(「改行が多い」と怒られたので結果は次)
218:197
08/08/04 23:21:34
結果:
(a)
1.TXT -> _1.TXT (2)
2.TXT -> _2.TXT (2)
_1.TXT -> __1.TXT (2)
(b)
1.TXT -> ~1.TXT (2)
2.TXT -> ~2.TXT (2)
~1.TXT -> ~~1.TXT (2)
~2.TXT -> ~~2.TXT (2)
~~2.TXT -> ~~~2.TXT (2)
219:デフォルトの名無しさん
08/08/04 23:26:39
varってみるとVARIANT思い出すよ・・・orz
220:197
08/08/04 23:27:50
×fe.item().Name = "_" + fe.item().Name; ... (a)
×//fe.item().Name = "~" + fe.item().Name; ... (b)
○fe.item().Name = "_" + fe.item().Name; // ... (a)
○//fe.item().Name = "~" + fe.item().Name; // ... (b)
行末、コメントアウトするの忘れました。
221:197
08/08/04 23:42:35
他にもいろいろとファイル名とプレフィックスを変えて試してみたけど、
はっきり言って予測不能な振る舞いをします。
今のところ、初期条件(ファイル名とプレフィックス)が同じであれば
何度試行しても結果が再現されている感じです。
222:197
08/08/05 00:23:27
今回はリネーム作業でしたが、例えば Attributes プロパティを変更する処理では
このような問題は発生しませんでした。
223:デフォルトの名無しさん
08/08/05 00:31:31
それって、予測不能って言わないよな
224:デフォルトの名無しさん
08/08/05 00:38:51
そもそも、JScript と vbs じゃ処理が違って当たり前だと思うが。
225:デフォルトの名無しさん
08/08/05 00:52:18
JScriptとVBScriptの処理の違いなんて今誰も問題にしていないが
226:デフォルトの名無しさん
08/08/05 01:05:26
jsとvbsでは結果が違うぞっつー話じゃなくて
jsにしろvbsにしろコレクションのリネーム処理で
おかしなことが起こるぞっつー話だ罠
227:デフォルトの名無しさん
08/08/05 06:52:54
>>217-218
XPじゃ再現しないなー
(a)
1.TXT -> _1.TXT (2)
2.TXT -> _2.TXT (2)
(b)
1.TXT -> ~1.TXT (2)
2.TXT -> ~2.TXT (2)
9xかFATに原因があるって事なのかな
228:デフォルトの名無しさん
08/08/05 08:32:51
理屈が分からんと気味悪いね。
これって有名な不具合なんだろうか。
NT系だと絶対に大丈夫なのかな?
229:デフォルトの名無しさん
08/08/05 20:21:32
WSHとは関係ないけど、Win32APIのFindFirstFileでも同様なことが起こったことがある。
そのときも環境によっておこったりおこらなかったりしたんだが、
同じWin2000でFAT32のドライブとNTFSでFAT32の方だけリネームされた物も引っかかった。
USBメモリ(FAT)でもおこったので、フォーマットの仕様かファイルシステムの問題なのかは
分からないが、とりあえず重複することを前提にしてからそのときは対策した。
230:デフォルトの名無しさん
08/08/05 21:43:30
FATかと思ってフロッピー(USB接続)にファイル置いて>>217を何回かやってみたら
FAT→VFATになるタイミングで発生した!XP SP3
11111111.TXT -> _11111111.TXT (2)
22222222.TXT -> _22222222.TXT (2)
_11111111.TXT -> __11111111.TXT (2)
_22222222.TXT -> __22222222.TXT (2)
__11111111.TXT -> ___11111111.TXT (2)
__22222222.TXT -> ___22222222.TXT (2)
FAT→FATやVFAT→VFATだと発生しなかった。
でも他の環境では再現しないとか普通にありそうだな・・・。
231:デフォルトの名無しさん
08/08/06 00:16:15
>>229
FindNextFile の説明にこんな記述がある。
The order in which this function returns the file names is dependent
on the file system type.
With the NTFS file system and CDFS file systems, the names are usually
returned in alphabetical order.
With FAT file systems, the names are usually returned in the order
the files were written to the disk, which may or may not be in alphabetical order.
However, as stated previously, these behaviors are not guaranteed.
簡単に言うと、
NTFS や CDFS だと大抵アルファベット順になるけど、FAT は書いた順になるよ。
でも、保証なんてしないからね。
と言うことなので、ここら辺の動作がファイルシステムで違うのは仕様と言うことらしい。
232:デフォルトの名無しさん
08/08/06 00:56:08
順番が違うだけなら仕様の一言で納得するけど、
例のリネームし過ぎ現象は仕様としては到底受け容れ難いな。
もはや不具合だ。
そもそもリネームでタイムスタンプは更新されないけどな。
ディレクトリエントリは書き換えるだろうけど。
233:デフォルトの名無しさん
08/08/06 01:14:44
やっぱり一旦配列に書き出すなりした方が無難ってことすかね
めんどいなぁ
234:デフォルトの名無しさん
08/08/06 01:24:00
>>206にしとけ
235:デフォルトの名無しさん
08/08/06 01:24:54
>>232-233
フォルダの内容を取得中にフォルダの中身変えたら取得内容を
保証できないのはある程度理解できる。
システム側で保持しておくと言う方法もあるけど、スゲーたく
さんファイルがあるフォルダの最初の数個を取得したい時に
全部のファイル名を取得されるまで Folder.Files が返ってこ
ないと言うのもちょっと困ったもんだと思う。
236:デフォルトの名無しさん
08/08/06 01:27:53
全然一般性ないじゃん。
第一オリジナルファイル名が「new」で始まらない保証がない。
237:236
08/08/06 01:28:46
>>234宛て、な。
238:デフォルトの名無しさん
08/08/06 01:30:46
>>206=>>234 ダメグラマの典型だろ。
239:デフォルトの名無しさん
08/08/06 01:38:51
一般性が必要か?
240:デフォルトの名無しさん
08/08/06 01:41:58
一般性のある回避策(配列に書き出す)が提示されているのに
「運がよければ通用するかもしれない>>206の方法」に拘泥する理由は?
241:デフォルトの名無しさん
08/08/06 01:49:05
質問者の技術力
242:デフォルトの名無しさん
08/08/06 01:50:57
一般性の有る方法をコーディングするのに
多大なコストがかかるというのなら
とりあえず今だけ通用すればいいという
一般性の無いその場凌ぎな方法を採るのも
場合によっちゃアリだが
今の場合大してコストもかからないからな
243:デフォルトの名無しさん
08/08/06 01:52:27
>>199
244:デフォルトの名無しさん
08/08/06 02:37:31
普通はクラスライブラリからごりごり作っていくもんなの?
俺はコスト度外視日曜な人だから作ってる過程でライブラリが出来ていくって感じなんだけど。
日曜な人だからライセンス度外視で使えるライブラリは使うし。
245:デフォルトの名無しさん
08/08/06 21:31:01
趣味なら何でもアリ、好きなようにやればよろし。
仕事なら、職場やプロジェクトの方針に従えばよろし。
246:デフォルトの名無しさん
08/08/06 22:12:15
WSHのプロジェクトw
247:デフォルトの名無しさん
08/08/06 22:46:37
プロジェクトの成果物が WSH オンリーと言うのは見たことないけど、
一部の成果物が WSH と言うのなら見たことあるぞ。
248:デフォルトの名無しさん
08/08/06 23:37:46
Set ArrayList=CreateObject("System.Collections.ArrayList")
For Each ObjFile in CreateObject("Scripting.FileSystemObject").getFolder(".").Files
ArrayList.Add ObjFile
Next
For Each ObjFile in ArrayList
ObjFile.name = "new" & ObjFile.name
Next
249:デフォルトの名無しさん
08/08/07 02:00:25
System.Collections.ArrayListってなんぞな?
どとねととか言うヤツ?
検索したら一部をvbsでも利用できるのがあるのかぁ
250:デフォルトの名無しさん
08/08/07 02:27:19
vbsで.NETFrameworkを利用できるらしいけど
使えるってこととArrayListの例がちょこっとあるだけで
リファレンス的なものがみつからないんだよなぁ
251:デフォルトの名無しさん
08/08/07 05:31:04
>>250
.NET Frameworkが使えるというよりも、特定の条件を満たしたCOMを
CreateObjectで使えるってだけだから、.NET Framework以外のCOMも
使える物があるし、.NET FrameworkでCOMがHKEY_CLASS_ROOTに
登録されていても使えない物もある。
WSHから扱えるクラスの網羅的な資料が提供されないままPowerShellが
出てきたってことは、MSとしてはPowerShellを使ってほしいんだろ。
252:デフォルトの名無しさん
08/08/07 10:03:48
便利そうなのをちょっと使えるってだけっぽいね。
中途半端な対応は混乱するだけなのに。。。
PowerShellって現在の環境に導入するには
別途インストールしなければならないから導入しづらいんだよな。
253:デフォルトの名無しさん
08/08/07 12:32:46
同じ高さにしてほしいな、WSHとPS
254:デフォルトの名無しさん
08/08/07 18:00:21
vbsでSystem.Collections.ArrayListを使えば自分でせこせこ自作ソートを記述しなくてもいいのか
自分でソート書くのが面倒でjsを使うようになったらjsのオブジェクトがいじりやすくて慣れちゃったよ
255:デフォルトの名無しさん
08/08/07 19:13:52
JScriptの配列は遅すぎて泣けるけどie8で速くなってる?
256:デフォルトの名無しさん
08/08/07 22:43:21
>>255
会社のマシンに IE8 を試しに入れてるんだが、
JScript のエンジンも更新されてるんだろうか?
257:デフォルトの名無しさん
08/08/08 02:39:33
そういう話は一応ある。
スレリンク(win板:206-210番)
URLリンク(www.google.com)スレリンク(win板:206-210番)
URLリンク(www.google.co.jp)
258:デフォルトの名無しさん
08/08/08 21:36:53
すんません、質問です。
スクロールキーがオンの場合、あるキーを入力するスクリプトを組みたいんですが、
オンかオフかWSH上で判断できますか?
259:デフォルトの名無しさん
08/08/08 22:15:33
WSH上で判断することは出来るけど
WSHで判断することは出来ない
つまりCOMを作るか探すかしろってことだ
まぁがんがれ
260:デフォルトの名無しさん
08/08/08 22:55:48
activex.dllはvb.net expressで作ればいいよ
261:258
08/08/08 23:56:28
>>256, 260
どうもありがと。がんばってみます。。。
262:デフォルトの名無しさん
08/08/09 01:03:17
がんばれ。google先生に聞けば1時間でできると思うぞ。
263:デフォルトの名無しさん
08/08/09 18:45:18
System.Collections.ArrayList
はJoinできない?
xJoin(ArrayList)
xArrayList.Join
264:デフォルトの名無しさん
08/08/09 19:24:01
.NET Framework使うならMSDNライブラリくらい参照しようよ。
265:デフォルトの名無しさん
08/08/09 22:48:07
※MSDNライビュラリは有償です
266:デフォルトの名無しさん
08/08/09 22:50:57
>>265
|
|
|
し
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4997日前に更新/94 KB
担当:undef