WSH(・∀・)スレッド! Pa ..
[2ch|▼Menu]
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
 |
 |
 |
 し


267:デフォルトの名無しさん
08/08/10 12:32:36
>>263
Join出来るよ

268:デフォルトの名無しさん
08/08/10 14:01:35
出来た!

269:デフォルトの名無しさん
08/08/10 21:34:48
System.Collections.ArrayList
のソートで比較関数をVBScriptで作れない?
ArrayList.Sort GetRef("compare")
はダメだった

270:デフォルトの名無しさん
08/08/11 05:34:14
vbsの変数名の最後につける型を指定するやつ(&H20&の末尾の&とか)の種類の一覧がどこにあるか知りませんか?
どういう単語で検索すればいいのか漠然としすぎて分かりません

あとこのURLの「[地域のプロパティ] の設定値」ってなんですか?
URLリンク(msdn.microsoft.com)


271:デフォルトの名無しさん
08/08/11 14:58:31
>vbsの変数名の最後につける型を指定するやつ
vbsにはない。すれっち

272:デフォルトの名無しさん
08/08/11 15:06:32
>型を指定するやつ
型を指定する文字

273:デフォルトの名無しさん
08/08/11 20:55:23
最後じゃなくって最初じゃないの?

274:デフォルトの名無しさん
08/08/11 21:25:08
>>270
前者は271も言ってる通りVBSには明示的な型というもの自体が存在しないが
VBやVBAに関してなら「型宣言文字」でググれ

後者は、例えば数値の表示形式で、3桁カンマ区切りをするか否かというオプションの場合
vbTrue→地域のプロパティの設定値に関係なく区切る(123,456,789.00)
vbFalse→地域のプロパティの設定値に関係なく区切らない(123456789.00)
vbUseDefault→地域のプロパティの設定値が「区切り有り」なら区切る、「区切り無し」なら区切らない

>>273
最初に付けるのは型を「指定」しているのではなく、型を「任意に明示」してるだけ
「指定」ではなく、しかも「任意」なので
Dim intHOGE As String
なんてことも出来る
これは「プレフィックス」で、上記intはハンガリアン記法での一般的なInteger型のプレフィックス
つまりInteger型のプレフィックスを付けておきながらString型を指定することが出来るわけだ

275:デフォルトの名無しさん
08/08/11 21:41:43
>>274
ごめ ちゃんと読んでなかったわ

276:デフォルトの名無しさん
08/08/13 18:29:26
CIM_DataFileクラスを用いて、ファイルの各種情報を取得したいのですが、
「説明」のプロパティを取得するときに指定するプロパティ名が分かりません。

具体的には、例えばソリティア(C:\WINDOWS\system32\sol.exe)を
右クリックして表示されるプロパティの「バージョン情報」タブの2行目に
「説明:Solitaire Game Applet」と表示されますが、この値を取得したいのです。

ファイルバージョンなどは、「Version」プロパティで取得できております。
ご存知の方、ご教示お願い致します。

277:デフォルトの名無しさん
08/08/14 02:40:13
プレフィクスだったらMSDNにのってるよ
mk:@MSITStore:C:\Program%20Files\Microsoft%20Visual%20Studio\MSDN98\98VS\1041\vbcon98.chm::/Html/vbconconstantvariablenamingconventions.htm


278:デフォルトの名無しさん
08/08/14 04:43:23
>>277
そんな話は誰もしてないw

279:デフォルトの名無しさん
08/08/14 10:27:49
>>278
>>270
よく読め文盲

280:デフォルトの名無しさん
08/08/14 13:34:45
.NETのコンストラクタやスタティックメソッドは呼べないのか

281:デフォルトの名無しさん
08/08/14 13:57:47
ActiveXPosh使えばー?

282:デフォルトの名無しさん
08/08/15 19:25:16
>>276
確かにMSDNとかにはプロパティ名書いて無いね。
どうりでこのスレの住人でも即答できない訳だ。

283:デフォルトの名無しさん
08/08/15 22:01:03
ggle VersionInfo Description

284:デフォルトの名無しさん
08/08/15 22:03:50
つfilever.exe

285:デフォルトの名無しさん
08/08/15 22:09:36
shell.applicationのextendedpropertyで取れるお

286:デフォルトの名無しさん
08/08/25 19:37:01
割り算をして小数点が出てきたときに
繰り上げるにはどうしたらいいんでしょうか?
x = 100/3
だとxが33.33333となってなるところを
繰上げて34になるようにしたいのですが

