WSH(・∀・)スレッド! Part 2 at TECH
[2ch|▼Menu]
[前50を表示]
550:デフォルトの名無しさん
08/01/05 00:38:59
コントロールパネルの電源
休止状態でOK

551:デフォルトの名無しさん
08/01/05 02:46:07
CPU使用率がとれるとかとれないとか

552:デフォルトの名無しさん
08/01/05 02:49:11
あとDATが定期更新されてるんじゃね

553:デフォルトの名無しさん
08/01/05 20:52:09
HTMLファイル内にWSH(拡張子.vbs)を埋め込んで、ブラウザから機能を実行する事は出来ませんか?
WSH HTML 等で検索してみたのですが、イマイチそういうことを紹介しているページが
見つかりません。

もしくは.vbsファイルの内容をテキストコピーして、 HTMLファイル内に貼り付けて
そのコードを実行させるとかそういうことは出来ませんか?

554:デフォルトの名無しさん
08/01/05 21:02:44
???良く分からないんだけど、HTAみたいなのを望んでるのかな。

とエスパーしてみる。

555:デフォルトの名無しさん
08/01/05 21:09:43
ちなみに、WSH関係なく単にVBScriptを書きたいだけなら、
JScript同様、script要素の中に書けるぞ。現状ではIE限定になるが。

556:デフォルトの名無しさん
08/01/05 22:39:11
できません。そんなことできたらずぼずぼの脆弱性だ

557:デフォルトの名無しさん
08/01/05 22:48:54
>>555
<script language="VBScript">
<!--
MsgBox "ハロー"
<--!
</script>

↑みたいな感じでHTMLで実行させる事についての詳細が知りたいのですが、
>>556が言っているように出来ないのでしょうか?
ブラウザでそういうことしたいならJava Scriptとか書くしかないのでしょうか?
でも >>555はできるって言っているし、どういうことなのん???

558:デフォルトの名無しさん
08/01/05 22:57:03
それはWSHではなく、VBScriptだろ

559:デフォルトの名無しさん
08/01/05 23:03:41
>>553
>WSH(拡張子.vbs)
このあたりに勘違いを感じる

560:デフォルトの名無しさん
08/01/05 23:47:11
>>557
それくらいは555に書いてあるとおり可能。languageよりtype使えな。

>>556
ネットワーク上に置いてあれば、
FileSystemObjectなどはセキュリティゾーンに従って制限を受ける。
JScriptで自由に使えたXMLHTTPなどはVBScriptでも同様に使える。

いずれにせよWSHは関係なくスレ違い。よそ行け。

561:デフォルトの名無しさん
08/01/06 03:55:36
WSHとIEは一応は別物

が、実際にHTMLでVBScriptが使用される事はまず無い。

VBとVBSも当然違うので
VBSの話がまともに扱われるのは
ここかお前らスレかHTAスレぐらいのものだろう

WSHもIEもHTAもスクリプトが実装されているモジュールは
完全に同一の物。
WSHのマニュアル、と言われているものも実際には
必ずしもWSHのマニュアルではなくWindowsスクリプト、
についてのマニュアル

562:デフォルトの名無しさん
08/01/06 05:30:06
残念、ハズレ

563:デフォルトの名無しさん
08/01/06 09:31:30
>>553 >>557
VBScript HTML で検索したらいいと思うよ。
既に言われてるようにWSHは関係ないので
WSH HTML では見つからないでしょ。

564:デフォルトの名無しさん
08/01/06 12:34:40
unko deta
kimochi ii

565:デフォルトの名無しさん
08/01/06 19:45:03
レジストリエディタを起動すると右側に"名前", "種類", "データ" と標示されますよね。
指定したレジストリキー以下の"名前"を全てフルパスで返して欲しいのですが
どのように記述すれば良いのでしょうか?

Set objShell = WScript.CreateObject("WScript.Shell")
ret = objShell.RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\VIDEO\*")
のようにしても、VIDEO\ 以下の名前の部分のパスは帰ってきませんでした。(何も帰ってこない)
かといって 最後の * を削除しても結果は同じで何も帰ってきませんでした。
On Error Resume Nextを上のほうに書いてあるからエラーにはなりませんが・・・。

やりたい事は、それによってフルパスが得られるなら、For Each文で全てのデータを覗いて
指定した文字列が含まれているかどうかをInStr関数等で検索すると言う事です。
よろしくお願いします。

566:デフォルトの名無しさん
08/01/06 19:53:22
>>565
ワイルドカード使えるなんて何処に書いてある?
ワイルドカードは使えないのが基本で、使えるメソッドにはその旨書いてある物だ
勝手に都合の良い仕様を妄想するな

君のやりたいことを実現するにはWMIを使えば良い
但し、ここはWSHのスレであって汎用コンポーネントのスレではないので後は自分で調べること
と言っても情報は腐るほどあるからググれば簡単に解決するけど

567:デフォルトの名無しさん
08/01/06 19:59:33
>>566
WSH厨ってなんでそんなに偉そうなんだ?
そのくせ関係ないスレに聞かれても無いスクリプト張りまくったりして気持ち悪いな。

568:デフォルトの名無しさん
08/01/06 20:04:29
汎用コンポーネントもこのスレでいいだろ
どうせ使うんだから

569:デフォルトの名無しさん
08/01/06 20:08:50
文句言うだけでサンプルコードのひとつも貼らない君等も同類だと気付いてる?

570:567
08/01/06 20:14:40

回答なら566で十分だろ?

俺はただ566が気持ち悪いって書きたかっただけだ。

同類にされたかないね!

571:デフォルトの名無しさん
08/01/06 20:26:49
ゴメン、それ以下だったようだねw

572:デフォルトの名無しさん
08/01/06 20:34:23
教える側はさぞ自分のほうが頭がいいと思い気持ちよくなる。

教えられる側はその代償に回答をもらう。

いいんじゃね?

モレだったら表面上では偉そうな態度取らんが、それは人それぞれ。

573:デフォルトの名無しさん
08/01/06 20:39:56
>>572
恥ずかしくならない?

574:デフォルトの名無しさん
08/01/06 22:12:33
>>573
モレは恥だと思うから、

