お前ら、wsh使ってますか? Part7at WIN
お前ら、wsh使ってますか? Part7 - 暇つぶし2ch398:名無し~3.EXE
09/03/10 17:11:24 fEB3/UWG
名前付きオブジェクトのオブジェクト名を省略してるからでねえの?

399:名無し~3.EXE
09/03/11 12:05:01 vW724bJL
>>396
そのソースに関してどのへんがPowerShellのほうに優位性があるのかkwsk

400:名無し~3.EXE
09/03/11 19:40:59 twyHq6vM
400

401:名無し~3.EXE
09/03/11 19:54:07 1yMJqijd
>>398
すみませんちょっと詳しくお願いします・・・
>>397
この先にだらだら他のこともするつもりなので・・・

402:名無し~3.EXE
09/03/12 00:01:37 SOq4v93w
>>401
コマンドプロンプトを叩くというのは、exec/runするってこと
対話的に実行したいならstdin/outを使えばいいし、シンプルでかまわないならコマンドに入出力(入力に関してはあらかじめスクリプトから出力)を指定してもいい
URLリンク(itpro.nikkeibp.co.jp)


403:名無し~3.EXE
09/03/18 18:29:56 1TDARhEw
Set objWSHShell = CreateObject("WScript.Shell")
objWSHShell.Run "notepad.exe まいでーた.txt"

↑を実行するとファイルが無い旨表示され新たにファイルを作るかどうか聞かれます。
これを、聞かれないようにする方法を教えてください


404:名無し~3.EXE
09/03/18 18:32:32 lUi0VL8q
中身は空でいいから先にファイルを作っておけばいい。

405:名無し~3.EXE
09/03/18 18:34:05 1TDARhEw
>>404
ありがとうございました。

406:名無し~3.EXE
09/03/18 19:10:54 mFXZ2vvQ
>>404
objWSHShell.CurrentDirectory =を実行しておく必要がないか?

407:名無し~3.EXE
09/03/18 22:26:49 8Qf0t6c/
別に無いけど

408:名無し~3.EXE
09/04/02 14:38:26 QbNgX8wt
なるほど

409:名無し~3.EXE
09/04/02 16:55:40 +fKY4eWZ
なるほど っていいたいだけだろ

410:名無し~3.EXE
09/04/02 18:58:56 QbNgX8wt
なるほど

411:名無し~3.EXE
09/04/02 23:43:54 qVgeHPAh
ファイル書き込みテストをしたいのですが、
タイムスタンプと書き込み成功、失敗をログに書き出したいのですが、
よいサンプル教えていただけませんか?

412:名無し~3.EXE
09/04/02 23:56:44 gu6GB/nX
>>411
最初からサンプルソースクレクレではなく
自分で書いて、解らないところを質問しろ

413:名無し~3.EXE
09/04/03 00:44:12 APA4RBWO
>>411
Hey, Scripting Guy! - アーカイブ
URLリンク(www.microsoft.com)

414:名無し~3.EXE
09/04/03 10:38:18 NpKi9nyK
VBSで引数で受け取った文字列にユニコードが含まれていた場合に
その部分を削除するにはどうしたらいいんでしょうか?

♠スペード ♣クラブ ♥ハート ♦ダイヤ

スペード クラブ ハート ダイヤ

415:名無し~3.EXE
09/04/03 19:38:06 1ttVetc2
VBSって正規表現なかったけ?まさかね

416:名無し~3.EXE
09/04/03 19:45:37 mozVT+aj
yes

417:名無し~3.EXE
09/04/03 21:00:30 OSCytWtJ
>>414
ユニコード文字を削除したら
「♠スペード ♣クラブ ♥ハート ♦ダイヤ」

「」
になるよ

「ス」はUnicode:0x30B9だし、「ペ」はUnicode:0x30DAと、どちらもユニコードの文字。
はっきり言えば「♠スペード ♣クラブ ♥ハート ♦ダイヤ」全体がユニコードの文字列。

おそらく、君がやりたいのは
「文字列にユニコードが含まれていた場合にその部分を削除する」
ではなく
「文字列にShift_JISに存在しない文字が有ったらその部分を削除する」
なんじゃないの?

後者の場合は、Shift_JISには存在しない
「♠♣♥♦」が削除され、
Unicode文字ではあるが、Shift_JISにも存在する
「スペード クラブ ハート ダイヤ」が残ることになる。

418:名無し~3.EXE
09/04/03 21:11:23 lHKXNTuI
>>417
それぐらいエスパーしろよ・・・。

419:名無し~3.EXE
09/04/03 21:32:00 mozVT+aj
>>418
>それぐらいエスパーしろよ・・・。
それおかしいだろ?
スキーヤしろって言うか?スキーしろって言うだろ?

420:名無し~3.EXE
09/04/03 21:51:46 n9mseU0m
アナルレイパーします。

421:名無し~3.EXE
09/04/03 23:55:00 qJkg0oeA
>>418
エスパー(意図の酌み取り)は後半でしてるじゃん。
単に前半で要求仕様通りだとこうなるって説明を入れてるだけで。

422:名無し~3.EXE
09/04/04 01:24:53 I1MEWlLr
なるほど

423:名無し~3.EXE
09/04/04 16:44:40 iSitawJj
>>422
アナルレイパーって何?

424:名無し~3.EXE
09/04/09 04:20:14 GTF3L2c8
分からないならレスしないでください

425:名無し~3.EXE
09/04/09 07:35:35 oUfTSnN8
このスレ開くと脳内にジャッカー電撃隊のOPが流れる・・・

426:名無し~3.EXE
09/04/09 20:30:56 GA22GXlP
WScript.ShellのPopupで第二引数を指定すると、n秒後に閉じることが出来ますよね?
これと同じようなことをInputBoxでやりたいんですが、どうすれば良いですか?
OKが押された場合、キャンセルが押された場合、どちらも押されずに指定秒数が経過した場合
の3通りでその後の処理を分岐したいです。

WinXP/WSH5.6で、dllなどの新規インストールは出来ない環境です。

427:名無し~3.EXE
09/04/09 20:33:03 awHYC9DT
ほかの方法を考える。

428:名無し~3.EXE
09/04/09 21:46:13 GA22GXlP
他の方法って何でしょうか?

WinXP標準環境のVBSで使えるGUI入力
表示位置、初期入力値指定可能
OK、キャンセル、指定秒数が経過、の分岐が可能

の条件を満たしていれば、InputBoxじゃなくてもいいんですけど
他の方法でこれらを満たす物がありますか?

429:名無し~3.EXE
09/04/09 22:30:28 GTF3L2c8
WScript.ShellのExecで子を起こしてそっちでInputBox出しな

430:名無し~3.EXE
09/04/09 23:52:12 Q72d+ivs
ClassとTimeOut使えば出来るな
TimeOutしてもClassのデストラクタは実行されるから

431:426
09/04/10 00:45:11 jnrC655t
>>429
ありがとうございます。
その方法でも目的は達っせそうですが、処理を書くファイルが分散するのは
好ましくないので、今回は>>430の方法でやることにします。


>>430
出来ました。
こんな方法があったなんて目から鱗です。
ありがとうございました。

432:名無し~3.EXE
09/04/10 08:36:09 wD95lKKk
w

433:名無し~3.EXE
09/04/10 20:31:43 cPEXIVrz
vbscriptの
Property Let
について、できるかぎり調べたんですが
複数の引数を渡す方法がわかりません
どうしたらいいですか?

434:名無し~3.EXE
09/04/10 20:53:40 YxXQFkOF
>>433Script56.CHMに思いっきり書いてあるわけだけど・・・
本当にできるかぎり調べたの?

>arglist
>Property Let プロシージャを呼び出すときに、Property Let プロシージャに渡される引数を表す変数のリストを指定します。
>複数の変数を指定する場合はカンマ (,) で区切ります。(ry

435:名無し~3.EXE
09/04/10 20:53:46 1fjQi+ry
>>433
' 定義
Property Let PropertyName(arg1, arg2, value)
WScript.Echo arg1
WScript.Echo arg2
WScript.Echo value
End Property

' 代入
.PropertyName("引数1", "引数2") = "値"

436:名無し~3.EXE
09/04/10 21:30:34 cPEXIVrz
>>434
もちろんモニターぶち破るほど凝視しました

> ' 定義
> Property Let PropertyName(arg1, arg2, value)
>   WScript.Echo arg1
>   WScript.Echo arg2
>   WScript.Echo value
> End Property
>
> ' 代入
> .PropertyName("引数1", "引数2") = "値"

単一引数では
.PropertyName = "値"
ですよね?
引数が増えるたびに左辺側が増えていくんですか?

個人的感覚では

.PropertyName = "値1", "値2", "値3"

なんじゃないかと思ったんですが。

437:名無し~3.EXE
09/04/10 22:10:23 1fjQi+ry
> 引数が増えるたびに左辺側が増えていくんですか?
そうだよ
ヘルプの定義も [Public | Private] Property Let name ([arglist,] value) ってなってるでしょ?
先に省略可能不定数のarglistが来て、最後に単一必須のvalue

> 個人的感覚では
> .PropertyName = "値1", "値2", "値3"
> なんじゃないかと思ったんですが。
プロパティってのはそもそも単一の値(value)を渡す概念だよ。
それ以外の引数(arglist)は値というよりは値の代入先への条件的なもの

例えばグリッド(升目)の3行6列目に"test"を入力する場合に
Property Let GridValue(row, column, value)
と定義して
.GridValue(3, 6) = "test"
って感じ

2chへの書き込みを行う場合で、名前、メール、本文を渡すみたいに、同列の値を複数渡すなら
Sub Write2ch(name, mail, text)
と定義して
Write2ch "名無しさん", "sage", "テスト"
だな

君の先入観とは食い違うのかも知れないが、そういうものだと納得して貰うしかない
どうしても
.PropertyName = "値1", "値2", "値3"
的なことがやりたいなら
Property Let PropertyName(values())
WScript.Echo values(0), vbCrLf, values(1), vbCrLf, values(2) ' Join(values, vbCrLf)
End Property
と定義して
.PropertyName = Array("値1", "値2", "値3")

438:名無し~3.EXE
09/04/10 22:42:09 cPEXIVrz
>>437
わかりました
Property Letをメンバ変数群へのセッターとして使おうとしてましたが
SubかFunctionを使うようにします。

439:名無し~3.EXE
09/04/14 20:30:33 xC/x9gm6
wshからPCをサスペンド(スタンバイ)状態にしたいんですけど、
%windir%\System32\rundll32.exe powrprof.dll,SetSuspendState
を使った方法では休止状態が有効な場合休止状態(ハイバネ―ション)になってしまい、どちらか選べなくて困っています

確実にサスペンド(スタンバイ)に移行できる方法はありませんか?ご教授願います。

440:名無し~3.EXE
09/04/15 03:37:35 HDTq4yYe
URLリンク(scripting.cocolog-nifty.com)

441:439
09/04/15 18:45:22 WeeZsX7B
>>440
ありがとうございます
でもこれだとエクセルの無い環境では使えませんよね・・・

そちらのタスクマネージャを使う方法も見ましたがこちらのOSがVistaなので利用できませんでした。
他の方法はないのでしょうか・・・

442:名無し~3.EXE
09/04/15 19:16:40 kP3+rv1F
>>441
Vistaならshutdown.exeコマンドを呼べばいいと思う。

443:439
09/04/15 20:55:52 WeeZsX7B
>>442
なるほど!そういう方法があったのですね。
よろしければスタンバイに移行するコマンドを教えていただけないでしょうか?

444:名無し~3.EXE
09/04/16 00:17:56 NLAwaM+Q
shutdown/?

445:名無し~3.EXE
09/04/16 00:33:25 uDkOsXWB
タグがバラバラな複数のログを集計したいと思います。
最初の一行目がタグ情報となっており、2行目以降にデータがあります。
区切り文字は「,」です。
指定したタグの情報を取得出来るスクリプトを探していますがサンプルとか
ないですか?

私自身、全くプログラミングの経験がなくて途方に暮れてます。
何していいかさっぱり分かりません・・
自力でなんとかしたいものですが、おすすめのサイトとか
書籍があれば教えてください。

446:名無し~3.EXE
09/04/16 00:50:04 CA45KrUU
いきなりタグとかログとか汎用的な言葉出されても困る
区切り文字ってことはCSVなのか? タグ情報って列名のこと?

447:名無し~3.EXE
09/04/16 01:34:22 jAc01HJm
> 指定したタグの情報を取得出来るスクリプトを探していますがサンプルとか
> ないですか?
スクリプトは基本的に探すものではなく書くものだぞ
何処かにあることを知ってるなら、それを使うのもいいが
人に聞いてまで探すような物じゃない

> 私自身、全くプログラミングの経験がなくて途方に暮れてます。
誰だって最初はそうですよ

> おすすめのサイトとか
何のためにテンプレがあるんだかちょっとは考えよう>>2-5

あとは勉強して実際に書いてみて、どうしても行き詰まったら
具体的にどういう処理をしたくて、どういうコードを書いて、どういう不都合があるのか
また質問においで

ここはスクリプト作成依頼所じゃないので、丸投げでそういうの書いてとかは無しでよろしく

448:名無し~3.EXE
09/04/16 01:55:33 P+x7Pij7
カンマ区切りテキスト(CSV)形式なら、MS-Access/Excel とか OpenOffice.org Base/Calc で集計すりゃいいんじゃないの
まぁしょっちゅうやるならモジュール作ったりした方がいいかもしれない

職場で運用するとかで、どうしてもWin標準添付のモノでしかやっちゃいけないとか、
運転中のシステムのログの集計結果を1時間毎に出す必要があるとか、
ってな制約があるならしょうがないけど、無理にスクリプトを使う必要は無いんじゃないかな
(それならなおさら素人がやるもんじゃないとは思うが)

個人的にはスクリプトでそういうのやるなら perl が楽だと思う

449:名無し~3.EXE
09/04/16 14:47:47 a1NQuIWX
wshで何か一から書こうとするといっさいプログラム言語触ったことがない香具師にとってはハードル高い
(使うだけならともかく)
少なくても素のVisualBasicよりは確実に難しい
ファイル入出力はfso使うとか構造つかむまでそれなりに時間がかかった覚えがある

450:439
09/04/16 19:06:52 sZceJi2u
>>444
ハイバネートのコマンドはあったんですがサスペンドのコマンドが見つからないんですが・・・
やっぱり不可能なんですか・・・?

451:名無し~3.EXE
09/04/16 21:13:09 NLAwaM+Q
vbc/?

452:名無し~3.EXE
09/04/16 23:37:17 gd9zV5VO
おお本当だsuspendにはサスペンドの選択肢がないね。

まあググってみるとこんな感じのコードがいっぱい見付かる。
Set sh = CreateObject("Shell.Application")
sh.Suspend

肝心のMSは実装してねえぞと主張しているのが気掛かりではあるが。
URLリンク(msdn.microsoft.com)

453:名無し~3.EXE
09/04/16 23:57:29 Xx+Mg3lY
っていうか>>440をExcel無しで実行する方法で良いのでは?

454:439
09/04/17 00:19:26 ykM6yz16
>>452
ありがとうございます
試してみましたが反応なしでした・・・

>>453
Excelを使わない方法とはタスクマネージャを使う方法のことですか?
Vistaではメニューにシャットダウンの項目がないんで使えませんでした・・・

455:名無し~3.EXE
09/04/17 01:29:48 qPzkE+HH
> Excelを使わない方法とはタスクマネージャを使う方法のことですか?
違う

456:名無し~3.EXE
09/04/17 02:19:42 eS4a/KzE
CreateObject("Shell.Application").shutdownwindows


457:439
09/04/17 17:41:05 ykM6yz16
>>455
具体的にどういった方法のことですか・・・?

>>456
こっちは反応がありましたが、終了のダイアログが出るだけですね・・・


458:名無し~3.EXE
09/04/17 19:55:59 eS4a/KzE
sendkeys

459:名無し~3.EXE
09/04/21 01:04:56 sxyqTq+t
suspend.exe

460:名無し~3.EXE
09/04/26 12:57:52 hN24fcsP
    Set colOperatingSystems = GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * from Win32_OperatingSystem") 
    For Each objOperatingSystem in colOperatingSystems 
        ObjOperatingSystem.Win32Shutdown(1) 
    Next
    Wscript.Echo "シャットダウン処理を実行しています。"


これを実行して"シャットダウン処理を実行しています。"と表示されるのに、
実際にはシャットダウンされない場合があります。
何が原因と考えられますか?
OSはXPSP2です。

461:名無し~3.EXE
09/04/26 20:36:12 JZHCdzJZ
>>460
引数がまずい。それだと未保存のメモ帳があるだけで止まる。
あとはWScript.EchoじゃなくてWScript.Shellのpopupメソッドで
時間経過したら閉じるようにすべきかも知れない。

しかし仮にスクリプトが正しかったとしても、そもそもWindowsの
シャットダウンがスクリプトからそんなに確実に実行できるもんなのか
という疑問もあるけどね。

462:名無し~3.EXE
09/04/26 21:11:02 6hbGqw4a
>>460
単純シャットダウンごときにわざわざWMI使う香具師初めて見た
いくつか他の方法あるのに

463:名無し~3.EXE
09/04/26 21:24:18 YxEmjG2Q
>>462
> 単純シャットダウンごときにわざわざWMI使う香具師初めて見た
なんてわざわざ言う香具師初めて見た

464:名無し~3.EXE
09/04/26 22:54:07 lJ+cDE8H
いくつかあるんならひとつくらい挙げる心遣いが欲しいぜ

465:名無し~3.EXE
09/04/26 23:00:40 YxEmjG2Q
代替法でなく、理由を知りたいんだろ

466:名無し~3.EXE
09/04/27 01:10:28 nVE9eCMf
なるほど

467:460
09/04/27 08:22:11 RCPGHJ3a
>>461
ありがとうございます
調べてみます

>>462
文法の意味を理解せず
スクリプト丸写しでやってるからです

参考にしたURL
URLリンク(www.microsoft.com)

468:名無し~3.EXE
09/04/28 00:42:11 xpBMK336
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)