287:デフォルトの名無しさん
08/08/25 20:50:45
>>286
xと、xを切り捨てた値を比較して、xが小さければ1を足す

288:デフォルトの名無しさん
08/08/25 21:06:25
JScript で言うと、xと xを繰り上げた値を比較して、xが小さければ繰り上げる。

289:デフォルトの名無しさん
08/08/25 21:34:16
-Int(-x)

290:デフォルトの名無しさん
08/08/25 23:05:35
Math.ceil

291:デフォルトの名無しさん
08/08/27 11:54:53
>>286
0.9を足して切り捨て。

292:デフォルトの名無しさん
08/08/27 11:55:54
ああ、四捨五入と違って33.01も切り上げするならダメか。

293:デフォルトの名無しさん
08/08/27 12:16:41
VBScriptでウェブページを取得したいのですが
mixiのような感じで、ユーザー名やパスワードが必要な場合はどうすればいいんでしょうか?
いろいろググってみたのですが、検索ワードが悪いの見つける事が出来ませんでした・・・

294:デフォルトの名無しさん
08/08/27 13:42:12
無理

295:デフォルトの名無しさん
08/08/27 18:06:49
もともと無理だったんですか・・・・
一番簡単なものだと何で出来ますか?jscriptでもやっぱり無理なんでしょうか?

296:デフォルトの名無しさん
08/08/27 18:53:35
Dim mixi, email, password
Dim ie, document, form

mixi = "URLリンク(mixi.jp)"
email = "null@po.com"
password = "nullpo"

Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate(mixi)
Do While ie.Busy
    WScript.Sleep(1000)
Loop

Set document = ie.Document
Set form = document.forms("login_form")
If TypeName(form) = "Nothing" Then WScript.Quit()
form("email").value = email
form("password").value = password
form.submit()

297:デフォルトの名無しさん
08/08/27 19:16:58
---------------------------
Windows Script Host
---------------------------
スクリプト: C:\296.vbs
行: 15
文字: 1
エラー: エラーを特定できません
コード: 80004005
ソース: (null)

---------------------------
OK
---------------------------

さすがVistaだ。なんともないぜ!

298:デフォルトの名無しさん
08/08/27 19:43:47
Do While ie.Busy Or ie.ReadyState<>4

299:デフォルトの名無しさん
08/08/27 20:11:00
なんか忘れてた気がしたけどReadyStateか
あとNothingの扱いをちゃんと調べたことないしIsNothingとかないからNothingの判定がよくわからんかった
If form Is Nothing Then WScript.Quit()
でいいんだな

300:デフォルトの名無しさん
08/08/27 22:08:51
>Quit() とか
VBScriptなのに

301:293
08/08/28 10:44:50
レスありがとうございます

>>296
IEを使えば出来るんですね!
使わないではやっぱり無理なんでしょうか?


302:デフォルトの名無しさん
08/08/28 11:09:26
無理じゃないよ
スレ違い(WSHではなくActiveX汎用コンポーネントの話)になるので詳しくは伏せるけど

303:デフォルトの名無しさん
08/08/28 16:56:19
CreateObject使うのはスレ違いだって?

304:デフォルトの名無しさん
08/08/29 17:21:52
>>296はIEスレてなもんだな

305:デフォルトの名無しさん
08/08/31 18:04:45
unix系のシステムでもWSH使えたら良いのにネ。
bashよか使い勝手が良い。

306:デフォルトの名無しさん
08/08/31 18:20:08
UNIXならrubyあたりでいいじゃん。なんでそこでbashが出てくるの?
bashと比較するんならcmdとかPowerShellとかだろ。

307:デフォルトの名無しさん
08/08/31 18:35:38
わざわざインストールが必要な ruby なんか全然
お呼びでないので、巣から出て来るなよ。

308:デフォルトの名無しさん
08/08/31 19:41:27
>>305
なんでbashの替わりがWSHなの???意味が分からん

309:デフォルトの名無しさん
08/08/31 20:15:54
代わりにならないからぼやいてるんだろ。
意味わからんのならレスしなきゃいいのに。

310:デフォルトの名無しさん
08/08/31 20:28:22
bashは主にUNIX系OSで使われているシェルのひとつ。
WindowsではコマンドプロンプトやPowerShellに相当。

代わりになるわけがないのに、ぼやく意味がわからん

311:デフォルトの名無しさん
08/08/31 20:37:31
とりあえず>>305がunix系システムをろくに使いこなせていないことは解った。