>モレだったら表面上では偉そうな態度取らんが、それは人それぞれ。

って事ね。

575:デフォルトの名無しさん
08/01/06 22:13:47
>>566 は氏ねばいいと思いま〜〜す。

576:デフォルトの名無しさん
08/01/06 22:25:42
>>574
そういうの偉そうに書いちゃうのは恥ずかしくないの?

577:565
08/01/06 23:12:00
私が初歩的な質問をしてしまったばかりにスレが荒れてしまっているみたいで
申し訳ありません。

一応自己解決したので参考までに私がとった手段を書いておきますね。
WMIと言うのは一応調べてみたのですが、イマイチよく分からなかったので
WScript.CreateObject("WScript.Shell").Exec を使って
reg.exe を呼び出す事で処理しました。
reg query キー
とやると、指定したキー内の"名前", "種類", "データ"が全て列挙されるので
1行1行InStr関数にかけて目的のレジストリデータが存在するかどうかを調べる手段を
取りました。一瞬コマンドプロンプトの画面が立ち上がってくるのがちょっと気になりますが
これなら私にもかけました。
アドバイス下さった方、ありがとうございました。

578:デフォルトの名無しさん
08/01/06 23:24:39
>>576
楽しそうだね。

579:デフォルトの名無しさん
08/01/07 00:07:34
>>577
URLリンク(msdn2.microsoft.com)(VS.85).aspx
URLリンク(www.microsoft.com)


580:デフォルトの名無しさん
08/01/07 12:33:33
>一瞬コマンドプロンプトの画面が立ち上がってくるのがちょっと気になりますが

出てこなくする方法もあるけど
それが出ないのが気に入らないっていうひともいるだろうね

581:デフォルトの名無しさん
08/01/07 13:08:42
>>580
おお、そうなんですか?参考までに出てこないようにする方法を教えて頂けませんか?
IEの場合は
objIE.Visible = False
すれば見えなくなりますが、コマンドプロンプトの場合どうするんだろう・・・

582:デフォルトの名無しさん
08/01/07 16:36:53
cmd /?


583:デフォルトの名無しさん
08/01/08 01:46:31
>>562
どれをハズれと言ってるのかよくわからんのだが
まああれだ。
MSがいくら宣伝しても
VBSを使ってる人間は少数派。
というかもはや滅亡の道を歩んでおる

VBS < 壁 < javascript
.NET < 壁 < java
パワーシェル < 壁 < Perlなど

って事だ。
将来性を考えるんなら>>557もVBSはスルーして
JSにしときな

584:デフォルトの名無しさん
08/01/08 02:24:01
でもな、VBSのほうが断然早いんだ。特に配列。
たまにByRef受け取りなパラメータもあったりするし。

585:デフォルトの名無しさん
08/01/08 04:32:21
fsoで移動先に同名フォルダがある場合について質問です。
c:\test\test
というように同じフォルダ名で入れ子になっている環境で、
explorer上でc:\test\testを切り取り、c:\test内で貼り付けて上書きすると
二つのフォルダ内容が融合されますが、これをfsoで実現しようとしています。

Moveは移動先に同名アイテムが存在していてはダメということなので、

まずc:\test\testの中身を先にc:\testに移動させ、
c:\test\testが空になったら削除する。
この際に、
c:\test\test\foo.txt
c:\test\foo.txt
というように移動先のフォルダに同名ファイルが存在した場合、
まずc:\test\foo.txtを削除し、c:\test\test\foo.txtをc:\test\foo.txtに移動させる。
さらに同名フォルダの場合はそれぞれについて再帰的に処理していく。

というような手順を踏まなければならないのでしょうか?
もっとシンプルな方法があるなら教えてくれませんか?

586:デフォルトの名無しさん
08/01/08 05:09:32
>>585
質問は日本語でおねがいします