469:名無し~3.EXE
09/05/03 00:30:35 nT+UO9ic
なるほど

470:名無し~3.EXE
09/05/04 19:08:31 pB9NsdJr
お前ら、PowerShell使ってますか?

471:名無し~3.EXE
09/05/06 01:12:29 IVrMxyMV
じぇーんじぇーん

472:名無し~3.EXE
09/05/06 01:19:38 i9i6Zpew
わしゃ今や PowerShell 9割、WSH 1割

473:名無し~3.EXE
09/05/06 18:53:58 aMrhoeJz
そんな便利なんか。使ってみるか

474:名無し~3.EXE
09/05/06 23:45:14 z83QDpCi
ほとんどのPCにまともにインストールもされていないものを覚えるのはどうも気が進まない。

475:名無し~3.EXE
09/05/07 00:28:08 iycG5mAd
先月からXPとVistaのビジネス系エディション向けには自動更新配布始まったな

476:名無し~3.EXE
09/05/07 00:38:47 zrBTZ2eF
WSHが自動削除されたら考えるよ。

477:名無し~3.EXE
09/05/07 00:44:44 xlSN69wH
GnuWin32を置き換えるために暇な時に勉強中。
grep -r hoge *
イコール
Get-ChildItem -recurse * | Select-String hoge
だけは覚えた。

478:名無し~3.EXE
09/05/07 00:52:15 zrBTZ2eF
スレあるよ。

Windows PowerShell 2.0
スレリンク(win板)

479:名無し~3.EXE
09/05/07 01:20:52 9lIDUGpx
WSHでDynaWrap使わんでもいいようにさえしてくれれば
それでよかったんだがなぁ。GUIはHTAで我慢できるし。
MSにはいまあるものをもっと大事に育ててほしいもんだ。

480:名無し~3.EXE
09/05/07 01:28:17 iycG5mAd
俺はScriptoMatic使わんでもいいようにさえしてくれればそれで

481:名無し~3.EXE
09/05/07 04:33:33 5VRTlytH
○Scriptomatic
×ScriptoMatic


482:名無し~3.EXE
09/05/07 23:11:01 m087N9RP
PowerShellはWSHを完全に置き換えるものじゃない。
PowerShellからWSHを利用するのもありだし
それに

483:なんだ?オレに振られたのか?
09/05/07 23:40:21 D2qIMiSw
PowerShellはWSHと違って、保存済みスクリプトファイルを実行することが既定ではできない。
ポリシー(=どーせレジストリ)で解除できるが。

484:名無し~3.EXE
09/05/07 23:46:00 cF08cEzM
まあ名前自体シェルとしか名乗ってないわけだしな

485:名無し~3.EXE
09/05/08 15:04:23 XEPp6UuS
なるほど

486:名無し~3.EXE
09/05/08 19:04:02 JrXQqf3G
で、PowerSHELLのデメリットは
・ほとんどのWindowsPCでインストールされていない。
・使える人も少ない。
・資料も少ない。
・保存済みスクリプトを実行できない・・・なんたらかんたら
ということですね。
それでは、PowerSHELLにはどんなメリットがあるのか?
CM明け、>>483さんに説明してもらいます。
じゃあCM!

487:名無し~3.EXE
09/05/08 19:59:26 52AvfZLw
まあ、.NET の機能をまるまる使えるんだから強力だわな

488:名無し~3.EXE
09/05/08 20:27:29 XEPp6UuS
なるほど

489:名無し~3.EXE
09/05/08 20:46:52 htxwcXFB
Windows7にPowerShell V2が標準搭載されるから
Windows7が普及してからだな

490:名無し~3.EXE
09/05/12 17:49:17 IqMqd3mw
なるほど

491:名無し~3.EXE
09/05/16 21:31:26 Rz66M/nY
プリンタのドライバインストール、設定ってWSHでできる?

492:名無し~3.EXE
09/05/16 21:52:22 /SzwN6cr
ドライバ関係なんて具体的には知らないが
C:\WINDOWS\system32\driversにファイルコピーして
ドライバ登録と設定情報をレジストリに書き込みするだけだよな?
そのくらいなら出来るけど素直にinfとかbat+reg使えよって言いたくなるな

493:名無し~3.EXE
09/05/18 16:41:43 1yzJEIC7
なるほど

494:名無し~3.EXE
09/05/23 13:49:22 b8XZakyb
WSHに管理者権限で実行するコマンドってありますか?


495:名無し~3.EXE
09/05/23 16:15:09 aVsYeng2
WSHにはないけど、COMを使うことでWSHで実現することは可能
ググれば情報有るから頑張って勉強しな

496:名無し~3.EXE
09/05/24 15:48:57 qyvwJUMs
WSHで、Volume control かWave のミュートを操作するサンプルってどっか落ちてない?

勤務先PCで User権限のみのXPSP3でつ。

497:名無し~3.EXE
09/05/24 16:45:02 QYLRzYcY
落ちてるものを拾うな

498:名無し~3.EXE
09/05/24 17:14:06 pl1xOw8Z
DirectXが入っていれば

' VBS
CreateObject("MSWebDVD.MSWebDVD").Mute = True 'でミュート、Falseでミュート解除

//JS
new ActiveXObject("MSWebDVD.MSWebDVD").Mute = false;//でミュート解除、trueでミュート

で出来るようだが。

499:名無し~3.EXE
09/05/24 23:27:39 qyvwJUMs
>>498
とりあえず、自PCのwin2kSP4 Power User権限では逝けました。
目的は達成させられそうです。ありがとうございました。


Part4からこのスレにいるのに調べれれないヘタレな俺。

500:名無し~3.EXE
09/05/26 20:08:44 YWv8ag1/
500

501:名無し~3.EXE
09/05/28 18:55:09 0aB6alpl
VBScript と JScript を交配させるたったひとつの方法
URLリンク(d.hatena.ne.jp)

502:名無し~3.EXE
09/05/28 19:47:35 HudDQAtG
で?
使い道は?

503:名無し~3.EXE
09/05/28 23:59:16 6LvlcjwU
そこに山があるからさ

504:名無し~3.EXE
09/06/04 15:20:12 U2shAX9E
OutlookにコマンドラインからTODOなタスクを追加したいんだけど
どこかにサンプルないですか?

addtasktooutlook /high 腹筋1000回!

みたいなかんじで

505:名無し~3.EXE
09/06/04 15:35:37 jKnWPmzV
なんで解説ではなくサンプルを探すの?
そういう思考は浅はかな初心者の悪い癖だよ

サンプル探してその場を凌ぐのではなく
解説探して理解を深めようね

で、OutlookならコマンドラインではなくCOMとしてアクセスな

506:名無し~3.EXE
09/06/07 17:53:10 WTeLPH6o
VBSを使ってhtmlのソースから文字列を抜き出して使いたいのですが
文字参照で書かれた部分をちゃんと変換した後の形にする方法がわかりません
Replace関数で変換ということも考えたのですが、さすがに対応しなくてはいけないパターンが多すぎるので
何かいい方法ってないでしょうか?

507:名無し~3.EXE
09/06/07 18:09:02 nV3JrBhv
いったんDOMオブジェクトにするとか

508:名無し~3.EXE
09/06/07 19:17:10 d05Qikdv
set d=createobject("htmlfile")
d.innerHTML="{"
msgbox d.innerText

509:名無し~3.EXE
09/06/08 06:20:18 oqXReFxD
でも実際の所、常用されれる文字実体参照なんてそんなないよね

510:名無し~3.EXE
09/06/08 12:10:20 rvmZQbAH
だからなに?

511:名無し~3.EXE
09/06/08 12:38:27 ieBvgEr1
置換のほうが速いって

512:名無し~3.EXE
09/06/08 12:42:16 YSvVXFgQ
楽なのが一番だろ

513:名無し~3.EXE
09/06/08 16:49:37 ANWjb6BD
selectで一致したら変数に変換後のパターン放り込んどいて
最後にその変数使ってReplace関数かけるのが結局一番わかりやすくない?

514:名無し~3.EXE
09/06/09 00:56:26 mt6Snbpi
そんなに遅いのか?

515:名無し~3.EXE
09/06/09 23:47:32 n59VtdgS
>>513
>>508 みたいにスクリプト書いてくれれば他の人の役に立つよ

516:名無し~3.EXE
09/06/11 12:35:34 pvxygoc6
なるほど

517:名無し~3.EXE
09/06/21 03:06:07 pQN87Jvn
コンピュータのロック解除後やスタンバイ復帰後に、スクリプトの命令を実行するにはどのような方法があるでしょうか?

PCが一定時間操作されなかった場合に、既存のロックアプリを起動して解除後にダイアログ表示したいため、自作SCRファイル経由でロックアプリを起動し、その際にVBS(WSH)ファイルをキックしています。
ところが、ロックやスタンバイ時にプロセス(wscript.exe)が、SCRともどもロックやスタンバイ時に終了してしまうので、困っています。

通常(notepad.exeなど)は、ロック前にDo~Loopで待機させ、WMIのイベント(当該アプリの起動と終了)を監視しておくことで、WSHの命令を実行できています。
ロックの場合、起動時間は処理の順番や実行待機によって解決できなくもないですが、いずれにしても終了時間の取得とダイアログ表示はほぼ失敗してしまいます。