312:デフォルトの名無しさん
08/08/31 21:29:37
>>310
> 意味わからんのならレスしなきゃいいのに。

# cmd.exe と bash を比較してる時点でアホ丸出しだし。

313:デフォルトの名無しさん
08/09/02 10:37:33
よくわからんけど、>>305はシェルスクリプトって言いたかったのかも

314:デフォルトの名無しさん
08/09/03 12:14:55
Sendkeysを並べてWindows Vistaを自動的に操作するスクリプトを書いてるんですが、
UACのダイアログが出るとそこで終わっちゃうんです。
「実行するにはあなたの許可が必要です」ってダイアログに対して {LEFT}{ENTER} とか %c って書いても
ボタンを押してくれません。
どうすればいいのか、だれか教えてください。

315:デフォルトの名無しさん
08/09/03 12:59:22
>>314
UACを無効にしておく

316:デフォルトの名無しさん
08/09/03 13:18:31
>>315
UACを切らずに済む方法はないでしょうか?

317:デフォルトの名無しさん
08/09/03 13:36:29
スクリプトを動かし始める前に昇格しておく。

318:デフォルトの名無しさん
08/09/03 20:00:51
>>314 .sendkeys "{space}"

319:デフォルトの名無しさん
08/09/03 22:21:54
>>317-318
ありがとうございます。明日、出社したら調べてみます。


320:デフォルトの名無しさん
08/09/05 16:27:42
やってみましたが {SPACE} はエラーになりました。そういうキーワードはなさそうです。
昇格は勉強中です。難しいです。

321:デフォルトの名無しさん
08/09/05 17:26:59
>>320
これが参考になると思う。
URLリンク(technet.microsoft.com)
URLリンク(face-products.com)

322:デフォルトの名無しさん
08/09/05 18:15:21
.sendkeys " "

323:デフォルトの名無しさん
08/09/07 19:26:28
スクリプトってこれ最悪だな。
使ってないけどたぶん.NETも同じなんだろうな

324:デフォルトの名無しさん
08/09/07 19:34:41
発端はJavascriptなんだからしょうがない。

325:デフォルトの名無しさん
08/09/07 20:57:03
>>323
いやいや.NETを一緒にするな。
あれのダメさはまた別物。

326:デフォルトの名無しさん
08/09/17 10:08:29
WSH使いの視点で見るとIronPythonとかIronRubyってどうなん?

327:デフォルトの名無しさん
08/09/17 10:47:28
ActivePythonではなくIronPythonならWSHとは全く関係ないものなので
「WSH使い」の視点からは視野外だ

もちろん「WSH使い」でもWSH以外を使う人はいっぱい居るから
個々の視点ではいろんな意見があるだろうが、それは「WSH使い」の視点ではないからな

328:デフォルトの名無しさん
08/09/28 02:16:01
すいませんWSHの質問です。
IEのテキストボックスに値を入力したいんですが、
そのテキストボックスはたくさんあってtbox[0].priceからtbox[100].priceまであるんです。
IE.Document.form.tbox[0].price.value = "100"とやると、オブジェクトがありませんという実行時エラーになってしまいます。
普通のテキストボックス名(tbox1)とかなら大丈夫でした。
テキストボックス名がピリオドで区切られているのですが、そういう場合なにか工夫がいるのでしょうか?
こういう場合どうすればできるでしょうか?
よろしくお願いします。

329:デフォルトの名無しさん
08/09/28 14:00:19
言ってることがいまいちピンとこない。
エラーになる最小のソースを晒せ。

330:328
08/09/28 17:19:12
>>329
すいません。お願いします。
HTML
<html>
<body>
<input name="tbox[0].price" type="text" value=""/>
<input name="tbox[1].price" type="text" value=""/>
<input name="aaa" type="text" value=""/>
</body>
</html>

WSH
IE.document.form.tbox[1].price.value = "100"
とやると実行時エラーで "1"というオブジェクトがありませんというようなエラーが出ました。
IE.document.form.aaa.value = "100"
とやるとaaaのテキストボックスに正しく100が入力されます。

最終的にやりたいのはテキストボックスがいっぱいあるのでFOR文でまわして全部に入力したいです。
ちょっと今ソースがみれないのでわかりづらいかも知れないですが、よろしくお願いします。

331:デフォルトの名無しさん
08/09/28 18:15:25
今朝のことです。

ブラウザを操作するスクリプトが暴走して、
IEとWScript.exeが無限起動してたwwww
ブラクラwwwwwwww

