トップページ⇒tech
1001コメント270KB

WSH(・∀・)スレッド! Part 4

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/05/24(日) 01:22:48
( ´ゝ`) 誰か詳しい情報キボンヌ

●過去スレ
WSH(・∀・)スレッド!
http://pc11.2ch.net/test/read.cgi/tech/1055075469/
WSH(・∀・)スレッド! Part 2
http://pc11.2ch.net/test/read.cgi/tech/1176698934/
WSH(・∀・)スレッド! Part 3
http://pc12.2ch.net/test/read.cgi/tech/1208948450/

●関連スレ
お前ら、wsh使ってますか? Part7
http://pc12.2ch.net/test/read.cgi/win/1190548945/
HTAをもっと流行らせる計画 Part2
http://pc12.2ch.net/test/read.cgi/tech/1220874815/
★WSHでCGI★JScriptVBScript
http://pc11.2ch.net/test/read.cgi/php/1059745064/

●公式サイト
Windows Script
http://www.microsoft.com/japan/msdn/scripting/

●個人サイト
Windows Scripting Host
http://homepage3.nifty.com/aya_js/wsh/index.htm
Windows Scripting Host Laboratory
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/
Windows Script Wiki
http://winscript.s41.xrea.com/wiki/index.php
0153デフォルトの名無しさん2009/10/12(月) 22:32:38
>>152
取得順はソートされない(詳細はFATやNTFSの構造の話になるので省略する)
取得したデータを自前でソートしろ
0154デフォルトの名無しさん2009/10/12(月) 22:50:19
>>152
自前ソートが面倒であれば以下のとちらかで手抜きしろ
・ソート指定したdirコマンドの結果を使う
・basp21のReadDirを利用する
0155デフォルトの名無しさん2009/10/12(月) 23:01:18
>>153-154
ソートするには取得してからでないとダメということですね
ありがとうございます

取得するフォルダの順番というものは決まっているのでしょうか?
対象のフォルダに
20090101
20090102
20090201
20090202
とこのような感じでサブフォルダがありまして
フォルダが読み込まれる順番を調べているのですが
どうも情報がうまくさがせないものでして
echoなどで出しておりますとおそらく昇順だとは思うのですが
明示的にできないか・もしくは昇順であることを裏付ける何かがないかと思いまして
0156デフォルトの名無しさん2009/10/12(月) 23:12:55
ループの処理のあとにsleep10000くらい入れて
処理フォルダ見とけばいいんじゃない?
0157デフォルトの名無しさん2009/10/12(月) 23:19:53
>>155
FATに関して言えば情報格納順であり
ファイルやフォルダ削除/作成により順番が変わる
NTFSについても確実に名称でソートされている訳ではない
環境依存にしたくなければソートしろ
0158デフォルトの名無しさん2009/10/12(月) 23:24:42
>>156-157
ありがとうございます
複雑な内部の問題なんですね…
ソートしてから使いチアと思います。
本当に助かりました
0159デフォルトの名無しさん2009/10/13(火) 00:12:04
横レスですが、
みなさんソートはどうしてますか?
バブルソートが楽ですけど、量が増えると遅くて重くて。
エクスプローラがどんなに大量のファイルがあっても一瞬でソートできるように、
何か便利な方法ないでしょうか?
01601592009/10/13(火) 00:16:54
すんません、>>154で出てた・・・
0161デフォルトの名無しさん2009/10/13(火) 15:32:29
JSciptのArray.sort()でええ
0162デフォルトの名無しさん2009/10/13(火) 15:41:58
CreateObject("System.Collections.SortedList")
0163デフォルトの名無しさん2009/10/14(水) 18:16:19
>>21-25
keybd_eventでシフトキー押しながら
invokeverb "delete"
すればよいよ
0164デフォルトの名無しさん2009/11/08(日) 21:10:28
質問です
vbsで特定ページのソースを取得し、X行目がYという内容と一致するかのチェックをするスクリプトを作りたいのですが
ソース全体を出力する方法はobjIE.Document.Body.InnerHtmlでできるのは分かったんですが
ソース全体の閲覧ではなくソースのX行目がYという文字列と一致するかどうかの分岐を作るのはどうすればいいのでしょうか?
0165デフォルトの名無しさん2009/11/08(日) 21:42:02
>>164
ネタ? どこまで理解できていないのか読み取れない・・・

InStr系関数で改行コードをカウントしてX行目の開始/終了位置を取得
Mid系関数でX行目のデータを取得
If文で分岐

当然ループは使うぞ
0166デフォルトの名無しさん2009/11/08(日) 23:00:09
>>165
分かりにくくてすみません
>InStr系関数で改行コードをカウントしてX行目の開始/終了位置を取得
>Mid系関数でX行目のデータを取得
ここが分かりませんでした

もう少し調べてみます
0167デフォルトの名無しさん2009/11/08(日) 23:58:40
俺ならXMLDOMで全体取ってから
\nでsplitするかな。
0168デフォルトの名無しさん2009/11/09(月) 01:21:37
StrBody = objIE.Document.Body.InnerHTML
lntPos = InStr(1, StrBody, Chr(13), 1)
これの戻り値がどうやっても0になってしまいます
対処法お願いします
0169デフォルトの名無しさん2009/11/09(月) 15:46:51
Chr(13)?
0170デフォルトの名無しさん2009/11/09(月) 15:54:55
>>169
段落コードのつもりなんですが
0171デフォルトの名無しさん2009/11/09(月) 16:38:05
Chr(10)
0172デフォルトの名無しさん2009/11/09(月) 17:26:14
段落コード?
0173デフォルトの名無しさん2009/11/09(月) 17:33:14
HTMLにおける「段落」をめぐって
ttp://www.asahi-net.or.jp/~WQ6K-YN/para.html
0174デフォルトの名無しさん2009/11/09(月) 18:32:24
ソース?
0175デフォルトの名無しさん2009/11/09(月) 19:13:38
>>170
HTMLの段落はそっちでしたか
InStrが返す値が明らかに存在する文字を検索しても0になってしまうのはStrBodyが長すぎるせいなのでしょうか?
長さ制限は無いはずだしStrBodyをためしにechoで出力してみたらちゃんと表示されてるのでStringは収納されてるはずなんですが

>>167
ちょっとこちらも調べて見ます
0176デフォルトの名無しさん2009/11/09(月) 21:58:26
>長すぎるせいなのでしょうか?
それはない
>InStrが返す値が明らかに存在する文字を検索しても0になってしまう
それもない
0177デフォルトの名無しさん2009/11/09(月) 23:21:28
>>176
無いはずなのは分かってるんですけどなぜかそうなってしまうんです
ためしにVBで>>168のIntPosをMsgBoxで出力しようとしてもなぜか0に
0178デフォルトの名無しさん2009/11/10(火) 01:02:57
すみません
IntPos = の部分がうまく変数として認識されていなかったのが問題だった見たいです
解決しました
0179デフォルトの名無しさん2009/11/10(火) 17:02:37
意味不明だが
on error resume next
でも使ってんのか?やめとけ
option explicit
は使っとけ
0180デフォルトの名無しさん2009/11/16(月) 22:17:29
ttp://d.hatena.ne.jp/hasegawayosuke/20091028/p1
0181デフォルトの名無しさん2009/11/17(火) 15:03:31
いみふ
結局使えないんだろ?
0182デフォルトの名無しさん2009/11/18(水) 20:01:43
以前は
cscript //e:jscript -
が使えたが
0183デフォルトの名無しさん2009/11/18(水) 22:00:30
?

>cscript //e:jscript -
WScript.Echo(WScript.Version);
^Z
5.7
0184デフォルトの名無しさん2009/11/22(日) 15:42:09
>cscript //e:jscript -
入力エラー: スクリプト ファイル "-" が見つかりません。
0185デフォルトの名無しさん2009/11/25(水) 02:05:32
>cscript //e:jscript con
WScript.Echo(WScript.Version);
^Z
5.7
0186デフォルトの名無しさん2009/11/26(木) 12:03:39
レンホウ「こんなロボット作って、なんになるんです?」
0187デフォルトの名無しさん2009/11/26(木) 18:04:00
ロボットになるんです
0188デフォルトの名無しさん2009/11/28(土) 17:39:05
>cscript //e:jscript con
CScript エラー: Windows Script Host の実行に失敗しました。 (この操作を完了するの
に十分な記憶域がありません。 )
0189デフォルトの名無しさん2009/11/28(土) 19:47:24
純粋なあの頃は仕事で追い詰められて自殺なんて都市伝説だと思ってたけど
今じゃ知り合いの失踪も自殺も体験した
0190デフォルトの名無しさん2009/12/02(水) 10:59:46
正規表現が文法的に正しいかどうかを判別する方法はありませんか
括弧が足りないとか教えてくれなくていい
スクリプトが異常終了しないでtrueかfalseを返してくれればいい
0191デフォルトの名無しさん2009/12/02(水) 18:48:37
try catch
0192デフォルトの名無しさん2009/12/02(水) 19:26:27
>>191
駄目だった
try {var re = /asd(fgh/;}
catch(e){WScript.echo("error");}
0193デフォルトの名無しさん2009/12/02(水) 19:36:59
RegExp.compile
0194デフォルトの名無しさん2009/12/02(水) 19:58:42
>>192
RegExp
0195デフォルトの名無しさん2009/12/05(土) 00:05:02
wshで
var n=/a]b/;
と打ったらエラーが出ませんでした。他の括弧ならエラーが出ます。
エスケープ無しの右かぎ括弧ってなにか特別な意味はありますか?
この場合は、"a]bと続く三文字"と解釈して大丈夫なんですか?
0196デフォルトの名無しさん2009/12/05(土) 14:20:01
ためせば?
0197デフォルトの名無しさん2009/12/13(日) 13:23:44
Excel2003と2010が共存している環境で
WSHを使うことで両者を使い分けようとしています。
参考 : http://www.drk7.jp/MT/archives/001226.html

RegRead("HKEY_CLASSES_ROOT\\CLSID\\{00024500-0000-0000-C000-000000000046}\\LocalServer32\\").replace(/ \/[^ \/]+/g, '')
で、Excel 最新版(最後にインストールしたもの?)のパスは得られるのですが、古い方のパスを得られません。

何か良い方法はないでしょうか?
0198デフォルトの名無しさん2009/12/13(日) 13:24:56
今は決めうちで、「C:\Program Files\Microsoft Office\*\EXCEL.EXE」の * の部分を変えて存在確認をとって処理しています。
* の部分は、
Office2010 : office14
Office2007 : office12
Office2003 : office11
Office2002 : office10
Office2000 : office9
Office97 : office8
Office95 : office
であっているでしょうか?
よろしくお願いします。
0199デフォルトの名無しさん2009/12/13(日) 19:27:38
ttp://support.microsoft.com/kb/234788/ja
0200デフォルトの名無しさん2009/12/15(火) 18:19:27
EXCEL.EXEを検索してFileVersionで判定すべき
0201デフォルトの名無しさん2009/12/23(水) 00:00:12
Office2010ってもう発売されてるんだ.....
0202デフォルトの名無しさん2009/12/23(水) 14:44:53
さあ
0203デフォルトの名無しさん2009/12/23(水) 14:50:06
office13は?
0204デフォルトの名無しさん2009/12/24(木) 09:35:19
スレちがい
0205デフォルトの名無しさん2010/01/13(水) 18:31:33
お願いだから教えてください。スレ違いかも知れないけどPower Shellスレないみたいだし・・

Windows Power Shell(2.0)でIEを起動してマウスクリックをエミュレートさせようとした場合、Win32API(mouse_event)を使うと思うんですが
DllImport("usr32.dll",Charset=Charset.Auto)でCharset = ←の=の後がどうとかいって、実行できません。Charsetのくだりを全削除すると今度は予期しない属性と出てしまいます。

mouse_eventにこだわりはないんですが
IEを立ち上げ
マウスクリックをエミュレートする

処理を教えてください。APIなら宣言部もお願い;;

0206デフォルトの名無しさん2010/01/13(水) 18:37:51
205ですけど

座標とかハードコーディングで大丈夫ですので肝を簡潔にお願い;;
0207デフォルトの名無しさん2010/01/13(水) 23:40:26
スレちがい
Windows PowerShell 2.0 Part2
0208デフォルトの名無しさん2010/01/14(木) 00:07:23
普通はDOM使うんじゃなかろうか、いや知らんけど
0209デフォルトの名無しさんNGNG?PLT(23400)
>>207
URLも貼ってあげなよ

http://pc12.2ch.net/test/read.cgi/win/1261106064/
0210デフォルトの名無しさん2010/02/22(月) 21:41:34
次のように Folderオブジェクトの SubFolders でFolderコレクションを取得したとして、

 Set c = folder.SubFolders

これを For Each ではなくて以下のように For で処理したいです。

 For i = 0 To c.Count
  :
 Next

このループの中で、i 番目のアイテムを取得するにはどうしたらよいでしょうか?
c(i) でも c.Item(i) でもダメでした。
0211デフォルトの名無しさん2010/02/22(月) 21:44:18
c.Items(i)
02122102010/02/22(月) 21:50:27
それだと
オブジェクトでサポートされていないプロパティまたはメソッドです。:'c.Items'
です。
ちなみに、c.Item("Test") みたいに、実在するフォルダ名を与えればフォルダオブジェクトは取って来れます。
それじゃ意味無いですが。
0213デフォルトの名無しさん2010/02/22(月) 22:06:18
c(i).Value
c(i).Item()
02142102010/02/22(月) 22:17:28
>>213
プロシージャの呼び出し、または引数が不正です。
0215デフォルトの名無しさん2010/02/22(月) 23:29:43
Shell.Application の FolderItems のほうを使ったら?
0216デフォルトの名無しさん2010/02/25(木) 21:55:47
配列に入れて使え
0217デフォルトの名無しさん2010/02/25(木) 22:13:00
For i = 0 To c.Count
j=0
 For Each f In c
If j=i Then Exit For
j=j+1
 Next
MsgBox f
Next
0218デフォルトの名無しさん2010/02/25(木) 22:55:24
番号は使えないみたいだな
ItemクリックしたらDictionaryに飛んだ

ttp://msdn.microsoft.com/en-us/library/9kcx47hd%28VS.85%29.aspx
0219デフォルトの名無しさん2010/03/01(月) 21:36:27
test
0220デフォルトの名無しさん2010/03/05(金) 12:44:09
WMI使ってリモートPCのIP変更したいんだが、変更後にRPCエラー待ちが発生して自動処理が難しい。
エラー待ちを無視するとか、なんかいい方法知ってる人がいたら助けて。

On Error Resume Next

strComputer = "10.1.1.1"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

For Each objNetAdapter in colNetAdapters
errEnable = objNetAdapter.EnableDHCP()
Next
0221デフォルトの名無しさん2010/03/12(金) 19:00:04
素朴な疑問なのですが・・・
JScriptの変数の宣言(var文)って書いても書かなくても動きますが
どちらが推奨されますか?
0222デフォルトの名無しさん2010/03/12(金) 20:20:27
>>221
書いた場合と書かない場合は意味が違う
宣言時にはできるだけ書くべきと思う
--------------
a = 10;
function foo() {a = 20;}
foo();
WScript.Echo(a);
--------------
結果:20
--------------
var a = 10;
function foo() {var a = 20;}
foo();
WScript.Echo(a);
--------------
結果:10
02232212010/03/14(日) 04:11:27
>>222
なるほど。そう言う違いがあるのですか・・・
ありがとうございました
0224デフォルトの名無しさん2010/03/20(土) 12:34:38
varといえば

var a = 10;
var a;

で、aがundefinedになると思い込んでいて
はまりかけたことがあった。
0225デフォルトの名無しさん2010/04/05(月) 23:24:20
バッチファイルからWSHを呼び出す際、
バッチからサブルーチン呼出すみたいにパラメータ渡すことは可能ですか・
0226デフォルトの名無しさん2010/04/05(月) 23:52:43
>>225
可能
渡されたパラメタはWScript.Argumentsで参照できる
0227デフォルトの名無しさん2010/04/06(火) 00:13:23
有難う御座います!
0228デフォルトの名無しさん2010/04/09(金) 10:28:58
WSHの何か良いリファレンスブックみたいなのってありますか?
言語は何の奴でもまぁ使えると思うんで何でも良いんですが
0229デフォルトの名無しさん2010/04/09(金) 11:49:47
Scripting Guide 2000
02302282010/04/10(土) 01:11:59
すいません、日本語の書籍でお願いしますorz
0231デフォルトの名無しさん2010/04/10(土) 01:32:23
>>230
初心者なら scd56jp.exe 内の script56.chm だけで良くねぇ?
02322282010/04/10(土) 02:27:18
>>231
おお、これは凄い便利ですね。
ありがとうございます、凄い役にたちそうなんで嬉しいんですが
オフラインで使える本も、それはそれで欲しいです。
書籍の持ち込みは可能だけどデータの持ち込みは厳しい場所に持ち込みたいので。
0233デフォルトの名無しさん2010/04/10(土) 11:33:33
公式のヘルプを知らなかったって…
0234デフォルトの名無しさん2010/04/17(土) 11:37:25
VWD2005でVBSのコード補完してくれるらしいから
インストールしたけどVBSは全く補完してくれないよ。
かんか設定必要?
0235デフォルトの名無しさん2010/04/24(土) 04:06:49
CoInitialize は呼び出されていません。
こういう場合はどうすれば?
0236デフォルトの名無しさん2010/04/25(日) 18:46:06
CoInitialize を呼び出せば?
0237デフォルトの名無しさん2010/04/29(木) 21:04:56
ちょっと教えてください。

Wshからバッチファイルを呼び出す事は可能ですか?
0238デフォルトの名無しさん2010/04/29(木) 22:01:02
ちょっと教えてください。

WshからCoInitializeを呼び出す事は可能ですか?
0239デフォルトの名無しさん2010/04/29(木) 22:53:38
COMを挟めば可能
0240デフォルトの名無しさん2010/04/29(木) 22:59:32
COMが呼べるってことは既にCoInitializeされてることを意味するので無意味
0241デフォルトの名無しさん2010/04/30(金) 00:39:11
意味しないよ
0242デフォルトの名無しさん2010/05/01(土) 18:16:08
explorerのnavigation paneのshow/hideはshowbrowsebarでできないのか?
0243デフォルトの名無しさん2010/05/01(土) 21:52:27
セキュリティ対策だから無理だろ
0244デフォルトの名無しさん2010/05/28(金) 18:03:17
Windowsスクリプティング環境比較:PowerShell vs WSH
http://www.atmarkit.co.jp/fwin2k/operation/pshvswsh/pshvswsh_01.html
>Windows XPがリリースされ、先日Windows Vistaがリリースされるまで何年も経過したにもかかわらず、
>WSHのバージョンはVer.5.6からVer.5.7へとマイナー・バージョンアップにとどまっている。
>実はWSHは今後メジャー・バージョンアップされない運命にあるのだ。

バージョンアップされないってホント?
0245デフォルトの名無しさん2010/05/28(金) 22:30:32
うそ
0246デフォルトの名無しさん2010/05/28(金) 22:47:28
>>244
なんか困るの?
つか、他の手段への以降してるんじゃないの?
0247デフォルトの名無しさん2010/05/28(金) 22:50:33
移行だね。
0248デフォルトの名無しさん2010/05/29(土) 16:07:55
バージョンアップしなくてもよいからインラインスクリプトをサポートしてほしいな
0249デフォルトの名無しさん2010/05/29(土) 21:25:33
exec("cmd",0) も
0250デフォルトの名無しさん2010/06/14(月) 11:44:46
質問です。
例えば、sample01.exeという単一ファイルに対して、コンテキストメニューでavast!の"検査(S) sample01.exe"を実行することは
FolderItems→FolderItem→InvokeVerbでできます。
一方、ファイルが複数選択された状態では、コンテキストメニューは、"選択した領域のウィルス検査(S)"となり、
これを実行すると選択された全てのファイルに対してまとめて処理が行われます。
この例のようにファイルを複数選択した状態で、"選択した領域のウィルス検査(S)"をWSHで実行するにはどうすればよいですか?
0251デフォルトの名無しさん2010/06/14(月) 15:20:04
set items=folder.items
items.filter SHCONTF_NONFOLDERS,"*.exe"
items.invokeverbex "選択した領域のウィルス検査(S)"
0252デフォルトの名無しさん2010/06/14(月) 15:22:56
ashQuick.exeを呼べばいいんじゃないの
■ このスレッドは過去ログ倉庫に格納されています