ちなみにWSH側でやりたいことは、ロックやスタンバイの開始時間と解除(終了)時間をイベントログに書き込んで、解除後にダイアログに表示する、という処理です。

長くなりましたが、識者の方、アドバイスをお願いいたします。

518:名無し~3.EXE
09/06/21 05:37:33 9AsxSuL8
一番手っ取り早いのは別言語で作る方法だな
WSHでやりたいとしても、目的の部分はCOMとして作る必要があるから
別言語使わなきゃならないことには変わらないので
だったら別言語でCOM作ってWSHで動かすより
そのCOMを作れるような言語で直接アプリを作った方がいい

519:名無し~3.EXE
09/06/21 14:02:20 YkrwZ8hC
>>517
.scrから呼び出すwscriptを単なるWScript.ShellオブジェクトのRun()だけ
書いてるヤツにすればいい。そんでRun()の引数を終了を待たないヤツにして
本来のwscriptを呼び出せば失敗する可能性は低くなる。

あと注意点は次のものがあるな。
 ・その処理だと、ユーザーに気づかれない必要があるんじゃないの?
 ・Windows2000だとWMIが入ってない場合もある。
 ・そのときのログオンユーザーの権限が低いと、イベントログに書き込むのが
  エラーを出す可能性がある(気づかれる)。

520:517
09/06/21 16:34:28 hZdAyqNW
>>518
COMを自作するには、知識も時間も足りないし、専門職じゃないので運用・メンテ面からも難しいです。。
スレ違いかもだけど、今後のために(こういった連携においてWSHと相性のいい)お勧めの開発環境や言語があれば教えてください。

>>519
scr→WSH(WScript.ShellオブジェクトのRun())→WSH(ログ記録&通知)の3重にするってことですか。
ロックアプリは会社のものなので、処理だけ考えて後日検証してみます。

しかし、Run()だけで引数なしだと、キックされる側は「WScript.Arguments.Count = 0」で単独起動させない策は、確かにできないですね。
数行なら保守性は変わらなそうだし、そちらはVBEで配布するかな。。

Win2Kやログオンユーザ権限は、XP&administratorsグループのアカウント対象で問題ないです。

おっしゃるように最低限の隠蔽策を講じつつ、件の状況で処理を実現したいために、ややこしいことになってます。

あと一歩なだけに悔しいです。


521:名無し~3.EXE
09/06/25 15:49:01 qQpWklfp
vista + JScript で特殊フォルダ「ミュージック」のパスを取得する方法はありますでしょうか?
Shell.SpecialFolders でマイドキュメントは取得できるのですが・・・

522:名無し~3.EXE
09/06/25 15:52:02 V72CWr8X
おれもついでにイイか?
Xp + Jscriptで隣の奥さんの使用済みパンティーを取得する方法はありますでしょうか?
買い物のときにベランダ沿いに侵入すれば洗ったパンティーは取得できると思うのですが・・・

523:名無し~3.EXE
09/06/25 16:03:25 TkrEyaw6
new ActiveXObject('shell.application').Namespace(13).Path

524:名無し~3.EXE
09/06/25 16:29:13 qQpWklfp
>>523

早速試してみたところ・・・
なぜか undefined になります。

var x = new ActiveXObject('shell.application').NameSpace(13);
WScript.Echo("path="+x.path);

x.title には「ミュージック」がセットされていました。

525:名無し~3.EXE
09/06/25 16:33:43 TkrEyaw6
Path

526:名無し~3.EXE
09/06/25 16:34:46 TkrEyaw6
.Self.Path

527:名無し~3.EXE
09/06/25 16:35:10 01tMvTm9
new ActiveXObject('yourfilehost.application').Namespace(mature).Panty

528:名無し~3.EXE
09/06/25 16:37:04 qQpWklfp
self.path でいけました!