332:デフォルトの名無しさん
08/09/28 19:31:24
>>329
<input name="tbox[0].price" type="text" value=""/>
<input name="tbox[1].price" type="text" value=""/>
↑のname要素の書き方の場合、"tbox[0].price"という名前の要素を定義していることになる。
"tbox[0].price"というname要素と"tbox[1].price"というname要素の間にはまったく関連性はない。
そもそも"tbox[0].price"という書き方をしたところで勝手に配列オブジェクトになりはしない。

× IE.document.form.tbox[1].price.value = "100"
○ IE.document.form.["tbox[1].price"].value = "100" ←つまりこういうアクセスの仕方をしなければならない。

いまのままで何とかループをまわしたいなら、↓みたいなやり方になる。
for ( var i = 0; i < 100; i++ ) {
IE.document.form.["tbox[" + i + "].price"].value = "100";
}

333:デフォルトの名無しさん
08/09/28 19:43:02
この糞スレがはじめて世の中の役に立った瞬間に立ち会えたww

334:デフォルトの名無しさん
08/09/29 02:29:31
全部同じnameをふってgetElementsByNameで配列を得てから回すんだ!

335:デフォルトの名無しさん
08/09/29 02:32:11
>>333
このスレがグルジアでの米ロ軍事衝突を食い止めてたの知らないなんて
どんだけにわかなんだよ

336:デフォルトの名無しさん
08/09/29 20:22:48
>>335
米ロが衝突とかどうでもイイからさ、
インストール済のWindowsコンポーネントの一覧をテキストファイルに落とす方法を教えてくれよ。

いや教えてください。お願いします。この通りです。

337:デフォルトの名無しさん
08/09/29 21:54:22
Windowsコンポーネント?
その中でWSHから使えるのなんて極一部(ActiveXコンポ)だぞ

ActiveXコンポのみなら、各種オブジェクトブラウザで一覧出来るので
リスト取得ツールでも使ってテキストに落とせば良い
WSHから使えないものも含めて、Windowsコンポ全てを網羅したいならスレ違い

スクリプトで取得したいなら、レジストリを嫁
レジストリの内容取得は、WshShell使う方法はWSHヘルプに載ってるし
WMI使う方法なら、そこら辺にサンプルがごろごろ転がってる
レジストリの内容解釈に付いてはスレ違いなので伏せる

338:デフォルトの名無しさん
08/09/29 22:06:02
ちっがああああぅw

コンパネの[プログラムの追加と削除]から[Windowsコンポーネントの追加と削除]って
選べるでしょ。あれの一覧。IISとかインストールするのに使うでしょ。

あの中から、どんなコンポーネントが選べるのか、
実際にインストールされているのはどれなのか?を
テキストファイルに吐き出したい。それだけ。

米ロが衝突する前に教えてほしい。君の1レスが世界を救うんだ、頼む!

339:デフォルトの名無しさん
08/09/30 00:01:49
質問とは関係ないけどVistaだとこんなのもできた。

Set sh = WScript.CreateObject("Shell.Application")
Set cpl = sh.NameSpace(3)
For Each i in cpl.Items
If i.Name = "プログラムと機能" Then
For Each j in i.GetFolder.Items
s = s & j.Name & vbNewLine
Next
End If
Next
MsgBox s


340:デフォルトの名無しさん
08/09/30 17:49:44
If i.Name = "プログラムと機能" Then msgbox i.path
してみて、次からsh.NameSpace()に指定すればいいんじゃない?

341:デフォルトの名無しさん
08/09/30 21:05:19
Wscript.CreateObject("WindowsInstaller.Installer")


342:デフォルトの名無しさん
08/09/30 21:15:48
おい、おまえらXPでも動くようなのを書けよ
小出しにするなまとめろ

343:デフォルトの名無しさん
08/09/30 22:19:33
ていうかコンパネの一覧表か
要らんわ

344:デフォルトの名無しさん
08/09/30 23:29:48
ほう助33世

345:デフォルトの名無しさん
08/09/30 23:49:30
>>340
なるほろ!Pathか。
ParseName("プログラムと機能") しても引っ掛からなかったんで廻してしまったよ。

Set cpl = WScript.CreateObject("Shell.Application").NameSpace("::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{7B81BE6A-CE2B-4676-A29E-EB907A5126C5}")
For Each i in cpl.Items
s = s & i.Name & vbNewLine
Next
MsgBox s


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4997日前に更新/94 KB
担当:undef