587:デフォルトの名無しさん
08/01/08 07:09:21
モールスぬるぽ銃乱射 URLリンク(www6.ocn.ne.jp)

   1TGBIT                 ガッガッガッガッドガガッガッ!!!!!
  >z/':y★r”  ドガガガガガッ           ∴ ∧変∧
  ル%#*゚∀)___。  \从/    _ _ _☆_ _★∴*.`Д´)/
 ノハ つ∞【〔ロ=:(∈(二(@ >‐― ‐★‐―☆∵*;:*;    /

∧★∧
(*゚∀゚)φ―・ ・― ― ―・・― ・・―→ (モールスでガッ!)


588:604
08/01/08 07:47:55
>>585
CopyFolderとかなら上書きに関するパラメータがあるみたいだけど。
なんでMoveにはないのかね?

589:604
08/01/08 07:49:08
未来からきてすみません

590:デフォルトの名無しさん
08/01/08 08:23:31
>>583
残念ながらハズレです

591:585
08/01/08 13:46:21
>>586
(´・ω・`)

>>588
なんでですかねー? >Moveの上書きパラ

CopyFolderの場合はあくまでCopyなので、後でコピー元を削除するとしても、
一時的に同一アイテムが階層違いで存在してしまうことになってしまいます。
この方法だとサイズの大きいアイテムのときに問題が出てきます。
となると、移動先の同名アイテムを先に削除してから移動させる、
という選択肢しかなくなってしまうと思うんです。

しかしそれがどう考えても複雑な処理になってしまう。

みなさんどうやってるんですか?

592:デフォルトの名無しさん
08/01/08 14:18:12
CopyFolder には上書きオプションがあって
Move には無い。
どこか抜けてるところが、いかにもマイクロソフトらしい。

593:デフォルトの名無しさん
08/01/08 14:31:42
moveは内部renameなのでrenameに上書きがないから

594:デフォルトの名無しさん
08/01/08 15:01:03
>>591
ShellオブジェクトのFolderオブジェクトを使えばできた。
以下、"F:\temp\test\test"を"F:\temp\test"へ上書きするサンプル。

Set objShell=Wscript.CreateObject("Shell.Application")
set objFol = objShell.NameSpace("f:\temp")
call objFol.MoveHere("f:\temp\test\test", &H10)

595:585
08/01/08 15:54:53
>>594
動作確認できました。
ありがとうございますm(_ _)m


しかしこのMoveHereって移動エラー発生時点で処理が中断されるっぽいですね。
スキップさせるにはやっぱり自分で書くしかないですね。

MoveHere.VBS
URLリンク(www.vector.co.jp)

けっこうみんな苦労してるっぽい
URLリンク(www.roy.hi-ho.ne.jp)



596:デフォルトの名無しさん
08/01/08 16:15:45
>>595
FolderItemオブジェクトのInvokeVerb使って、
"切り取り(&T)"して"貼り付け(&P)"という手もあると思いますが・・・。
まあ、エラーが出れば止まるのは同じでしょうね。

597:デフォルトの名無しさん
08/01/08 16:46:24
shellのmoveはcopy+deleteだから

598:デフォルトの名無しさん
08/01/08 16:52:30
fsoで
if folderexists then deletefolder
movefolder
がいいんじゃないの
on error使ってもいいけど

599:585
08/01/08 17:26:35
>>596
それって裏でMoveHereが動いてるのでは?

>>597
そのようですね。いろいろ実験してると分かりました。

>>598
それだとフォルダとフォルダのマージにはならないような。
移動先のかぶってないファイルも削除されてしまう。


600:デフォルトの名無しさん
08/01/08 17:29:09
movefileでぐるぐる

601:デフォルトの名無しさん
08/01/08 21:50:28
> まずc:\test\foo.txtを削除し、c:\test\test\foo.txtをc:\test\foo.txtに移動させる。
> さらに同名フォルダの場合はそれぞれについて再帰的に処理していく。

ファイル名とフォルダ名が同じだったらどうするんだろ

602:デフォルトの名無しさん
08/01/08 21:58:05
すきにしてくれ

603:デフォルトの名無しさん
08/01/08 22:24:30
つrobocopy.exe

604:585
08/01/09 06:53:12
>>601
そのへんは考えてあります。
MoveHereの標準動作を見ると

移動先に同名アイテムがない → 移動
移動元:ファイル → 移動先:ファイル → コピー先削除 → 移動
移動元:ファイル → 移動先:フォルダ → エラー(中断)
移動元:フォルダ → 移動先:ファイル → エラー(中断)
移動元:フォルダ → 移動先:フォルダ → マージ(再起処理へ)

ということみたいですが、
ファイル-フォルダ、フォルダ-ファイルの場合の中断は問題があるので
ダイアログでも出すか、スキップするかで対応。

605:デフォルトの名無しさん
08/01/09 16:41:28
cronNTで動かすスクリプトはネットワーク上のファイルにはアクセス出来ないのでしょうか?

var objFSO = new ActiveXObject("Scripting.FileSystemObject");
WScript.Echo((objFSO.DriveExists("\\\\Server\\SharedDocs")).toString());;

というスクリプトをcronNTで動かした場合、falseになります。


606:デフォルトの名無しさん
08/01/09 18:12:05
DriveExists?

607:デフォルトの名無しさん
08/01/09 20:35:09
>>605
それ、cronNTじゃない環境では動くの?

608:デフォルトの名無しさん
08/01/09 23:44:50
>>606
URLリンク(msdn.microsoft.com)

>>607
コピペミスで2行目に ; が1個余分に付いてしまったorz

foo.js というファイル名で保存して、コマンドプロンプトから cscript で実行させれば動きます。

共有フォルダに置いてあるDLL(AutoItX3.dll等)を regsvr32 した後、スクリプト中で
ActiveXObject() して使おうと思い、コマンドプロンプトからの動作確認ではうまく動いたので
cronNT に起動スケジュールを書いておいたら動いてはくれず、色々と調べていたら
共有フォルダへのアクセスに失敗している事が分った次第です。

もし、cronNT が原因で他の類似ソフトでは再現しない問題なら他に良い物が有れば
それに乗り換えようとも思ってます。
ただ、VMware Player の中で動かしている都合
(無料版はディスクイメージの容量を後から大きくするツールが付属しない)で、
しかも既に残り容量にも余裕が全く無い為、

Windows Services for UNIX Version
URLリンク(www.microsoft.com)

の様なのでは無く、もっと軽い物でないと無理です。


609:デフォルトの名無しさん
08/01/10 01:57:32
cronNT類似とか関係なく、例えばWSHとかHTML, HTAなど
他のActive Script実行環境でやるとどうなるか試してみろ。

610:デフォルトの名無しさん
08/01/10 09:00:52
>>608
ちょっとかなりスレ違いっぽいが
cronNTサービスのプロパティを開いて
ログオンをローカルシステムアカウントから自分のアカウントに変えてみて

611:デフォルトの名無しさん
08/01/10 11:28:47
Aというディレクトリに a,b,c,d,e というファイルがありました
それをBというディレクトリにmoveしますが途中で終了してしまい
a,b,cまでしかmoveされませんでした
その後もう一度AをBにmoveしたところ上書きしますか?と聞かれたので
「はい」で最後まで完了したのですがBのナカミを見たところ
d,eしかありませんでした
あるOSで実際に起こった出来事です

612:デフォルトの名無しさん
08/01/10 13:53:18
で?

613:デフォルトの名無しさん
08/01/10 15:46:01
>それをBというディレクトリにmoveしますが途中で終了してしまい

「それ」 とは何か。具体的に書け。

614:デフォルトの名無しさん
08/01/10 16:54:33
>「それ」 とは何か。具体的に書け。

単数形だから「Aというディレクトリ」じゃね

615:デフォルトの名無しさん
08/01/10 17:24:00
>611
最初のmoveにより、ディレクトリAからファイルa,b,cが消えた。
その状態でディレクトリAを再びmoveさせれば、ディレクトリBにファイルd,eしかないのも別におかしくないだろ。

616:デフォルトの名無しさん
08/01/10 20:57:58
普通はディレクトリとその中身のファイルは別だからねぇ。
ディレクトリを移動(上書き)というのはディレクトリ自体の移動ではなく中身の移動のことだし。

中身の移動であるという観点から見れば、上書きが発生すること自体おかしな話だわな。

617:デフォルトの名無しさん
08/01/10 21:32:01
なぜ 「それ」 が問題なのかというと、
Aというディレクトリを move せずに
a,b,c,d,e というファイルを move すればよかったんだよ。
「それ」 が A なのか a,b,c,d,e なのかで結果が違ったんだね。

618:デフォルトの名無しさん
08/01/10 21:57:15
Macはどうでもいいよ。

619:デフォルトの名無しさん
08/01/11 17:16:43
a,b,c,d,e なら「それら」だろ

620:デフォルトの名無しさん
08/01/11 20:19:27
>>611
ご愁傷さま


621:デフォルトの名無しさん
08/01/11 20:56:54
URLリンク(www.microsoft.com)
を JScript に移植したくて以下のように書きましたが、実行すると
xxx.js(4, 1) SWbemServicesEx: 無効なクエリです。
というエラーで止まってしまいます。
どこが間違っているでしょうか?

var strComputer = ".";
var objWMIService = GetObject("winmgmts:\\\\" + strComputer + "\\root\\CIMV2");

var colMonitoredEvents = objWMIService.ExecNotificationQuery(
"SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " +
"Targetinstance ISA 'CIM_DirectoryContainsFile' and " +
"TargetInstance.GroupComponent= " +
"'Win32_Directory.Name=\"c:\\\\scripts\"'");

while (true)
{
var objLatestEvent = colMonitoredEvents.NextEvent;
WScript.Echo(objLatestEvent.TargetInstance.PartComponent);
}

622:デフォルトの名無しさん
08/01/11 20:58:28
>>611
次から気を付けようなw

623:デフォルトの名無しさん
08/01/11 20:59:57
>>622
ここが間違ってる

var colMonitoredEvents = objWMIService.ExecNotificationQuery(
"SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " +
"Targetinstance ISA 'CIM_DirectoryContainsFile' and " +
"TargetInstance.GroupComponent= " +
"'Win32_Directory.Name=\"c:\\\\scripts\"'");


624:621
08/01/11 21:09:46
>>623
すみません、書き方が悪かったです。
どこが間違ってるかはエラーメッセージが教えてくれているのでわかってました。
どう直せばいいんでしょうか?

625:デフォルトの名無しさん
08/01/11 21:41:29
デバッグくらい自分でしろ〜
他人に投げるな〜〜

626:デフォルトの名無しさん
08/01/11 21:42:52
var colMonitoredEvents = objWMIService.ExecNotificationQuery(
"SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE "
+ "Targetinstance ISA 'CIM_DirectoryContainsFile' and "
+ "TargetInstance.GroupComponent= "
+ "'Win32_Directory.Name=\"c:\\\\\\\\scripts\"'");

627:デフォルトの名無しさん
08/01/11 22:38:22
wwww

628:621
08/01/15 17:17:28
>>626
ありがとう

629:デフォルトの名無しさん
08/01/18 06:33:04
CreateObject("ADODB.Stream")

上記でエラーがでます。
おそらく、ファイルが必要だと思うのですが、
それはどうやったら手に入りますか?


630:デフォルトの名無しさん
08/01/18 07:29:28
>>629
とりあえずエラーの内容書いてみ

631:デフォルトの名無しさん
08/01/18 21:42:53
>>629
MSからダウンロードに決まってるだろ

632:デフォルトの名無しさん
08/01/18 22:22:49
標準で入ってない環境、まだあったっけ?

633:デフォルトの名無しさん
08/01/19 09:49:15
FileSystemObjectとか称してテキストファイルの読み書きしか出来ないの?
fread,fwriteとかseekのメソッドを提供してるクラスって無いの?

634:デフォルトの名無しさん
08/01/19 09:59:08
出来ない
ADODB.Stream

635:デフォルトの名無しさん
08/01/19 15:46:30
ADODB.Stream ってファイル全体をいっぺんに読み込んでしまうよね?
デカイ動画ファイルの 最初の数バイトだけ 読み込んで処理したいけど
ファイル全体を読み込んでしまうため時間がかかってしょうがない。
何か良い手は無いですか?

636:デフォルトの名無しさん
08/01/19 16:18:25
FileSystemObjectで読む

637:デフォルトの名無しさん
08/01/19 22:25:52
PowerShellやC#に逃げる

638:デフォルトの名無しさん
08/01/20 01:04:11
     ↑
自分の殻に閉じこもる現実逃避型。

639:デフォルトの名無しさん
08/01/20 01:25:31
debugでダンプする

640:デフォルトの名無しさん
08/01/20 17:01:36
殻=shell

641:デフォルトの名無しさん
08/01/20 22:13:18
basp21

642:デフォルトの名無しさん
08/01/20 22:46:52
客先のPCにbasp21がインストールしてあれば苦労しないよ

643:デフォルトの名無しさん
08/01/20 23:24:23
スクリプトをインストール(=使用準備なので何処かのディレクトリにスクリプト置くだけでインストールになる)は可能なのに
COMコンポーネントのインストールは不可なんて馬鹿げたことを言い出すような低レベルな奴など相手にするな

こんなこと言い出すのは、嫌レジストリ厨とか"インストール"の意味を分かってない奴とか、相当な初心者の類だが、
もし"客先"ってのが会社なら、そんな奴がシステム管理においての権限を持ってるなんてゾッとしないねw
まあそれ以前にWSHスクリプトを外注する会社ってのもアレだけどw

644:デフォルトの名無しさん
08/01/20 23:37:16
FileSystemObjectなら使えるだろうに、なぜ使わん?

645:デフォルトの名無しさん
08/01/21 00:12:46
スクリプトの中で COM みつからなかった初回のみ regsrvr32 すれば?

646:デフォルトの名無しさん
08/01/21 00:14:43
>>635
> デカイ動画ファイルの 最初の数バイトだけ 読み込んで処理したいけど
とのことだ。
バイナリは無理だろ。

647:デフォルトの名無しさん
08/01/21 00:15:20
>>646>>644 へのレスね。

648:デフォルトの名無しさん
08/01/21 01:28:09
OpenBinaryFile()

649:デフォルトの名無しさん
08/01/21 01:50:38
> バイナリは無理だろ。

何が?

650:デフォルトの名無しさん
08/01/21 01:55:19
FSOでってことだろ

651:デフォルトの名無しさん
08/01/21 04:47:12
ForBinaryReading

652:デフォルトの名無しさん
08/01/21 10:21:14
それは今回の用途とは違うわけで

653:デフォルトの名無しさん
08/01/21 16:21:14
baspをbase64してwsfに入れて実行時に登録

654:デフォルトの名無しさん
08/01/21 16:36:19
すなおにVBで作って納品46

655:デフォルトの名無しさん
08/01/23 01:59:20
VBSファイルごとにアイコン変える方法おすえて

656:デフォルトの名無しさん
08/01/23 02:11:42
>>655
ショートカット作って、ショートカットのアイコン変えるとか

657:デフォルトの名無しさん
08/01/24 21:41:26
そういうアイコンハンドラを使えばいいんじゃね
なければ作ればいいんじゃね

658:sage
08/01/31 00:57:14
1.WSHを使って指定URLをIEから立ち上げる
2.(1)のURLのHTMLに含まれるjavascriptを解析して
自動で実行したい

WSHで1.はできると思うのですが、2はできますでしょうか?
できるのであればヒントを教えていただけぬか


659:デフォルトの名無しさん
08/01/31 00:59:05
HTMLDocument

660:デフォルトの名無しさん
08/02/01 20:30:46
最近 WSH を始めた者です。
WSHShell の Run メソッドでアプリを起動して使おうとしているんですが、
普通にアイコンをダブルクリックして起動した場合と挙動が違って困っています。

とりあえずわかったことは、そのアプリは ¥Document and Settings¥ユーザ名¥
Application Data¥アプリ名 以下に一時ファイルを作るんですが、WSH から
起動した場合ファイルが生成されないようです。
WSH の場合でもちゃんと走るようになる為には何か別途設定がいるのでしょうか?
今は基本的に WSHShell.Run(アプリのバス, 4, True) を呼んでるだけです。

661:デフォルトの名無しさん
08/02/01 21:42:20
>>660
カレントディレクトリを設定しろ
設定仕方はWSHヘルプに載ってるので嫁

662:デフォルトの名無しさん
08/02/02 07:34:31
>>661
どうもです。

>WSHヘルプ
すみません、実はこれが何を指すのか分からん程度なんですがw

>カレントディレクトリを設定しろ
URLリンク(msdn.microsoft.com)
によると CurrentDirectory というプロパティがあるそうなのでこれを適宜セット
する、で正解ですか?
で、できたらどんな値にセットするかも教えていただけると助かるのですが...
もしかしたらWSHヘルプというものにそれが書いてあるんでしょうか。

逆に考えると、普通にダブルクリックで起動したアプリではカレントディレクトリが
適宜セットされているから動く、ということでしょうか? もしそうなら一体どんな値になって
いる? という疑問がわきますが...

663:デフォルトの名無しさん
08/02/02 08:38:11
右クリック-プロパティ

664:デフォルトの名無しさん
08/02/02 09:38:40
通常はダブルクリックしたものがあるディレクトリがカレントディレクトリとなる。

665:デフォルトの名無しさん
08/02/02 11:10:49
>>662で言ってる CurrentDirectoryって Windows2000にデフォルトで入ってるWSHでは
動きませんよねぇ。なんか代替のメソッド無いですかね?

666:デフォルトの名無しさん
08/02/02 13:14:22
>>665
Win2Kでも、WSH5.6なら、("Wscript.Shell").CurrentDirectryが使える。
インストール直後のバージョンは、どうだったかな‥

古いWSHでも、("Wscript.Shell").Run """ショートカットファイル.lnk""",,False なら
問題ない。False設定しか使えなくなっちゃうけども。

Wscript.ScriptFullName のほうは今回無関係ですかね。


667:デフォルトの名無しさん
08/02/02 16:33:34
そのスクリプトファイルのショートカットを作って作業フォルダを設定しろ

668:デフォルトの名無しさん
08/02/03 02:07:27
WSHでファイルを読み取り専用に変えることはできますでしょうか?

669:デフォルトの名無しさん
08/02/03 02:20:08
readonly属性をつけることならできるな

670:デフォルトの名無しさん
08/02/03 03:43:53
>>669
それです。教えてください。

671:デフォルトの名無しさん
08/02/03 17:41:54
Attributes=1

672:デフォルトの名無しさん
08/02/03 18:09:40
ヘルプみろ

673:662
08/02/04 06:06:35
>>664
なるほど。その値でうまくいくようです。ありがとうございます、

674:デフォルトの名無しさん
08/02/06 16:53:29
質問です。

現在、VBSCriptで各ディレクトリのアクセス権限を
テキストに書き出す仕組みを作成しています。

コマンドは下記のようになっております。
CACLS <ディレクトリ名> >> <出力ファイル>

ディレクトリ名、出力ファイル名はパラメータとして受け取り、
文字列を結合してWshShell.Runに渡しております。 ・・・【1】

ここで問題なのですが、【1】の文字列をコピペして
DOSプロンプトで実行すると、正しく出力がされているのですが、
WshShell.Runにて実行すると、正しく出力されません。

この部分のコードは下記のようになっております。----------*

Command = "CACLS " & DIRName & " > " & ExportFileName
objShell.Run Command ' WShellオブジェクトは生成済み

--------------------------------------------------------*

恐れ入りますが、どなたかこのような現象を経験されておりましたら、
解決策の指南のほどよろしくお願いいたします。

675:デフォルトの名無しさん
08/02/06 18:26:05
>WShellオブジェクトは生成済み

ソース全部貼るべき

「・・・【1】」って違う場所に書いてない?



676:デフォルトの名無しさん
08/02/06 18:27:44
>WshShell.Runにて実行すると、正しく出力されません。
とはどうなるのだ?

677:デフォルトの名無しさん
08/02/06 19:11:25
Set objShell = WScript.CreateObject("WScript.Shell")
Command = "CACLS %cd% > out.txt"
objShell.Run Command

これで試してみたけど、うまくいかないね。

Command = "cmd /c cacls〜

ではうまくいくけど。

678:デフォルトの名無しさん
08/02/06 20:04:10
%windir%\system32\cacls.exeと指定したらどう?

679:デフォルトの名無しさん
08/02/06 21:50:01
リダイレクトはシェル(cmd.exe)の機能。

680:デフォルトの名無しさん
08/02/07 06:34:50
フルパス指定でも無理

681:674
08/02/07 09:15:53
皆さんご回答ありがとうございます。

>>WshShell.Runにて実行すると、正しく出力されません。
>とはどうなるのだ?
パラメータ無しで実行したCACLSのように、ヘルプが表示されます。

経過ですが、
>>677さんの"cmd /c cacls〜"で試してみたところ、うまくいきました。

大変お世話になりました。

682:デフォルトの名無しさん
08/02/08 12:25:55
タクススケジューラの引数について質問です。

Windowsタクススケジューラで設定した引数が渡ってこない(WScript.Arguments.Count = 0)のです。
同じパス(コマンドライン)で作ったショートカットを実行すると引数が渡ってくる(WScript.Arguments.Count > 0 )のです。

実際に試した記述は、「c:\test.vbs abc」と「c:\test.vbs "abc"」と「"c:\test.vbs abc"」です。

何か特別な記述方法などあるのでしょうか?
先輩方、よろしくご教授ください。

683:デフォルトの名無しさん
08/02/08 13:36:44
cmd /c c:\test.vbs abc

684:デフォルトの名無しさん
08/02/08 15:31:49
先輩!ありがとうございました!

685:デフォルトの名無しさん
08/02/08 21:29:01
ファイルをドラッグアンドドロップしたらパスを表示するスクリプトが動きません。
どこを直せばよいか教えてください。

var strArgument = new Array();
if ( WScript.Arguments.count() == 0 ) {
WScript.Echo ("コマンドライン引数が指定されていません。");
}
else {
for ( strArgument in WScript.Arguments ) {
WScript.echo ( strArgument[i] );
}
}

686:685
08/02/08 21:37:42
スクリプトをダブルクリックした時は正常作動しますが
ファイルをドロップすると何も表示されません。
スクリプトエラーも出ないので困っています。

687:デフォルトの名無しさん
08/02/08 22:03:46
コマンドライン引数が指定されているからに決まってるだろ

688:デフォルトの名無しさん
08/02/08 22:04:54
var strArgument = new Array();
if ( WScript.Arguments.count() == 0 ) {
   WScript.Echo ("コマンドライン引数が指定されていません。");
}
else {
   WScript.Echo ("コマンドライン引数が指定されました。");
}


689:デフォルトの名無しさん
08/02/08 22:18:40
for ( strArgument in WScript.Arguments ) {
WScript.echo ( strArgument[i] );
}
これ、なにしてるの?

690:デフォルトの名無しさん
08/02/08 22:42:40
>>688
var strArgument = new Array();
これ、なにしてるの?

691:デフォルトの名無しさん
08/02/08 22:52:48
URLリンク(msdn.microsoft.com)

692:デフォルトの名無しさん
08/02/08 23:25:21
>>685
// var strArgument = new Array();
if ( WScript.Arguments.count() == 0 ) {
WScript.Echo ("コマンドライン引数が指定されていません。");
} else {
for (i = 0; i < WScript.Arguments.length; i++ ) {
WScript.echo ( WScript.Arguments(i) );
}
}

.vbsファイルしか作った事がないけど、なんとなく.jsファイルはこれで動くんじゃないかなぁと・・?

693:デフォルトの名無しさん
08/02/08 23:56:38
>>692
> if ( WScript.Arguments.count() == 0 ) {
count はメソッドじゃなくプロパティ。

694:デフォルトの名無しさん
08/02/09 00:10:28
>>693
えー?

695:685
08/02/09 00:12:24
>>692
動きました。ありがとうございます。
只今WSHをJScriptで書こうと、vbsのスクリプトを翻訳しながら勉強中です。
でもJSのサンプルコードが少なくて困ってました。
今回は元コードに配列を使っているように見えたので、それらしく書き換えたけど動きませんでした。
なんでここまで違いが出るのか、まだ理解してませんw
↓元のサンプルコード
Option Explicit
Dim strArgument

If WScript.Arguments.Count = 0 Then
WScript.Echo "コマンドライン引数が指定されていません。"
Else
For Each strArgument In WScript.Arguments
WScript.Echo strArgument
Next
End If

696:デフォルトの名無しさん
08/02/09 00:28:24
>>695
実際にはいろいろな書き方ができるので、余計に混乱してるのかも。

元のスクリプトになるべく忠実に対応させるなら、以下のような書き方もできる。

if (WScript.Arguments.length == 0) {
WScript.Echo("コマンドライン引数が指定されていません。");
}
else {
var e = new Enumerator(WScript.Arguments);
for (; !e.atEnd(); e.moveNext()) {
WScript.Echo(e.item());
}
}


697:デフォルトの名無しさん
08/02/09 00:31:07
for (var e = new Enumerator(WScript.Arguments); !e.atEnd(); e.moveNext()) {
すっきり

698:デフォルトの名無しさん
08/02/09 00:41:48
>只今WSHをJScriptで書こうと、vbsのスクリプトを翻訳しながら勉強中です。

なぜ?遅いのに。いろいろ細かいことにうるさいのに。などなど

699:デフォルトの名無しさん
08/02/09 01:35:29
マイクロソフトの公用言語はBASIC
ゲイツはBASIC長者
java には裁判で負けた恨みが有る

700:デフォルトの名無しさん
08/02/09 09:13:38
WSHは使うけど、今はもうVBScriptでは書かないなあ。
JavaScript(JScript)のある意味変態的な言語仕様に慣れてしまったら戻れない。

701:デフォルトの名無しさん
08/02/09 14:37:22

変態

702:693
08/02/09 15:58:20
>>694
> >>693
> えー?
といわれてMSDN見てきた。

URLリンク(msdn.microsoft.com)

プロパティとメソッド、両方あるな……。

ふだんはJScriptで length 使うか Enumerator にして扱ってるんで、
確認不足で適当に書いてしまった。スマソ

703:デフォルトの名無しさん
08/02/09 16:38:49
>プロパティとメソッド、両方あるな……。

プロパティを見るとメソッドになってて、メソッドしかないような

704:デフォルトの名無しさん
08/02/09 17:18:48
動きさえすればどっちでもいいよ

705:デフォルトの名無しさん
08/02/09 17:22:03
with (WScript.Arguments) {
    WScript.Echo(Count());
    WScript.Echo(length);
    WScript.Echo(Count); // エラー
}

706:デフォルトの名無しさん
08/02/09 20:48:58
basp21のsocketって非同期通信できませんか?
データ取得できたらコールバック関数を呼びたいんですが。

接続できなかった場合とかタイムアウトになるまで
他の処理ができない



707:685
08/02/09 23:10:36
昨日教えてもらったスクリプトを、テキストに出力しようとしたら働きません。
また教えてください。

var objFso = new ActiveXObject("Scripting.FileSystemObject");
var objFile = objFso.OpenTextFile("testdirlist.txt", 8, true);
var path String();
objArgs = WScript.Arguments;
for (i = 0; i < objArgs.length; i++)
{
path = path + objArgs(i) + "\n";
}
//WScript.Echo(path);//←働く
objFile.WriteLine(path);//←働かない
objFile.Close();

708:685
08/02/09 23:13:59
×var path String();
○var path = String();

709:デフォルトの名無しさん
08/02/09 23:46:55
絶対パスにすれば

710:デフォルトの名無しさん
08/02/10 00:18:19
var path = "";


711:685
08/02/10 00:30:39
>>709
動きました!

712:デフォルトの名無しさん
08/02/11 12:28:54
WSH 5.1(Win2k)環境でカレントディレクトリを変更したいのですが
Set foo = WScript.CreateObject("WScript.Shell")
foo.CurrentDirectory =
と言った.CurrentDirectoryプロパティはWSH 5.6(WinXP)以降の環境でしか動作しません。
もちろんWin2kのWSHをバージョンアップすれば動くのですが、それは手間がかかる為
やらずに解決したいと思っています。

やりたい事は、WSHスクリプトファイル(仮にhoge.vbs)と同じ階層に scriptと言うフォルダがあり、
そのフォルダの中に var.bat と言うファイルがあるとして

Set objShell = WScript.CreateObject("WScript.Shell")
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(".")
objShell.Run f.path & "\script\var.bat"
等として、他のフォルダ内の実行ファイルを実行したいのです。
しかし実際にコレをやると、指定されたファイルが見つかりません とエラーが表示されて実行できません。
確かにファイルは存在しますし、WScript.Echo f.path & "\script\var.bat" とかやってパスを確認しても
正しいパスです。

なので、カレントディレクトリを実行ファイルのある場所に移動しないと実行できないのかなと
考え、CurrentDirectoryを変更する方法を考えているのですが・・・
普通に考えてCurrentDirectoryを変更せずとも実行できるはずですよねぇ・・アドバイス頂けませんか?

713:デフォルトの名無しさん
08/02/11 12:37:49
パスをだぶるくぉーてーしょんで囲みなさい

714:デフォルトの名無しさん
08/02/11 14:26:29
>>713
レスありがとうございます。

strDrv = strCurrent & "driver\install.bat"
↑これで、カレントディレクトリ\driver\install.bat がstrDrv に入ります。
その後
objWshShell.Run strDrv
で、今までは出来ませんでした。なのでこれを" " で囲みます
objWshShell.Run "strDrv"
しかしこうすると、strDrvと言う文字列を起動しようとしてしまい、strDrvが変数として扱われず
単なる文字列として扱われるため動作しません。
objWshShell.Run ""strDrv""
として、"をエスケープしてみてもだめ〜 とか考えてたら

strDrv = strCurrent & "driver\install.bat"
strDrv = """" & strDrv & """"
WScript.Echo strDrv
objWshShell.Run strDrv
これでいけました。最初の"が文字列の開始、 中2つの"が 文字列としての純粋な"を表し
(""で"を単なる文字列としてエスケープ)、最後の"が文字列の終了を表すダブルクォート・・・
結局 """" となり、非常に分かりにくいというか、混乱する形になったのですが、こんなもんなんでしょうか?

715:デフォルトの名無しさん
08/02/11 14:47:54
こんなもんです

716:デフォルトの名無しさん
08/02/11 16:13:45
>>714
Python がお勧め

717:デフォルトの名無しさん
08/02/11 16:15:22
strDrv = Chr(18) & strDrv & Chr(18)

718:デフォルトの名無しさん
08/02/11 17:42:26
>Set f = fs.GetFolder(".")
>objShell.Run f.path & "\script\var.bat"

objShell.Run ".\script\var.bat"


719:デフォルトの名無しさん
08/02/11 18:10:32
>>716
>>712

720:デフォルトの名無しさん
08/02/11 23:38:48
>>714
C言語やjavaだって "\"" みたいな、「たいへん分かりにくい混乱する表記」
になるから、こんなもんです。

もし、コードをスッキリさせたかったら、

Const QQ = """"
strDrv = QQ & strDrv & QQ

もしくは

strDrv = Q( strDrv )

Function Q(ByVal str)
  Return """" & str &""""
End Function

みたいな方法がありますよ。(自分は後者をよくつかう)

721:デフォルトの名無しさん
08/02/12 01:25:32
Chr(34)は?

722:デフォルトの名無しさん
08/02/12 07:40:18
"自分は後者をよくつかう"って、使えるの、それ?

723:デフォルトの名無しさん
08/02/12 16:41:25
うん

724:デフォルトの名無しさん
08/02/12 16:56:37
>みたいな

コードはイメージです

725:デフォルトの名無しさん
08/02/12 20:18:12
>>724
実際のコードとは異なる場合があります。

726:デフォルトの名無しさん
08/02/12 20:24:57
>>722
使えない

727:デフォルトの名無しさん
08/02/12 23:32:48
使わない

728:デフォルトの名無しさん
08/02/12 23:43:08
使われない

729:デフォルトの名無しさん
08/02/13 00:07:38
こんばんです。1つ質問させてください。

vbsでプログラムを組んでいるのですが、vbs親プログラムからvbs子プログラムを
起動は出来ないのでしょうか?
〜〜〜〜〜vbs親プログラム内〜〜〜〜〜〜〜〜〜
Set objWshShell = WScript.CreateObject("WScript.Shell")
strCmdLine = "sub_program.vbs str01 str02 "
objWshShell.Exec(strCmdLine)

この記述で「sub_program.vbs」を引数2つ与えて起動できると思うのですが出来ません。
尚、コマンドプロンプトで[sub_program.vbs str01 str02]実行すると正常に起動します
修正点がありましたらお教えいただけないでしょうか。

730:デフォルトの名無しさん
08/02/13 00:16:04
>>729
strCmdLine = "cscript sub_program.vbs str01 str02 "
または
strCmdLine = "wscript sub_program.vbs str01 str02 "
と記述する必要がある。

コマンドプロンプトでは、"たまたま" cscriptまたはwscriptが省略できる。




731:729
08/02/13 00:23:32
>>730
ありがとうございました。無事起動すること出来ました。
コマンドプロンプトでは"たまたま"省略可能なんですか・・・

732:デフォルトの名無しさん
08/02/13 07:49:15
という事はExplorerでアイコンをダブルクリックすれば起動するのも"たまたま"だね。

733:デフォルトの名無しさん
08/02/13 08:13:26
//H:でたまたまを切り替えられる。

734:デフォルトの名無しさん
08/02/13 09:19:40
どう考えても>>721が正解


735:デフォルトの名無しさん
08/02/13 16:36:06
たまたまだけど、これもできる
strCmdLine = "sub_program.vbs str01 str02 "
objWshShell.Run(strCmdLine)


736:デフォルトの名無しさん
08/02/13 21:57:32
>>735
おまえ、何も解ってないな

737:デフォルトの名無しさん
08/02/14 00:12:08
そうだな、解るように言ってやれ

738:デフォルトの名無しさん
08/02/15 21:53:59
var fso= WScript.CreateObject("Scripting.FileSystemObject");
var d = fso.GetDrive(fso.GetDriveName("Q:\\"));
if(d.IsReady){ ...

とやってDVD-ROMドライブが準備できているかどうか調べているのですが、
DVDを入れて認識している最中にIsReadyが実行されるとウィンドウズ自体が数秒止まってしまいます
バックグラウンドで動かしていてもフォアグラウンドアプリまで停止してしまうので困っているのですが
これを回避するにはどうしたらいいのでしょうか?

739:デフォルトの名無しさん
08/02/15 22:14:09
FSOで問題あるときはShell.Applicationを使ってみるのが定石

740:デフォルトの名無しさん
08/02/16 06:37:35
ドアラ グッドウィルドームに立つ!
再生:654,421 | コメント:123,256 | マイリスト:20,510
URLリンク(www.nicovideo.jp)

凄い勢いで踊るドアラ
再生:482,525 | コメント:28,129 | マイリスト:17,837
URLリンク(www.nicovideo.jp)

ドアラが異端になった経緯
再生:424,284 | コメント:36,521 | マイリスト:9,417
URLリンク(www.nicovideo.jp)

ドアラーズブートキャンプ
再生:241,338 | コメント:18,996 | マイリスト:7,229
URLリンク(www.nicovideo.jp)

741:デフォルトの名無しさん
08/02/16 13:36:40
>>738
ドライブ認識動作中にエクスプローラとかでドライブにアクセスしても凍るから
アクセスするタイミング悪いと凍るのは仕様じゃね?

>>739
Shell.ApplicationにIsReadyはないけどな

742:デフォルトの名無しさん
08/02/16 17:20:40
Shell.Applicationで取れる情報で変化するものを見つければ?

743:デフォルトの名無しさん
08/02/18 16:30:09
Sub プロシージャとFunction プロシージャの違いって
Function プロシージャが戻り値を返すのに対してSub プロシージャが値を返さないって言うだけですか?

744:デフォルトの名無しさん
08/02/18 16:51:11
End XXX
Exit XXX
がちがう

745:デフォルトの名無しさん
08/02/18 19:34:19
>>744
End Sub
End Function
が違うって言うのは分かりますし、Functionの場合のみ Function名 = 値 で値を返す事が出来る
のも分かりますが(Javaで言うコンストラクタに値代入したらreturn文みたいな振る舞いすんのな)

Exit Sub Exit Function というのがあるのですか?それはいったいどういう・・・?
単に終わらせるだけですか? 呼び出し元に戻りますか?

746:デフォルトの名無しさん
08/02/18 21:25:12
Javaなんかのreturnみたいにプロシージャの呼出元へ戻るだけ。

747:デフォルトの名無しさん
08/02/18 21:50:22
>>745
ヘルプも見れないのか

748:デフォルトの名無しさん
08/02/19 22:10:48
WSH(拡張子.vbsのファイル)で
カレンダを表示するプログラムを作成しました。

出力はMsgBoxでしてます。
こんなかんじ
MsgBox strResult, , "カレンダ"

これを、携帯電話からも実行できるようにしたいと考えました。
携帯のカレンダがあるじゃないかと言われると困るのですが・・・
便宜上カレンダと言っているだけで、実際は他の物を出力するので。
イメージ的にはカレンダというと一番伝わりやすいので・・・。

で、そのアイディアとして、サイト上に掲載すればいいと考えました。
携帯のブラウザからそのサイトにアクセスした際に.vbsで作ったのと同じような出力が
得られれば良いのですが、これを実現するのに簡単な方法は無いでしょうか?
今のところ私に考え付くのは JavaScriptを勉強してJavaScriptに書き直して
やるぐらいかなぁと思っているのですが、そんな事しないとやっぱ出来ませんか?
そうなると関数とか文法とかいろいろ勝手が違うでしょうから覚え直しですかね?・・。
.vbsファイルの出力のWeb版を作りたいみたいな感じです。よろしくお願いします。

749:デフォルトの名無しさん
08/02/19 22:16:13
携帯もまだJavaScriptは実行できないぞ。

ASPと言って、Windowsサーバ上でVBScriptやJScriptをCGIのように実行する環境があった。
お前が欲しいのはきっとそれに違いない。

問題は、世間がASP.NETへ移行しつつあるということ。
ASP.NETはC#とかVB.NETとかを使うまた別物。


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

4277日前に更新/234 KB
担当:undef