ありがとうございました(^^

529:名無し~3.EXE
09/06/25 16:39:30 01tMvTm9
used.Panty でいけました

ありがとうございました(^^

530:名無し~3.EXE
09/06/26 21:34:25 CNF38epp
哀しいものを見た^^

531:名無し~3.EXE
09/07/15 16:25:30 B2XAn6wr
xmlhttpを使用して、リファラーを送ってデータを取得したいのですがうまくいきません

set http = WScript.CreateObject("microsoft.xmlhttp")
http.open "GET", "URLリンク(taruo.net)", false
http.setRequestHeader "Referer", "テストテスト"
http.send
WScript.Echo http.responseText

診断君で試してみたところ、やっぱり送れていないみたいなんですが何か間違っているんでしょうか?

532:名無し~3.EXE
09/07/15 17:08:41 GKwZ01/x
>>531
スレリンク(tech板:48-51番)
ということらしいよ

533:名無し~3.EXE
09/07/15 17:27:02 j+tCnxTF
>>532
WindowsUpdateでその辺の仕様が変わるんだな。
これからも起き得るのかね?あぶねえな。
前にやったときは、さっさとCurl.exe使って逃げたわ。

534:名無し~3.EXE
09/07/15 18:21:02 GKwZ01/x
IEでも動かせるオブジェクトなんだからある程度は仕方なかんべ

535:名無し~3.EXE
09/07/15 18:39:51 7vBKI4Qq
さすがMS、酷い変更だ。リファラすら指定できないなんて。
4.0 5.0 がフルパス吐くのは、別の意味でセキュリティーの問題じゃないか?
ユーザー名に実名使ってる環境の場合、フルパスに実名含まれてしまったり・・・w

536:531
09/07/15 23:13:42 G8m72XGt
>>532
そういうことだったんですね
とりあえずMsxml2.XMLHTTP.5.0にしてみたら送れたのでよかったのですが
何だかcookie送る方にもバグがあるんですね・・・・
対策ページを見てみましたがうまくいかず
xmlhttpを使うのはあきらめました

537:名無し~3.EXE
09/07/16 23:48:35 s9Fi+J+f
自分の環境には5.0入ってないんで、Msxml2.XMLHTTP.6.0で試してみたが、Referer送れない。orz

538:名無し~3.EXE
09/07/17 00:25:49 MIUEZcIb
PowerShellへの移行策の一つと言うことか

539:名無し~3.EXE
09/07/19 11:53:25 BSXTI/Xi
wsh(≒jscript)はwineで使い物になる?PowerShellはwineで使い物になる?
詳しい人教えてくれ。

540:名無し~3.EXE
09/07/29 01:05:20 nmGF194p
使用言語はJavascriptで、他のファイルの関数を使うにはどうすればいいでしょうか?
wsfでインクルードするしかないでしょうか

541:名無し~3.EXE
09/07/29 01:12:57 U3tVg9DC
テキストとして読み込んでeval

542:名無し~3.EXE
09/07/29 01:22:33 nmGF194p
ありがとうございます!これでできました。
URLリンク(cwashington.netreach.net)

543:名無し~3.EXE
09/07/31 11:39:46 Gyufjk11
アプリの設定がメニューの深いところにあって、
いちいちメニュー階層を順に開いていくのが面倒なので
SendKeysで自動的にやろうとおもったのですが、
IMEがオンの状態ではメニュー項目がうまく選択できませんでした。

強制的にIMEをオフにしたいのですが、
vbsでIMEの制御は可能でしょうか?

544:名無し~3.EXE
09/07/31 15:34:40 fPLWy6Es
不要

545:名無し~3.EXE
09/07/31 23:54:08 f/yjxAXd
ウィンドウ操作はそれ用のCOMを覚えた方が先々便利

546:名無し~3.EXE
09/08/02 18:03:13 yp9Titym
Sever 2008 x64でオブジェクトが作成できませんと怒られてbasp21が動かない
何か方法はあるんでしょうか?

547:名無し~3.EXE
09/08/02 18:11:53 TBxPfJAM
32bit版のwscript/cscriptで実行する

548:546
09/08/03 07:14:19 rN5JviGQ
>>547
あっさり解決できました
本当にありがとうございました

549:名無し~3.EXE
09/08/03 08:20:08 G3uibfz0
WSH & 周辺環境は、32bit版さえ使えば、この先もしばらく使えそうなのか?
ますますPowerShellを覚える気力がなくなってきた。どうしよう・・・。

550:名無し~3.EXE
09/08/03 08:46:05 d466V8k7
だったら使わなければいいんじゃね?

551:名無し~3.EXE
09/08/03 23:32:17 19p30T4e
だったら覚えなければいいんじゃね?


552:名無し~3.EXE
09/08/04 00:04:23 DXguE6Su
わかりました。しばらくはJScriptで行きます。
Webでもローカルでもマクロでも一番使い勝手がよさそうなんで。

553:名無し~3.EXE
09/08/07 19:33:38 E5uAjbVg
xmlhttp = new ActiveXObject("Msxml2.ServerXMLHTTP");
xmlhttp.setTimeouts(20000, 20000, 20000, 20000);
xmlhttp.Open("GET", "URLリンク(www.google.co.jp)", false);
xmlhttp.Send();

タイムアウト設定が必要なのでServerXMLHTTPを使おうと思ったのですが、
3行目でオブジェクトがプロパティかメソッドに対応していないとエラーがでます。
どこが間違っているのか教えてください

554:名無し~3.EXE
09/08/07 19:43:20 x3CcgWEQ
Openじゃなくてopen
URLリンク(msdn.microsoft.com)

555:名無し~3.EXE
09/08/07 20:10:07 E5uAjbVg
ありがとうございました。ついでに4行目もsendなんですね・・・

556:名無し~3.EXE
09/08/07 21:02:15 uHcZtJ30
vbscriptにしろよ

557:名無し~3.EXE
09/08/10 13:32:44 4SR4aBtB
いまさらVBSCRIPTはねえだろうw
JSCRIPTなら他の言語にもすぐに応用が利くからわからんでもないがw

558:名無し~3.EXE
09/08/10 18:16:35 Qzycj5VH
解ってない奴現るw

559:名無し~3.EXE
09/08/10 18:21:23 1VenD9zg
VBはいまだによく使うよ。

560:名無し~3.EXE
09/08/10 19:21:04 MjZIyAdN
>>559
その書き方だと、VBとVBScriptを混同しているように読めるが……。

561:名無し~3.EXE
09/08/10 19:26:52 1VenD9zg
別に混同しちゃいないけどさ、JSより、
VBの文法はいまだによく使うよってこと。

562:名無し~3.EXE
09/08/10 20:20:50 RqyYDiuX
WebのJSとwshのJSって文法ほぼ一緒だけど
使うオブジェクト違うから書き方変えるしね

だったらVBSで文法レベルから完全に違うほうがわかりやすかったりする

563:名無し~3.EXE
09/08/10 23:11:57 67y+NCjl
別に金が掛かる訳でもなし、適材適所で両方使えばええがな

564:名無し~3.EXE
09/08/11 00:14:32 7Q2C1XtL
EnumeratorだらけならVBSの方が簡潔に書ける。ぐらいしか思い付かない。

565:名無し~3.EXE
09/08/11 00:17:18 ihFQei8Z
たまにby Refの受け取りとかあったりするぐらい。

566:名無し~3.EXE
09/08/11 11:55:36 5VgQAFGn
MsgBox
Inputbox
使えないだろ>JScript

567:名無し~3.EXE
09/08/11 15:01:44 2Se6dKOv
Grepしたらこんなのが出てきた。すっかり忘れていたwww

function input(){
/***** JScript で VBScript の InputBox() 関数を使う関数 *****/
var scVB, VBarg, fvartype, i;VBarg = '';
scVB = new ActiveXObject('ScriptControl');
for (i = 0; i < Math.min(arguments.length, 7); i++){
fvartype = typeof(arguments[i]);
if (i > 0){VBarg += ', ';}
if (fvartype == 'number' || fvartype == 'object' && arguments[i] instanceof Number){
VBarg += arguments[i].toString();
} else if (fvartype != 'undefined'){
VBarg += '\"' + arguments[i].toString().replace(/[\"]/g, '\"\"') + '\"';
} else if (i < 3 || i == 5){
VBarg += '\"\"';
}
}
VBarg = VBarg.replace(/[\r\n]+/g, '\" \& $&\"').replace(/[\r]/g, 'Chr\(13\) \& ').replace(/[\n]/g, 'Chr\(10\) \& ');
scVB.Language = 'VBScript';
return(scVB.Eval('InputBox\(' + VBarg + '\)'));
}

var ret=input("説明文","タイトル","デフォルト100");

WScript.Echo(ret);

568:名無し~3.EXE
09/08/11 15:27:19 tCC4Lofi
そりゃActiveXObject使えばどうにでもなるさ
そんなのは皆知ってるし、ActiveXObject使うなら
わざわざVBSのGUIに拘る必要もないだろw


569:名無し~3.EXE
09/08/11 18:03:52 qMEHxjWM
COMは全て別途DLLが必要とでも思ってるんだろうか。

570:名無し~3.EXE
09/08/11 19:53:02 5VgQAFGn
EXEもあるが?

571:名無し~3.EXE
09/08/11 21:25:54 tCC4Lofi
>>569
なに勘違いしてるの?

572:名無し~3.EXE
09/08/11 21:50:26 5VgQAFGn
ちょっとCOM乱してる?

573:名無し~3.EXE
09/08/11 22:00:53 tCC4Lofi
だれが上手いこと言えとw

574:名無し~3.EXE
09/08/15 07:46:06 avxpvV7T
xmlhttpを使って同じURL(情報に変化有り)をループ処理で取得しようとすると
キャッシュを使ってるみたいで、1回目に取得したもののコピーしか取得出来ないのだけど
そのつど新しいデータを取得するにはどうしたらいいんでしょうか?

575:名無し~3.EXE
09/08/15 08:01:54 9s7XDhMw
HTTPリクエストに(ここではスレ違い)ついて勉強しましょう

576:名無し~3.EXE
09/08/15 10:09:44 avxpvV7T
>>575
送るヘッダなんかもいじってみたけどうまくいかなかったのですが
不可能ってことなんでしょうか?

577:名無し~3.EXE
09/08/15 11:15:57 qvpOcgUD
ブラウザだって[Ctrl]+[F5]で強制再読込できるんだ。出来ないわけ無い。
これ以上は、スレ(板)違い。

578:名無し~3.EXE
09/08/15 12:04:35 avxpvV7T
スクリプトでxmlhttpを使い、同一URLを連続で取得した場合に
データを新たに取得に行かないという問題なのですが・・・

579:名無し~3.EXE
09/08/15 12:38:57 7WPexxIz
xmlhttp キャッシュ でググれ

580:名無し~3.EXE
09/08/15 16:26:37 5dfMd7fo
「スレ違い」「板違い」と指摘されてるのに質問を続ける奴って何なの?

581:名無し~3.EXE
09/08/15 17:41:19 avxpvV7T
>>579
ありがとうございました、出来ました

>>580
上のほうでも同じようにxmlhttpの挙動に対する質問などもありますし
スレ違いだとは思わなかったので続けました
純粋に疑問なのですがどのあたりがスレ違いなんでしょう?
ここがwshのスレならば、範囲内だと思うのですが?

582:名無し~3.EXE
09/08/15 22:23:22 IaztbDhN
xmlhttpの質問をここでするのは、トヨタの車にSonyのカーナビ付けてる状況で
カーナビの操作不良トラブルでトヨタに問い合わせるようなものだ
xmlhttpはwsh用でもなんでもなく、
いろんな言語(車)に使える汎用コンポ(カーナビ)だってことを覚えて置いて

583:名無し~3.EXE
09/08/16 00:51:24 OrGIf2da
過疎ってんだからいいじゃん
無駄に細けーよ

584:名無し~3.EXE
09/08/16 01:44:42 kXw4hMGI
気分いい人を見つけるか、気分良くさせる話術を身に付けろってことさね

585:名無し~3.EXE
09/08/16 07:40:28 y/oOeE3m
むしろそれをスレ違いと言ったらこのスレには何が残るというのか

586:名無し~3.EXE
09/08/16 08:34:22 wWl4IgK0
wshの話題
つーか、そもそもここはそういうスレだろ?

それじゃ話題が少ないとか言う奴も居るかも知れないが、
少ないと何か問題あるのかと問いたいね

2chの鯖(とcgi)が弱かった頃は、話題(書き込み)が少ないと
すぐに圧縮で落とされたから、無理にでも話題作りをしなくちゃならなかったが
そういう問題が無くなった今となっては、無理に話題広げるより、
少ないながらもスレタイに沿った濃密な話題のみの方が断然良いからね

587:名無し~3.EXE
09/08/16 11:11:34 92sq03tG
なんだ、クレクレ厨か

588:名無し~3.EXE
09/08/16 13:22:32 RY/92RaQ
どのオブジェクトからがスレ違いで
何が許容範囲なのか明確に例題を挙げてもらいたいわw

589:名無し~3.EXE
09/08/16 13:34:08 Ep6+8lZw
俺様基準ってことだろ

590:名無し~3.EXE
09/08/16 16:03:44 r1QiDn9d
>>588
オブジェクト単位でどれがいい悪いじゃなく、内容がwsh特有の問題なのかどうかという話だと思うんだけど。
例えば、あるオブジェクトがwshで使ったときのみ違う動作をする、というような話しならこのスレ向き、
というか他所でしても「こっちいけ」って誘導されるような話だと思うし、
そうではなく、どの言語・環境で使っても同じ動作をするものを「こうさせたい」って話しなら
それはそのオブジェクトか、それが対象とする規格の話題を扱うスレのほうが適しているだろうと思う。

591:名無し~3.EXE
09/08/16 16:17:49 92sq03tG
言葉にならない 私の想い けれど いつかあなたに きっと・・・

592:名無し~3.EXE
09/08/16 16:26:31 xjMN8GP2
スレ違いを指摘する奴は移行先を示さない法則

593:名無し~3.EXE
09/08/16 16:35:30 UwvoqxIq
なんでスレ違いの奴に、わざわざこっちが移行先を探してやらなきゃならないんだ?

594:名無し~3.EXE
09/08/16 17:56:05 aQFRMbgr
FileSystemObjectの文字コードはどうやって決まってるの?
外国じゃシフトJISじゃないよね?

595:名無し~3.EXE
09/08/16 19:12:33 Y/yZE8LX
>>594
wikipedia
>マイクロソフト(日本法人)元会長の古川享によると、Shift_JISの制定には、
>アスキー、マイクロソフト(米)、三菱電機、マイクロソフトウェア・アソシエイツ、デジタルリサーチ(米)が関わり、

596:名無し~3.EXE
09/08/16 21:59:49 kXw4hMGI
そんなことはどうでもいいから
Scripting.FileSystemObject なんつう
長くて打つのがめんどいProgIDをどうにかしてくれ

597:名無し~3.EXE
09/08/16 22:03:45 92sq03tG
ひらがな4文字にするべき。

598:名無し~3.EXE
09/08/16 22:04:22 2HQFAnKG
>>596
自分のPC上でなら、設定次第でいくらでも短くできるけど?

というか、初心者はコードの文字数や行数的な短縮に躍起になる次期があるが
コードは読解性や最適化(意味としての短縮)の方が重要だよ

599:名無し~3.EXE
09/08/16 22:07:49 kXw4hMGI
環境依存の少なさも大事

600:名無し~3.EXE
09/08/16 22:13:00 2HQFAnKG
もちろん
だからこそ「自分のPC上でなら」と
その重要な点が犠牲になることを明記した

601:名無し~3.EXE
09/08/16 22:15:29 2Jv4So8E
>>597
すくぷり

602:名無し~3.EXE
09/08/16 22:39:29 gcXO2ZEs
VB2005以降みたいにスニペットでホイホイと行かないのはしょうがない話


603:名無し~3.EXE
09/08/16 22:53:08 jevHYVxW
入力補完機能があるエディタを使えば問題ない。

604:名無し~3.EXE
09/08/17 19:38:25 QtOZzW/u
>>590
じゃぁFileSystemObjectやWScript.Shellなんかもスレ違い?

605:名無し~3.EXE
09/08/18 19:49:10 kMLD2t0b
FileSystemObjectスレやWScript.Shellスレがあるのか?

606:名無し~3.EXE
09/08/18 20:13:47 S2hFvVkz
FileSystemObject を引き合いにだして、ディレクトリ構造とかファイル属性について質問してるようなもんだろ。
それらは、FileSystemObject や xmlhttp の固有の問題じゃない。

FileSystemObject だけでなく コマンドプロンプトやエクスプローラなどファイル管理共通の話題だし、
今回の例だとhttpヘッダの話題で、ブラウザやAjaxを使ったアプリ、telnetでhttpで鯖と対話するときとか、
あとはオミトロンなどでも、利用っつーか知らないと上手く扱えないもんだ。

httpヘッダの解説ページでも見ればすぐに解決するだろうし、さらっと答えても差し支えないけど、
答えたばっかりに、教えて君的にどんどんと質問レスばかりで埋まるようだと
完全にスレ違いになるし、それが嫌なんだろう。

607:名無し~3.EXE
09/08/18 20:16:17 p71GJEvH
大丈夫だよ、埋まるほども人いないから

608:名無し~3.EXE
09/08/18 21:01:59 rhBQ6KVW
というか>>590は一行目でオブジェクトが何かでなく内容の問題だって書いてるのに
それに対してこのオブジェクトはどうですかとレスする>>604が不明。

609:名無し~3.EXE
09/08/19 10:29:33 WGg2VE8w
ま、まさか、オマイらエディタの入力補完機能使わんで、全部手打ちにしてるんか?
そりゃ無茶だw キーボードも早く壊れるし、指も疲れる、可読性も良くない。
入力補完機能は日本語辞書と違って64文字の制限ないから、長い文を登録できるんだぜ。
フリーのメジャーなエディタならたいていは使える機能だわな。
関数やプロトタイプも余裕で登録できるんで、ぜひ使ってやってください。

610:名無し~3.EXE
09/08/19 12:13:40 qMq0YoQ5
全部手打ちだ。

611:名無し~3.EXE
09/08/19 16:28:50 oyXIXNnQ
>>594
Asc/ChrはSetLocaleで変わるがFSOは変わらんね
DLLで固定じゃないか

612:名無し~3.EXE
09/08/19 17:38:16 R8jmqPSw
notepad最高

613:名無し~3.EXE
09/08/24 00:47:36 UhNbx6kV
WSHでスキャナとカメラの中のフォルダって扱えませんか?

614:名無し~3.EXE
09/08/24 08:24:31 jZ03yQcV
無理
そもそもWSH自体には、ローカルであってもファイルやフォルダを操作する機能など無い

615:名無し~3.EXE
09/08/24 18:11:44 1pBOD32x
>>614
?? ファイルフォルダ操作は簡単だろ。スキャナダメはそうなんだけど。

616:横レス
09/08/24 18:39:02 LAYapniR
>>614は「FSOはWSHの一部ではないよ派」だと思われ

617:名無し~3.EXE
09/08/24 19:11:57 R5rjUpeC
wscript.exeにはfsoが内蔵されてるが?

618:名無し~3.EXE
09/08/24 23:02:22 gGokT/cL
wscript.exeにはfsoが内蔵されてないが?
WScript5.6パッケージには、FSOが『同梱』されてはいるが
数種入ってるサンプルCOMのひとつがFSOってだけの話で
別にFSOがWSHという実行ホストと直接関係有るわけではないし

619:名無し~3.EXE
09/08/24 23:19:39 urIpYgAU
MS-Windowsってなんなの?

620:名無し~3.EXE
09/08/25 00:23:25 hoDlDin+
wscript.stdin.readlineとかは内蔵fsoだが?

621:名無し~3.EXE
09/08/25 01:04:38 F2Ajuss/
内蔵fsoってなによ ていうかFSOって何か分かってるか

622:名無し~3.EXE
09/08/25 01:13:22 TXbKnVvq
どうでもいい

623:名無し~3.EXE
09/08/25 03:18:31 hoDlDin+
>>621
>>621
分ってないみたいだから、wscript.exeをobject browserで見てみるとよいよ

624:名無し~3.EXE
09/08/25 06:13:40 O29bAjvd
なんだ、ただ勘違いしてるだけかw

625:名無し~3.EXE
09/08/25 15:11:31 /GJjTGNi
ほれ

Library IHost
Windows Script Host (Ver 5.6)
Class FileSystemObject
IHost のメンバ

626:名無し~3.EXE
09/08/26 05:38:00 B2LpVl9D
┐(゚~゚)┌

627:名無し~3.EXE
09/09/04 17:03:19 jKjPpgpi
>>620
VBSでこんなクラスを作ったとする

Class Hoge
  Public fso
  Private Sub Class_Initialize
    Set fso =  CreateObject("Scripting.FileSystemObject")
  End Sub
End Class

このHogeクラスはFileSystemObjectを内蔵している?

628:名無し~3.EXE
09/09/04 17:31:08 fqDq7lDU
粘着馬鹿が居る
scrrun.dllを削除して使えるかどうかで判定できるだろ?

629:名無し~3.EXE
09/09/04 18:10:05 jKjPpgpi
>>628
「(null): 指定されたモジュールが見つかりません。」って言われた

たぶんXPのWindows File Protectionが削除されたscrrun.dllを
速攻で復活させてるだけじゃ?

630:名無し~3.EXE
09/09/04 18:23:58 ELlrcgTf
標準でそのオブジェクトが使えるなら、どうでもいい話じゃないのか?
Windowsでしか使えないんだし。

631:名無し~3.EXE
09/09/04 18:45:43 fqDq7lDU
regsvr32 /u scrrun.dll

632:名無し~3.EXE
09/09/04 18:49:46 CBscgCCx
つまりwscript.exeはFileSystemObjectを持ってて実装はscrrun.dllに丸投げ
ただしCOM経由じゃなく直接dllをロードする
てことでいいのか
まあ何でも良いが

633:名無し~3.EXE
09/09/04 19:18:57 fqDq7lDU
なにを根拠に妄想をたくましくしてんだ?ぼけ

634:名無し~3.EXE
09/09/04 19:29:53 CBscgCCx
もちろん629からだが
是非ご高説賜りたいもんだね

635:名無し~3.EXE
09/09/07 09:49:49 niBBT+9B
この雰囲気、好きくない

636:名無し~3.EXE
09/09/09 06:43:01 mKiDYFp0
質問:WSHまたはWindows Scripting Component で任意のインターフェースをImplementsしたクラスを作成する方法はありませんか?

■経緯
Excel VBAで、外部COM DLLを使ってスクリプト作成しているのですが、
これをWSHに移植しようとしています。

しかし、問題は外部COM DLLで定義されているインターフェースのImplementsが必要な事です。
WSHではImplementsは非対応のようなので、困っています。

ググって見たところ、Windows Scripting Component にはImplementsを指定する箇所がありますが、
指定してみても「インターフェイスハンドラを作成できません」というエラーになります。
(hoge.wsc の中に <implements type="dhRichClient3.IFunction" /> <implements type="IFunction" /> のように記述)
どうも、このImplementsに指定できるインターフェースは、ASPとBehaviourというもののみのようです。
(何か勘違いをしている可能性が大ですが…)

任意のインターフェースをImplementsする方法はないでしょうか。

■やろうとしていること
SQLiteを使った、SQL文中でのユーザ定義関数の定義。
外部COM DLLは「dhRichClient3」、インターフェースは「IFunction」
リファレンスマニュアル:URLリンク(www.datenhaus.de)
■ASP,Behaviour以外のインターフェースを実装しようとしている人の質問(回答なし)
URLリンク(www.palm-jp.net)


637:名無し~3.EXE
09/09/10 19:09:44 Rxuv3x7H
XP-SP3ってデフォ5.7なのね
今までI漏れのPCにIE7入れたからかと思ってたわ
つーことはXPSP3-IE6-WSH5.7の環境もあるってことか

638:名無し~3.EXE
09/09/11 00:00:23 jfkxOInx
俺も知らんかった

639:名無し~3.EXE
09/09/11 10:52:35 mRbnvINb
つーか俺が先日買ったばかりのWinXPインストール済マシンが、最初からXPSP3-IE6-WSH5.7だったよ。

640:名無し~3.EXE
09/09/11 12:27:43 SdwA2vDJ
Win7のVerはいくつだろね

641:名無し~3.EXE
09/09/11 14:55:05 XbLP+/qN
InternetExplorer.ApplicationでzipファイルにNavigate2すると
「ファイルのダウンロード」ダイアログが出るのですが、
これを自動で保存する方法はないでしょうか?

642:名無し~3.EXE
09/09/11 14:58:31 cqrP63L1
sendkeys

643:名無し~3.EXE
09/09/11 18:15:43 iWeyg2oG
>>631
オートメーション サーバーはオブジェクトを作成できません。
URLリンク(www.dotup.org)

644:名無し~3.EXE
09/09/11 19:57:50 oH1Rk1Zr
>>640 IE8だから最低でも5.8だろ多分。
IE7だから5.7ってわけでもないんだが。

645:名無し~3.EXE
09/09/11 21:53:14 cqrP63L1
5.7になって何かよかったことがあるのか?

646:名無し~3.EXE
09/09/12 01:16:59 lalkaeIA
細々とでもアップデートしてくれること自体がいいんじゃん
番号だけかもしれんけど

とりあえず捨て去ることはないという証明にはなる

647:名無し~3.EXE
09/09/12 03:33:40 WpoHmTYS
>>640
System32のjscript.dllのプロパティを見ると5.8.7100.0となっている。
Windows 7 RCの64ビット版。

648:名無し~3.EXE
09/09/12 11:50:44 lalkaeIA
>>647
ありがとう
よかった

649:名無し~3.EXE
09/09/12 19:13:12 WNZ2NMuP
cmd.exeはアップデートないけど、ちっともなくならないな
んでも、cmd.exeをアップデートしてほしいな

650:名無し~3.EXE
09/09/12 21:24:04 uHTfzOPd
ちゃんとコマンド増えてるだろ

651:名無し~3.EXE
09/09/12 22:49:33 WNZ2NMuP
なんちゅう内部コマンド?

652:名無し~3.EXE
09/09/12 22:53:14 VYRMYvSC
norip
oshio
komuro

653:名無し~3.EXE
09/09/13 00:31:00 mwzFyCze
dictionary オブジェクトの item に配列を入れた場合、直接値の変更はできないんですか?

Set d = CreateObject("Scripting.Dictionary")

d.Item("hoge") = Array("bing", "bang")

d.Item("hoge")(0) = "ting"

' bing が出力される。
WScript.Echo d.Item("hoge")(0)

654:名無し~3.EXE
09/09/13 00:48:58 GSibjpcz
だな

655:名無し~3.EXE
09/09/13 00:50:35 E0QFUGQF
VBSの配列の代入は値のコピー。
だから、
d.Item("hoge")(0) = "ting"

Dim x
x = d.Item("hoge")
x(0) = "ting"
に分割され、このときxへの代入時に配列丸ごとコピーされて
d("hoge")が持ってる配列とxが持ってる配列は別物になる。
めんどくさい仕様だなぁ。

656:名無し~3.EXE
09/09/13 22:57:18 GSibjpcz
だね

657:名無し~3.EXE
09/09/14 14:12:31 ym3DmcgO
で、どうする?

658:名無し~3.EXE
09/09/16 12:46:23 O8adoxSh
そういう質問じゃないので不要

659:名無し~3.EXE
09/09/22 17:47:22 f8eHyCtX
Vista/7でスクリプトが管理者権限で実行されてるかどうかを調べる方法ってある?

660:名無し~3.EXE
09/09/22 23:43:20 ua4fgPA7
>>659
まず管理者権限かどうかを調べるってのはVistaより前でも結構難しいのよ。
そりゃローカルのユーザでログオンしてて自分が管理者かどうかを調べるなら
WMIで簡単だけど、ドメインのユーザだとドメインに聞かないとダメだろ?
だから簡単じゃない。

それにVista/7だと、それ以前にUACが有効になってたりそのUACがデフォルト
より厳しい設定になってる可能性もあるだろ。そうすると、たとえ本当に管理者で
入っていたとしてもスクリプトのチェックが蹴られたり、チェックで通っても
実際にしたい処理のときにUACに蹴られる可能性もある。

だから何をしたいのかをまず絞り込んでから個別に作るべきだな。

661:名無し~3.EXE
09/09/24 22:24:17 xUyLc6Jz
最近のヘイ スクリプティング ガイ!
がPowerShellばっかりな県


662:名無し~3.EXE
09/09/25 00:40:04 rKkYwStT
さすがにネタ切れだろ

663:名無し~3.EXE
09/09/25 17:40:03 04nmuvJP
むしろMS的にPowerShellよりWSHを推してたら驚く

664:名無し~3.EXE
09/09/25 19:19:58 rKkYwStT
その程度のことでは別に驚かないが?

665:名無し~3.EXE
09/09/27 17:59:32 TzLFyzEj
もしPINVOKEのCOMが標準提供されたらWSHの時代だな

666:名無し~3.EXE
09/09/27 18:20:18 kSF/I/Bf
まあ、諦めよう。

667:名無し~3.EXE
09/09/28 10:00:42 kC4ZBQjl
VBS - FSWikiLite
URLリンク(tuka.s12.xrea.com)

668:名無し~3.EXE
09/09/28 10:34:11 kC4ZBQjl
Markopee::Notebook: ドライブレターのないボリュームの容量を取得する
URLリンク(markopee.blogspot.com)

669:名無し~3.EXE
09/09/28 17:06:27 2vo3Sj9E
PINVOKEのCOMをどっとねっとで書いて、WSH実行時に動的コンパイルして
インストールしないで使えばええんじゃね

670:名無し~3.EXE
09/09/29 20:31:00 nRCW7wUP
そこまでするなら素直にPowerShell使ったほうがいいような

671:名無し~3.EXE
09/09/29 20:52:12 2osslqGd
PowerShellのPINVOKEもめんど

672:名無し~3.EXE
09/09/29 21:21:02 BcdCkTRc
PowerShellなんてのも有るんだ。
なんかでこのスレ覗いて、そのままずっと自動レス取得にしといて良かった。
ちょっとtechnet読んでくる。

673:名無し~3.EXE
09/09/29 23:26:16 w+WE5kvG
PowerShellの方はAdd-Typeのお陰で随分楽になった
まあPythonのctypesみたいなのが元からあるのが理想だけど

674:名無し~3.EXE
09/09/30 04:27:48 VE3quA4g
367 :名無し~3.EXE:2008/02/19(火) 21:38:37 ID:qK/Wztn/
おれはこのVBSを作って自作ソフトからファイル渡ししてるけど
DoLoopとかforで回せばいいじゃん、めんどくさがりだなあ
'IrvineQueueFolder.vbs 'キューフォルダを指定してURLやURLリストファイル郡を登録
'IrvineQueueFolder.vbs 引数1 引数2 引数3 ...
'引数は、[キューフォルダ]または[URL]または[URLリストファイル名]で混在可
'キューフォルダは"/"で始まるように絶対指定する
QueueFolder="/Default/dorothy2/Auto" 'キューフォルダの指定(デフォルト)
'
Set Irvine = WScript.CreateObject("Irvine.Api")
Set arg = WScript.Arguments  'コマンドラインの引数郡
For i=0 to arg.Count - 1
 If Left(arg(i), 7)="http://" Then 'URL
  Url = arg(i)
  Irvine.AddQueueItem QueueFolder, Url 'アイテム登録
 ElseIf Left(arg(i), 1)="/" Then 'キューフォルダ指定
  QueueFolder = arg(i) 'キューフォルダの指定(指定以降はこのフォルダになる)
 Else        'URLリストファイル
  Set fso = CreateObject("Scripting.FileSystemObject")
  FileName = arg(i)
  Set TextFile = fso.OpenTextFile(FileName) ' テキストファイルのオープン
  Do Until TextFile.AtEndOfStream
   Url = TextFile.ReadLine ' 1行読み込み
   Irvine.AddQueueItem QueueFolder, Url 'アイテム登録
  Loop
 End If
Next
Set irvine = Nothing
368 :名無し~3.EXE:2008/02/19(火) 21:40:43 ID:qK/Wztn/
ああスマン、リファラ必要だったか、間違えた
ほんとごめん、無かった事にしてくれw

675:名無し~3.EXE
09/09/30 18:59:30 yNSminJl
IE の clipboard.GetData("text") を使ってるんですけど
クリップボードの中身が文字列でないときにエラーが出るんですけど
これどうして対処したらいいですか?


クリップボードの中身の sDataFormat が何か分かるプロパティとかあるんですか?
それがあればtextであった場合のみ実行できるんですが…。

676:名無し~3.EXE
09/09/30 19:07:10 uvZrgPLl
エラーを握り潰せばいいんじゃね?

677:名無し~3.EXE
09/09/30 19:42:46 yNSminJl
>>676
ありがとう。
エラー処理するのはあまり本位ではないのですが…
try で組もうと思います。

678:名無し~3.EXE
09/09/30 20:48:09 eF+M6xuO
それはあまりにも自分本位じゃまいか

679:名無し~3.EXE
09/11/08 19:21:35 7qQVL7wO
エラーにも言い分があるはず。こっちも心を開かないと
エラーも心を開くはずがない。

680:名無し~3.EXE
09/11/18 10:55:25 +QJ44J2l
CかC++で普通の旧式の非ウィンドウアプリケーション書いて、
データ入力部分だけhtaでGUIもどきのことをしたいと思っています。

質問1、execでstdinとstdoutだけを読み書きして
stderrはコンソールにそのまま出力ということは出来るのでしょうか?
これが出来ると本当に安直なプログラムが書けそうなんですが

質問2、exec のstdoutにデータが来てるかどうか読まずに確かめる方法はあるのでしょうか?
これが出来ないと予期しない出力は結局ファイルで合図しなければならないかと思っています

以上2点、レベルの低い質問かもしれませんが、自分で検索しても出来るかどうかよく分かりませんでした
特に1が出来ないと結局ファイルでやり取りしたほうが今作ろうとしているプログラムは書きやすいかと
思っています


681:名無し~3.EXE
09/11/18 12:30:35 m1LVyF2l
exec "cmd /c hoge 2>con"

682:名無し~3.EXE
09/11/18 12:46:03 +QJ44J2l
>>681
質問1は、できるのですね。やってみました。本当にありがとうございました

質問2は、できるのでしょうか?

683:名無し~3.EXE
09/11/18 14:13:26 m1LVyF2l
パイプはnon blocking readがないので無理
ファイルならatendofstreamで可能

684:名無し~3.EXE
09/11/18 14:38:19 +QJ44J2l
>>683
回答ありがとうございます。
用語がよく分かっていませんが、それで調べてみます。

685:名無し~3.EXE
09/11/21 19:12:00 q2jqgO7W
ノートPCに付いている専用アプリケーションキーを押す都度に
内蔵スピーカーからの出力と、外付けUSBスピーカーからの出力を
交互(トグル)に切り替えるにはどういったスクリプトを書けばよいでしょうか?
出来れば切り替えた際にダイアログを表示して確認出来ると尚良いです。

アプリケーションキーからスクリプトを起動させるところまでは
方法がわかっているのですが、肝心のスクリプトがわかりません。

ぶしつけなお願いとはわかっていますが、どうか宜しくお願いします。

686:名無し~3.EXE
09/11/21 21:20:19 l4Atd+m7
ここ( URLリンク(hp.vector.co.jp) )の SetPlayDevice とかを叩けばいいんじゃない
Vista, 7 じゃ無理みたいだけど。

687:名無し~3.EXE
09/11/21 22:00:31 q2jqgO7W
>>686
ありがとう
それを元に調べてみるとVista、7からはサウンド関係の仕様に
変更があったようで使えないのですね
そうとは知らずにOSを書いてなくてすみませんでした
今のところVista以降に関してMSからも情報提供が乏しいようですね

688:名無し~3.EXE
09/11/22 01:40:11 uq5f84wJ
select caseって数値の比較とか出来ないんでしょうか?
a = 1 のとき a > 0が引っかからないのですが・・・
完全な決めうちしか出来ないって事ですか?


689:名無し~3.EXE
09/11/22 13:32:21 cCLt2wk9
>>688
頭を使え

690:名無し~3.EXE
09/11/22 14:54:21 HA1psbZl
3>a>=1なら b=1にしてSelect bにするとか mod使ってSelect 計算式
にするとかいくらでもやりようがあるだろうに (;一_一)

691:名無し~3.EXE
09/11/22 15:27:40 cCLt2wk9
>>690
頭を使った?
select case true
case a>0

692:名無し~3.EXE
09/11/23 00:08:54 Nzh7T0tA
select caseって、caseって書くくらいだから、決め打ち有りきだと思ってたけど、そう思わない人も居るんだな。
つか、a=1の時、a=1の処理がしたいのかa>0の処理がしたいのかを誰が決めるんだろ?
i7?pen3?

693:名無し~3.EXE
09/11/23 11:22:05 1SNAy8LO
「VBAみたいに『Is > 0』って書ければ良かったのに」って
>>688は言いたいんじゃないの?

694:名無し~3.EXE
09/11/23 19:28:11 8m8LyL5s
a = 1
Select Case a
Case a > 0
MsgBox "引っかからない"
Case Else
End Select

ってことだろ
VBSはIsもToもサポートしてない


695:名無し~3.EXE
09/11/23 19:36:49 8m8LyL5s
Is > 0 だった



696:名無し~3.EXE
09/11/25 14:37:08 vRBOSPMC
エクスプローラの"ファイル名でソート"と同じ規則でソートする方法はありませんか
エクスプローラの表示だと
 あ,txt
 ア,txt
 い,txt
 イ,txt
wshでファイルリストを出力すると
 あ,txt
 い,txt
 ア,txt
 イ,txt
となってしまいます

697:名無し~3.EXE
09/11/25 14:45:05 QJTE9W/a
URLリンク(scripting.cocolog-nifty.com)

698:名無し~3.EXE
09/11/25 23:51:49 vRBOSPMC
>697にある三番目のスクリプトをJscriptに書き換えたけどうまく動きません。添削をお願いします。
for文のループが実行されません。

FolderName="フルパス";
var fso=new ActiveXObject("Scripting.FileSystemObject");
var ie=GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}");
ie.Navigate(FolderName);
do {WScript.Sleep(100);} while ((ie.Busy) || (ie.ReadyState!=4));
var Folder=ie.Document.Folder;
for (var i=0; i < Folder.Count; i++){
var FolderItem=Folder.Items(i);
if (FolderItem.Type=="ファイル フォルダ"){
if(toLowerCase(fso.GetExtensionName(FolderItem.Path))=="txt"){
WScript.Echo(fso.GetFileName(FolderItem.Path));
}
}
}
//ie.Quit;//エラーが出る

699:名無し~3.EXE
09/11/25 23:59:57 TDrkyoKp
Document.Folderで手に入るのがコレ
URLリンク(msdn.microsoft.com)
Countというプロパティは無い
Itemsメソッドは引数を取らない

700:名無し~3.EXE
09/11/26 00:46:36 O7jscl7L
プロパティとメソッドの区別がついてないんじゃないの?

701:名無し~3.EXE
09/11/26 21:57:55 N/S5kwhR
本質的な違いはない

702:名無し~3.EXE
09/11/27 00:40:22 ZUJwRQCx
//ie.Quit;//エラーが出るだろぼけ

703:名無し~3.EXE
09/11/28 23:53:27 oniuazYX
だまれクズ豚

704:名無し~3.EXE
09/11/29 13:26:33 0uSg2Cxv
VBScriptとJScriptの区別がついてないんじゃないの?

705:名無し~3.EXE
09/11/29 20:55:52 0uSg2Cxv
シンタクス以外に本質的な違いはない

706:名無し~3.EXE
09/11/30 18:37:23 xUEhOJNz
動詞と名詞の区別がついてないんじゃないの?


707:名無し~3.EXE
09/12/01 22:01:40 yDXwDcOy
Cscriptで起動したスクリプトからコンソールアプリケーションを起動した場合に
その標準出力をスクリプトで受け取るような事ってどうやっても無理なんでしょうか?

708:名無し~3.EXE
09/12/01 22:11:59 lsMwusSy
>>707
関係ないけどWindows3.1のころは「ヘルプのヘルプ」ってのがあった。
最近は初心者切捨てでかわいそうだね。

709:名無し~3.EXE
09/12/01 22:12:48 HwFSNddt
どうやってもってなんか極めて困難かであるかのように
WshScriptExec使えばいいっしょ

710:名無し~3.EXE
09/12/01 22:13:19 WdXqZ7eU
>>708
いまだにPC初心者っているんだな。全国民に行き渡ったと思ってたぜ。

711:名無し~3.EXE
09/12/01 23:45:51 bXIPT5f9
誰に教わるでもなくいきなり車ができたり
英語が話せたり
そんなすごい人がいたら教えてください

712:名無し~3.EXE
09/12/02 10:56:22 ZUy7XsN4
単数と複数の区別がついてないんじゃないの?

713:名無し~3.EXE
09/12/03 16:49:20 rN3MSJ1f
hta アプリケーションのウインドウに、ファイルのドラッグドロップって出来ましたっけ?
ドラッグドロップしたファイルのパスをhtaで利用したいんですが。
可能ならどうやってイベントを拾えばいいですか?。

714:名無し~3.EXE
09/12/03 20:44:12 ThJuUPaj
すれっち
スレリンク(tech板)

715:名無し~3.EXE
09/12/05 17:35:36 /VdO4Ha3
XPとWScriptのJscriptで、manifest使ってレジストリ登録なしでAutoItXが使えたんでメモしとく。
まずWScript.ExeとCScript.Exeをコピーして適当なフォルダに入れとく。
AutoItX3.dllも同じところに入れとく。
同じ場所にテキストファイルを3つ作る。
wscript.exe.manifest
cscript.exe.manifest
AutoIt.AutoItX3.manifest

716:名無し~3.EXE
09/12/05 17:36:31 /VdO4Ha3
AutoIt.AutoItX3.manifest の中身

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.1"
processorArchitecture="x86"
name="AutoIt.AutoItX3"
type="win32"
/>
<file name="AutoItX3.dll">
<typelib tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
<comClass clsid="{1a671297-fa74-4422-80fa-6c5d8ce4de04}" threadingModel="Apartment" tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" progid="AutoItX3.Control.1" description="AutoItX3 Class" />
</file>
</assembly>

717:名無し~3.EXE
09/12/05 17:37:29 /VdO4Ha3
wscript.exe.manifest の中身

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity
version="1.0.0.1"
processorArchitecture="x86"
name="AutoIt.wscript.exe"
type="win32"
/>

<description>WScript.exe</description>

<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="AutoIt.AutoItX3"
version="1.0.0.1"
processorArchitecture="x86"
/>
</dependentAssembly>
</dependency>
</assembly>


718:名無し~3.EXE
09/12/05 17:38:19 /VdO4Ha3
cscript.exe.manifest の中身

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity
version="1.0.0.1"
processorArchitecture="x86"
name="AutoIt.cscript.exe"
type="win32"
/>

<description>WScript.exe</description>

<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="AutoIt.AutoItX3"
version="1.0.0.1"
processorArchitecture="x86"
/>
</dependentAssembly>
</dependency>
</assembly>

719:名無し~3.EXE
09/12/05 17:43:52 /VdO4Ha3
// この test.js をコピーしたWScript.exeにドラッグして実行させると、画面の中央にツールチップが現れるはず。
// スクリプト起動時にこっちのWScript.Exeを選ぶスクリプト書いておけば、ポータブルでもAutoItXの機能が使える。

oAutoIt = new ActiveXObject( "AutoItX3.Control.1" );

oAutoIt.ToolTip("WSH★★★こんばんみ★★★Part7",500,500);

WScript.Echo(100);

oAutoIt.Sleep(3000);

WScript.Echo(200);

720:名無し~3.EXE
09/12/05 18:51:16 /VdO4Ha3
マニュフェストは下のように1つにまとめても動いたわw。分けなくてもよかったようだ。
wscript.exe.manifest の中身

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="wscript.exe" version="1.0.0.0" type="win32" />
<file name="AutoItX3.dll">
<typelib tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
<comClass clsid="{1a671297-fa74-4422-80fa-6c5d8ce4de04}" threadingModel="Apartment" tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" progid="AutoItX3.Control.1" description="AutoItX3 Class" />
</file>
</assembly>

721:名無し~3.EXE
09/12/05 19:26:28 /VdO4Ha3
// sample自動的に隣のマニフェスト付きCscriptExeを使うmanifest.js

var s="cscript.exe.manifest と Cscript.Exe と \n";
s+="AutoItX3.dll が揃ったフォルダに、このスクリプトを置いておく。\n";
s+=" もしAutoItX3が登録されていればシステムの Cscript.Exe を使ったまま処理は続行する。\n";
s+=" 無ければ、このスクリプトは一旦終了し、\n";
s+="隣にある Cscript.Exe を使って起動する。引数も引き継ぐ。";
new ActiveXObject("WScript.Shell").Popup(s,0,'test',0);

var sArg='';for(var iii=0;iii<WScript.Arguments.length;iii++){sArg+=" "+"\""+WScript.Arguments(iii)+"\"";};;;
try{oAutoIt = new ActiveXObject( "AutoItX3.Control.1" );}catch(e){
new ActiveXObject('WScript.Shell').Run(new ActiveXObject('Scripting.FileSystemObject').GetParentFolderName(WScript.ScriptFullName)
+ "\\" + 'cscript.exe //E:Jscript //nologo ' + "\"" + WSH.ScriptFullName + "\"" + ' ' + sArg,1,0);;;
WScript.Quit();};

oAutoIt.ToolTip("WSH★★★こんばんみ★★★Part7",500,500);

var n=3000;

WScript.Echo("AutoItXのSleepを使ってみる " + n + " ミリ秒");

oAutoIt.Sleep(n);

WScript.Echo(3000);

oAutoIt.Sleep(3000);

722:名無し~3.EXE
09/12/05 23:46:56 /VdO4Ha3
とりあえず、ポータブルのJScriptでもAutoItXでアプリ制御、SeraphyScriptDialogでGUIフォーム、SFCminiでWin32API、いくつかは動いたんで最後のまとめ。 cscript.exe.manifest の中身。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="cscript.exe" version="1.0.0.0" type="win32" />

<file name="scrdlg.dll">
<comClass clsid="{86893BFE-A779-4685-8FC9-D63C8827C4C9}" threadingModel="Apartment" tlbid="{86893BFE-A779-4685-8FC9-D63C8827C4C9}" progid="SeraphyScriptDialog" description="scrdlg Class" />
</file>

<file name="AutoItX3.dll">
<typelib tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" version="1.0" helpdir="" />
<comClass clsid="{1a671297-fa74-4422-80fa-6c5d8ce4de04}" threadingModel="Apartment" tlbid="{f8937e53-d444-4e71-9275-35b64210cc3b}" progid="AutoItX3.Control.1" description="AutoItX3 Class" />
</file>

723:名無し~3.EXE
09/12/05 23:48:35 /VdO4Ha3
つづき、AMD は sfcminii.dll を sfcminia.dll に変える。

<file name="sfcminii.dll">
<comClass clsid="{1303599D-3028-4EAC-97BB-D9370B88B2DA}" threadingModel="Apartment" tlbid="{1303599D-3028-4EAC-97BB-D9370B88B2DA}" progid="SfcMini.DynaCall" description="sfcminii Class" />

<comClass clsid="{F5B4E399-F606-41FC-B049-D247156F8F3E}" threadingModel="Apartment" tlbid="{F5B4E399-F606-41FC-B049-D247156F8F3E}" progid="SfcMini.Structure" description="sfcminii Class" />

<comClass clsid="{4D2C1575-A55B-418F-A25C-ECEB45FC5FD2}" threadingModel="Apartment" tlbid="{4D2C1575-A55B-418F-A25C-ECEB45FC5FD2}" progid="SfcMini.MachineCode" description="sfcminii Class" />

<comClass clsid="{DC430254-87C0-4800-8C45-8B0C2BED1A53}" threadingModel="Apartment" tlbid="{DC430254-87C0-4800-8C45-8B0C2BED1A53}" progid="SfcMini.ClassEx" description="sfcminii Class" />

<comClass clsid="{6F5E1721-E8A4-48BB-B29F-A549EDA82CC7}" threadingModel="Apartment" tlbid="{6F5E1721-E8A4-48BB-B29F-A549EDA82CC7}" progid="SfcMini.tools" description="sfcminii Class" />
</file>
</assembly>

724:名無し~3.EXE
09/12/07 00:20:21 nBnCs4W2
//やべえ。銚子に乗って書いたが、設定がうまく遺憾人は無限ループになる可能性がある。
//1回で打ち切りにするテスト用スクリプトをカキコ。スマン。

// sample自動的に隣のマニフェスト付きCscriptExeを使うmanifest無限ループ回避.js

var s="cscript.exe.manifest と Cscript.Exe と \n";
s+="AutoItX3.dll が揃ったフォルダに、このスクリプトを置いておく。\n";
s+=" もしAutoItX3が登録されていればシステムの Cscript.Exe を使ったまま処理は続行する。\n";
s+=" 無ければ、このスクリプトは一旦終了し、\n";
s+="隣にある Cscript.Exe を使って起動する。引数も引き継ぐ。";

var objshl=new ActiveXObject('WScript.Shell');
if(objshl.Environment('process').item('senvstopscript')!=1){
try{oAutoIt = new ActiveXObject( 'AutoItX3.Control.1' );}catch(e){
objshl.Popup("この後RUNする\n\n"+s,0,'test',0);
var sArg='';for(var iii=0;iii<WScript.Arguments.length;iii++){sArg+=" "+"\""+WScript.Arguments(iii)+"\"";};;;
objshl.Environment('process').item('senvstopscript')=1;
objshl.Run(new ActiveXObject('Scripting.FileSystemObject').GetParentFolderName(WScript.ScriptFullName)+ "\\" + 'cscript.exe //E:Jscript //nologo ' + "\"" + WSH.ScriptFullName + "\"" + ' ' + sArg,1,0);;;
WScript.Quit();};
};
WScript.Echo(s,0,'test',0);
WScript.Sleep(2000);
oAutoIt = new ActiveXObject( 'AutoItX3.Control.1' );
var n=3000;
oAutoIt.ToolTip("AutoItXのSleepを使ってみる " + n + " ミリ秒",500,500);
oAutoIt.Sleep(n);

725:名無し~3.EXE
09/12/07 01:28:35 WsLj3zGr
ウチでも動いた。
また入れなおしたけど。

726:名無し~3.EXE
09/12/09 15:51:14 LISCbfE6
面白そうだからPortableSleipnir、LunaPocketでも試したがmanifestでは駄目だった。
でPortableSleipnirでScriptのほうに手を加えて、
起動するときにmanifest付きのwscript.exeから
起動しなおすようにしたらSleipnirやAutoItXのオブジェクトも使えた。
もちPortableはsleipnirからxmlをコピーしてメニューにスクリプトが出るようにしてからだがな。

727:名無し~3.EXE
09/12/09 15:54:58 LISCbfE6
// pWScriptExeでパスを決める。
// もしくはbinフォルダにマニフェストとDLL、exeを入れる。
objfso=new ActiveXObject("Scripting.FileSystemObject");
objshl=new ActiveXObject("WScript.Shell");
pnir = new ActiveXObject("Sleipnir.API");

if(objshl.Environment("process").item("senvstopscript")!=1){
//wscript.exeのパスを決め内する場合
pWScriptExe="U:\\wscript.exe";
//もしbinフォルダにwscript.exeがあればそれを使う。
if(objfso.FileExists(pnir.AppPath + "wscript.exe")){
pWScriptExe=pnir.AppPath + "wscript.exe";
};
objshl.Environment("process").item("senvstopscript")=1;
objshl.Run("\"" + pWScriptExe + "\"" + " //E:Jscript //nologo " + "\"" + WSH.ScriptFullName + "\"" ,1,0);;;
WScript.Quit();
}

str = pnir.AddressBarString;
str+="\n"+pnir.AppPath;
WScript.Echo(str);
WScript.Echo("test");
WScript.Sleep(2000);

oAutoIt = new ActiveXObject( "AutoItX3.Control.1" );
var n=3000;
oAutoIt.ToolTip("AutoItXのSleepを使ってみる " + n + " ミリ秒",500,500);
oAutoIt.Sleep(n);

728:名無し~3.EXE
09/12/09 19:38:19 vX1/pBxQ
Luna4Pocket、 PortableSleipnir、 どっちでも外部のDLLは使える。
Luna.exeと同じ場所に、wscript.exe、 wscript.exe.manifest、 AutoItX3.dll、 etc dll を
置いておけばこっちの wscript.exe を優先するんで Dll も動く。

729:名無し~3.EXE
09/12/09 22:39:03 Yhsi9HCt
いつの間にかJScriptのファイルのアイコンが白地に箱のアイコン
になってたんですが、デフォルトの黄色のパンチカード?のアイコンに戻し
たいです
どうしたらいいですか?

プロパティの関連付けを確認すると「Console Based Script Host」に
なってるんで関連付けは間違っていないと思います。

730:名無し~3.EXE
09/12/09 22:53:17 5hilr/mv
普通Console Based(cscript.exe)じゃなくてWindows Based(wscript.exe)に関連づけられてるはずだが?

731:名無し~3.EXE
09/12/10 13:50:34 Mq0kj3tj
regsvr32 wshext.dll

732:名無し~3.EXE
09/12/11 19:38:39 sMPK5/7s
どうでもいいが、むだ口さんの掲示板が宣伝ばっかりだ。

733:名無し~3.EXE
09/12/12 19:42:43 ZndgYDwX
生活かかってんだろ?買ってやれよ

734:名無し~3.EXE
09/12/15 00:57:14 XWk31MKA
wscript.exe.manifest basp21.dll capicom.dllの一部が動きました。全部試してません。
ポータブル環境やエディタでの暗号処理も簡単そうです。
URLリンク(www.microsoft.com)
msi を解凍すればcapicom.dll が入手できます。
msiexec /a capicom_dc_sdk.msi targetdir="z:\hogehoge" /qn

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="wscript.exe" version="1.0.0.0" type="win32" />

<file name="capicom.dll">
<typelib tlbid="{BD26B198-EE42-4725-9B23-AFA912434229}" version="1.0" helpdir="" />
<comClass clsid="{A440BD76-CFE1-4D46-AB1F-15F238437A3D}" threadingModel="Apartment" tlbid="{BD26B198-EE42-4725-9B23-AFA912434229}" progid="CAPICOM.EncryptedData.1" description="CAPICOM.EncryptedData Class" />
</file>

<file name="Basp21.dll">
<typelib tlbid="{607E85A1-3B9C-11D1-863C-00000E4E0AD6}" version="1.0" helpdir="" />
<comClass clsid="{5A99A823-3B97-11D1-863C-00000E4E0AD6}" threadingModel="Apartment" tlbid="{607E85A1-3B9C-11D1-863C-00000E4E0AD6}" progid="Basp21.1" description="Basp21 Class" />
</file>

735:名無し~3.EXE
09/12/15 01:10:52 XWk31MKA
objBasp=new ActiveXObject('basp21.1');
sOriginal='basp21.1こんばんは';
sEnc = objBasp.Base64(sOriginal,0);
sDec = objBasp.Base64(sEnc,1);
WScript.Echo(sOriginal +"\n"+ sEnc +"\n"+ sDec);

sOriginal = 'CAPICOM.EncryptedData.1こんばんは';
sKey='Password';
objCapicom = new ActiveXObject('CAPICOM.EncryptedData.1');

objCapicom.SetSecret(sKey);
objCapicom.Content = sOriginal;
sEnc = objCapicom.Encrypt().replace(/\s$/,'');
objCapicom.Decrypt(sEnc);
sDec = objCapicom.Content;

WScript.Echo(sOriginal + "\n" + sKey +"\n" + sEnc + "\n" + sDec);

736:名無し~3.EXE
09/12/16 10:27:34 BQc3xGqm
すみません。教えてください。

>cscript.exe hoge.vbs

としてvbsを実行した場合、hoge.vbsで実行時エラーが発生した場合に
cscript.exeが終了コード0以外を返すようにするには
どうしたらよいでしょうか?

よろしくお願いいたします。

737:名無し~3.EXE
09/12/16 12:02:16 0CWXvG5X
WScript.Quit 1

738:名無し~3.EXE
09/12/16 12:35:25 BQc3xGqm
>>737
ありがとうございます。
やはりvbs側の修正が必要なんですね。


739:名無し~3.EXE
09/12/18 00:03:33 hmFH5f4H
on error ?

740:名無し~3.EXE
09/12/18 07:19:38 5pMA288l
こんにちは
テキストファイルから文字列の抽出をしたくて、できる方法を探してます。
やりたいのは
1.アプリケーションA.exeを終了させる
2.B.txtの「通信」という語句がある行の、""に囲まれた文字列を
  抽出し、C.txtの末尾に追加する
3.B.txtの内容を全消去し保存する
4.10秒後にA.exeを再起動する

という作業です。これをWSHでやることは可能でしょうか?
宜しかったら、どういうコマンドを使えばできるかざっとでも教えて頂けないでしょうか?

741:名無し~3.EXE
09/12/18 07:28:48 kF8+V9so
まず服を脱ぎます

742:名無し~3.EXE
09/12/18 07:30:33 Dsca2BJb
次に綿棒を用意します

743:740
09/12/18 11:20:12 5pMA288l
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("A.log")
Set B = fs.OpenTextFile("B.lst", 8, False)

Do Until f.AtEndOfStream
l = f.ReadLine
If InStr(l, "達成") <> 0 then ret = ret & l & vbCrLf
Loop

f.Close
B.Write ret
B.Close

とりあえず、行を抽出することはできたんだけど、行の中の""に囲まれた部分
だけを抽出するにはどうしたらいい?
       ∧__∧
      (´・ω・` )
       (⊃⌒*⌒⊂)
        /__ノωヽ__)

744:740
09/12/18 12:32:41 5pMA288l
Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer

Set oProcs = Service.ExecQuery _
("Select * From Win32_Process Where Description=""A.exe""")
For Each oProc In oProcs
oProc.Terminate
Next

Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("B.txt")
Set B = fs.OpenTextFile("C.txt", 8, False)

Do Until f.AtEndOfStream
l = f.ReadLine
If InStr(l, "通信") <> 0 then ret = ret & l & vbCrLf
Loop

f.Close
B.Write ret
B.Close
fs.DeleteFile "B.txt"
fs.CreateTextFile "B.txt"

WScript.Sleep 10000

Set shell = WScript.CreateObject("WScript.Shell")
shell.Run "A.exe", 3, true

いろいろつぎはぎしてここまでできたんですが、""の中だけを抽出する方法が分からない...
テキストの内容のクリアの方法も分からなかったので消去+新規作成で代用しました(;^ω^)
""の中だけの抽出はどうやったらいいでしょう?

745:740
09/12/18 15:18:42 5pMA288l
と、思ってたら、できちゃった。。。。
言われたのは「服を脱いで綿棒用意しろ」とだけか。。。。ほんと有益なスレだtったぜwwww

746:名無し~3.EXE
09/12/18 15:42:26 HOC6ISom
用意したんだろ?( ´∀`)σ)Д`)

747:名無し~3.EXE
09/12/18 16:57:51 TYK9wCb8
>>1
はい、使ってます。

748:740
09/12/18 17:48:38 5pMA288l
作ったvbsファイルを直接クリックすると実行できるんですが、
「ファイル名を指定して実行」から、wscript.exe "パス\ファイル名.vbs"
で実行すると、「行17 ファイルが見つかりません 実行時エラー」とかいうのが出てきます。
なんで????(´・ω・`)

749:名無し~3.EXE
09/12/18 18:33:21 JaPpW35G
>>748
カレントディレクトリ


750:740
09/12/19 03:55:38 bRRSIC4A
なるほど~。やっとできたよ~∩(^ω^)∩バンジャーイ

751:名無し~3.EXE
09/12/22 19:28:26 BZ2YAM4c
ファイルを削除したいのに、たまーに「ファイルが見つかりません」とか出る...
ファイルがあるのに「ない」とか出るのは何故なのかな(#^ω^)ピキピキ ...


752:名無し~3.EXE
09/12/22 19:51:16 OXMFkspi
パスが違う・カレントディレクトリが違う

753:名無し~3.EXE
09/12/22 20:13:09 qKuvUzNL
If fso.FileExist(file) Then fso.DeleteFile file

754:名無し~3.EXE
09/12/22 20:28:03 6G2Mlzun
こういう奴がスクリプトでファイル削除して惨事を招くんだろうな。

755:名無し~3.EXE
09/12/22 22:36:45 BZ2YAM4c
WSHの実行履歴ってどっかで見れないかな...
なにやら3つぐらい同時に実行されてるぽい。二重起動防止が役にたってなひよ(-_-) …

756:名無し~3.EXE
09/12/22 22:42:36 qKuvUzNL
wscript.shell logevent

757:名無し~3.EXE
09/12/22 23:28:39 BZ2YAM4c
ありがとん。wshっていろいろできるんだねえ。おもしろくなってきたよ

758:名無し~3.EXE
09/12/23 00:53:33 9A0fdYTt
これ絶対おっさんだよな。

なのに平日(12/18)一日中 2ch してるとか、変な顔文字とか・・・・

759:名無し~3.EXE
09/12/23 03:20:36 +DPP5Qk7
役に立たないくせにつまんない突っ込みばっかりするのなオマエwwwwwwwwwwwwwwww( ゜д゜)、ペッ

760:名無し~3.EXE
09/12/23 08:20:58 OOKcm36S
ニートのキモッサンきめえw

761:名無し~3.EXE
09/12/23 09:12:01 PXJi6MOV
>>759
レベル低すぎ
ここはググって出てくるような事を書き込むスレじゃないんで、お引取りください

762:名無し~3.EXE
09/12/23 15:19:38 HBBFKBYL
>>761
では、レベルの高い話をハイどうぞ↓

763:名無し~3.EXE
09/12/24 14:14:07 i6+2D8Nd
DOSの業務用ソフトをWSHで動かすことはできますか?

764:名無し~3.EXE
09/12/24 14:26:52 6hCJv+1N
バッチファイルの代わりにはなるだろうけど、それ以上は期待するだけ無駄

765:名無し~3.EXE
09/12/24 20:21:32 Q7u0QeqE
WSHからアプリをIntegrity Level Lowで動かすことはできますか?

766:名無し~3.EXE
09/12/24 22:17:35 bSJyJDZo
>>765
プロセスの優先度のことならstart /lowでいいだろ。
WSHでもできないことはないけどWin2000じゃ使えない。

767:名無し~3.EXE
09/12/25 01:13:25 9mIsp81e
>>765
気になったので、ググってみた。何とかなりそうだ。
URLリンク(scripting.cocolog-nifty.com)

768:名無し~3.EXE
09/12/27 23:24:47 j8YGjmed
テキストファイルの最後の2行を読み込みたい場合に
どういうふうに処理するのがスマートんなんでしょうか?

ReadLineで始めの行から
常に二行分を変数に避難させながら最後の行まで読み込む

一度に全部読んでからSplitで分割

最初に一度すべてを読み込んで行数を調べてから
ReadLineで最後の2行まで読み飛ばして取得

と、考えてみたのですがどれもなんか無駄な動きがあるような気がして

769:名無し~3.EXE
09/12/27 23:35:30 Szvprv8w
悩んでる時間とスクリプトの処理時間を天秤にかけて見るといいんじゃないだろうか。

770:名無し~3.EXE
09/12/27 23:40:04 mNLBddrF
現在行の内容を格納する変数(X)と、1個前の行の内容を格納する変数(Y)を用意。
Xの内容をYにコピーしてから新しい行を読む。

771:名無し~3.EXE
09/12/28 00:06:10 r7K75E4h
>>769
実際にはもう問題なく動くスクリプトは作れているんだけど
ふと、使い慣れてる人はもっといい方法とか
細かい処理速度やメモリの使い方?とかの違いとかその辺も考えて
どういう方法が一番いいかとか知ってるんじゃないかな、と思って

>>770
今はちょうどその方法でやってるんですが
最後の2行だけほしいのに、テキストの先頭からずっとその作業をやるのは
最善の方法なのだろうか?と不安になってしまって

772:名無し~3.EXE
09/12/28 00:17:00 0M12J26z
全然試しもしないで想像だけで書いてるけど
同じテキストファイルを2つのオブジェクトとして開いて
片方を一回だけSkipLineで先行させてからループで先行してる方のAtEndOfLineがtrueになるまで
SkipLineで飛ばすとか。

773:名無し~3.EXE
09/12/28 00:19:26 KqC6OI6J
実行行数が少ないほうが速いよ。

774:名無し~3.EXE
09/12/28 00:43:14 5FOgda0r
ファイルが巨大じゃなきゃ全部読み込んで、
Ar=s.split("\n"); で改行で分割して、
でAr.length>=2で2行以上の場合と、
そうでない場合で処理を分けるのが簡単だと思った。
最後の行とそのまえってAr[Ar.length-1]とAr[Ar.length-2]だし。

775:名無し~3.EXE
09/12/28 01:01:40 duOTUlKt
>>771
FileSystemObject (テキスト ファイルの操作に使用するスクリプティング オブジェクト) が、前方という、1 つの方向だけを認識している点です。
ファイルの先頭から開始して、ファイルの最後に向かって進む必要があります。
別の開始場所を指定することも、最後から先頭に向かって後方から読み取ることもできません。
URLリンク(www.microsoft.com)

最終行だけ欲しいのに先頭から検索って無駄じゃねっていう意見に、一万行有ったってすぐに終わるって返しのあるページがあったはずだけど見つからなかった

776:名無し~3.EXE
09/12/28 01:09:10 Z+1i2G4O
アルゴリズム的にスマートに書きたいという欲求もあるもんだ
仕事でなければそれを追求するのもいい勉強になるしさ
時間的制約を考えれば769のいうことも一理あるというところだね

777:名無し~3.EXE
09/12/28 01:21:45 0M12J26z
バイト単位で読む場所わかってりゃadodb.streamとかでもいいんだろうけど

778:名無し~3.EXE
09/12/28 01:51:45 TV4cU58X
処理するデータが何十万件もあったらかなり違うけどな
少なくとも常にアルゴリズムを意識してるやつとそうでないやつでは
数年で大きな差がつくよ

779:768
09/12/28 03:33:13 r7K75E4h
とりあえず単純に速度的な比較をしてみようと
300万行のテキストで試してみたところ自分のマシンでは

>>770さんの方法で 35秒前後
>>772さんの方法で 45秒前後
1度SkipLineで行数を調べてからもう一度開き最後の2行だけ取得で 55秒前後
>>774さんの方法は、やはり大きなファイルには向いていないようで
10分以上たっても処理が終了する気配がありませんでした

>>775
そういうものなんですね
速度的にも普通に読み込むのが一番早いようだし
公式にここまではっきり書いてあると、この方法でいいのだと安心出来ました

どうもありがとうございました

780:名無し~3.EXE
09/12/28 04:50:11 PyWDz6+t
300万行とか膨大な桁を前提にするなら、もっと効率的な方法はあると思うけどね。

781:名無し~3.EXE
09/12/28 06:35:12 B5iJEHMd
たとえば?

782:名無し~3.EXE
09/12/28 10:49:07 2hmBKvKS
tailコマンドをwshで叩く

783:名無し~3.EXE
09/12/28 12:01:36 FVimMGRy
300万行試してみた。1行は小さめ。
>>770で10秒くらい。

ADODB.Streamでファイルの最後から1文字ずつ読んで、
2行確保したら終わり、だと一瞬だった。

784:名無し~3.EXE
09/12/28 12:10:56 rMWa9Z10
tailでも0.2秒だったわ。>>783 おおざっぱでいいからサンプルで教えてくれ。

objexec = objshl.Exec("\"" + objfso.GetParentFolderName(WSH.ScriptFullname)+"\\tail.exe" + "\"" + " -2 \"" + filetxt +"\"");
do{WScript.Sleep(100);}while(objexec.Status==0);sret=objexec.stdout.ReadAll();WScript.Echo(sret);

785:名無し~3.EXE
09/12/28 18:00:41 FVimMGRy
var start = new Date().getTime();

var filename = 'list.txt';
var Stream = WScript.CreateObject('ADODB.Stream');
var c, text = '', lf = 0;

Stream.Type = 2;
Stream.Charset = 'Shift_JIS';
Stream.Open();
Stream.LoadFromFile(filename);

var i = Stream.Size - 1;
read : for ( ; i != -1; i-- ) {
Stream.Position = i;
c = Stream.ReadText(1);
if ( c == '\r' ) continue;
if ( c == '\n' ) {
switch ( lf ) {
case 0 : break;
case 1 : last1 = text; text = ''; break;
case 2 : last2 = text; break read;
}
lf++;
} else {
text = c + text;
}
}
Stream.Close();

WScript.Echo(new Date().getTime() - start + 'ミリ秒');
WScript.Echo(last2);
WScript.Echo(last1);

786:名無し~3.EXE
09/12/28 18:06:17 FVimMGRy
改行を色々対応させると更にめんどいね。
普通に1行ずつ読んで負担にならない程度のファイルサイズなら、
保守性とかでそっちのがいいよ。

787:名無し~3.EXE
09/12/28 18:58:36 rMWa9Z10
こりゃ早いわ。 これくらい早いと
後ろから大雑把に500バイト読み込んで
適当な処理してもいいかもしんないね。
非常に参考になった。ありがと。

var i = Stream.Size - 500;
Stream.Position = i;
sAr=Stream.ReadText(500).split("\n");
Stream.Close();

WScript.Echo("-2 = " + sAr[sAr.length-3] +"\n" + "-1 = " + sAr[sAr.length-2] +"\n" + " 0 = " + sAr[sAr.length-1] +"\n" + (new Date().getTime() - start) + 'ミリ秒');

788:名無し~3.EXE
10/01/01 16:46:22 6ywjnZF6
実行一つでマルチスレッドで通信したい。

xmlhttp.open("POST", "~~", false); で第3引数をfalseにすると
xmlhttp.onreadystatechangeで受けるときもあるが、受けないときもあって終了してしまう。

第3引数をtrueにすると非同期になるらいしけど、
xmlhttp.onreadystatechangeで受ける前に処理が終わって終了してしまう。

どうしたらいいんだろう。WSHでtrueにする使い方ってもしかして使えない?

789:名無し~3.EXE
10/01/01 18:43:45 NNSFaVEC
WSHでマルチスレッドはちょっと難しいんじゃないすか?
スクリプトを同時に複数起動する(マルチプロセス)なんて
のは何ともないけど、1つのプロセスでスレッドを複数
立ち上げたいならPerlの方がいいと思いますけど。

790:名無し~3.EXE
10/01/01 19:55:56 uK4WgJZ0
wsh で使えるかどうかは知らないけど、 マルチスレッドライブラリ Concurrent.Thread とか。

791:名無し~3.EXE
10/01/01 20:46:14 U1BEAdsB
マルチスレッドが必要?

792:名無し~3.EXE
10/01/02 01:36:42 ao/59EuU
そうだな、我慢するか。ありがと

793:名無し~3.EXE
10/01/07 01:18:14 GcxiHLHM
>788
MSDNによると「WScript.Sleepで止めといて、WScript.Quitで抜ければOK」
URLリンク(msdn.microsoft.com)

794:名無し~3.EXE
10/01/07 13:27:44 VssB+QEa
>>788
XHRに限れば
通信完了後にコールバック関数が呼ばれるようにして
通信中にごにょごにょはできるけど、
その落としたデータを処理したいなら
結局は通信完了後じゃないと触れない
マルチスレッド以前の話だと思うが

795:名無し~3.EXE
10/01/12 18:26:19 Dwa4qtcE
echoやpopupでは一つのウィンドウに一つのテキストしか表示できないけれど
一つのウィンドウを使って刻々とテキストを更新して表示する方法はないですか

796:名無し~3.EXE
10/01/12 18:51:57 3thoTjT8
msagent
ie
hta
inputboxに貼り付け
powershell

797:名無し~3.EXE
10/01/12 21:08:01 6y7tc9j+
コマンドプロンプト(cscript)で動かす

798:名無し~3.EXE
10/01/12 21:14:39 BzW3pbKY
自分は拡張子jse、vbeをCscriptで動かすようにしちゃったよ。暗号化なんて使わないし。

799:名無し~3.EXE
10/01/12 22:04:14 HEnaLojO
ウィンドウ操作系のCOM使えば既存ウインドウのテキスト変更はできるから、
うまく組み合わせればどうにかなるんじゃね。

800:名無し~3.EXE
10/01/13 02:12:06 3721OXm1
HTAがいちばんかんたん

801:名無し~3.EXE
10/01/15 19:41:04 TCjMpnYM
ieのstatustextがいちばんかんたん

802:名無し~3.EXE
10/01/17 10:04:44 Ix5w7yDX
URLリンク(rocketeer.dip.jp)
↑ここにあったスクリプトなんですが、次のように改変して使いたいのですが動きません
どこに何が足りないのか、どなたかご教授くださいませ
(※ターゲットファイルはUTF-8なのでそのままで保存したいです)

803:名無し~3.EXE
10/01/17 10:05:26 Ix5w7yDX
Dim FI
Dim FO
Dim Obj
Dim beforeStr
Dim afterStr
Dim FileName
Dim R
FileName = "C:\Windows\system.ini"
beforeStr = "MailBox"
afterStr = "MailBox=d:\mailbox"
Set Obj = CreateObject("Scripting.FileSystemObject")
Set FI = Obj.OpenTextFile(FileName,1,0)
Set FO = Obj.OpenTextFile(FileName & ".bak",2,True,0)
While Not FI.AtEndOfStream = True
R = FI.ReadLine
If Left(R,Len(beforeStr)) = beforeStr Then
R = afterStr
End If
FO.WriteLine (R)
Wend
FI.Close
FO.Close
Obj.DeleteFile FileName
Obj.MoveFile FileName & ".bak",FileName
Set Obj = Nothing
Set FI = Nothing
Set FO = Nothing
Set Param = Nothing
WScript.Quit

よろしくおねがいします

804:名無し~3.EXE
10/01/17 13:11:12 sXZj+Qn6
'FileSystemObjectではUTF-8の読み書き出来ない。ADODBを使う。
'置換は正規表現でやった方が楽。
'C:\Windows\system.iniを読み込んで全置換してout.txtに書き出す例

Dim inStream, outStream
Dim regEx, Match, Matches, rep
Set inStream = CreateObject("ADODB.Stream")
Set outStream = CreateObject("ADODB.Stream")
Set regEx = New RegExp
regEx.Pattern = "\r\nMailBox"
regEx.Global = True
regEx.IgnoreCase = False
inStream.Open
inStream.Charset = "UTF-8"
inStream.LoadFromFile "C:\Windows\system.ini"
outStream.Open
outStream.Charset = "UTF-8"
str = inStream.ReadText(-1)
rep = regEx.Replace(str,vbCrLf & "MailBox=d:\mailbox")
outStream.WriteText rep
inStream.Close
outStream.SaveToFile "out.txt", 2
outStream.Close

805:名無し~3.EXE
10/01/17 13:20:08 sXZj+Qn6
さっきのじゃファイル先頭は置換されなかったわ。
> regEx.Pattern = "\r\nMailBox"

regEx.Pattern = "(^|\r\n)MailBox"

> rep = regEx.Replace(str,vbCrLf & "MailBox=d:\mailbox")

rep = regEx.Replace(str,"$1MailBox=d:\mailbox")

806:名無し~3.EXE
10/01/17 13:35:24 a2aY4UhM
> FileName = "C:\Windows\system.ini"
> Set FO = Obj.OpenTextFile(FileName & ".bak",2,True,0)
> Obj.DeleteFile FileName
> Obj.MoveFile FileName & ".bak",FileName

この辺Vista以降ならただの管理者じゃ動かないぞ

807:名無し~3.EXE
10/01/17 22:34:26 Qq5UNecS
>>804
早速のご教授ありがとうございます。ぶしつけながらもうひとつ質問があるのですが、、、
置換したい文字列はMailbox→Mailbox=d:\mailboxだけでなく
"Dustbox"→"Dustbox=e:\dustbox"もあるとしたらどうでしょうか?

3行目から最後尾までコピーしてつなげるのでは二つ目の処理がされませんでした
Mailbox用、Dustbox用と二つ用意してやるところを一枚のVBSファイルで行いたいのです
重ね重ねで恐縮ですがよろしくおねがいします

808:名無し~3.EXE
10/01/17 22:38:34 sXZj+Qn6
宿題丸投げ?
ヘルプのRegExpオブジェクトの所位見ろよ…

ぶっちゃけ書き加えるのは2行位だよ。

809:名無し~3.EXE
10/01/17 23:30:26 Qq5UNecS
>>808
お叱りごもっともです、今Googleで調べてるところです

Set regEx2 = New RegExp
regEx2.Pattern = "Dustbox"
rep2 = regEx2.Replace(str,"$1Dustbox=e:\dustbox")
outStream.WriteText rep2
↑現段階での知識ではこれくらいしか思いつかない・・・
しかも動かないw

810:名無し~3.EXE
10/01/18 01:16:54 M1A4s4VQ
Replaceに使う正規表現と置換後をArrayに入れておいて回せば追加にも強いだろう
てか>>804だと1行目を置換したいとき無理じゃね
Multilineもつけて^$使え


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