WSH(・∀・)スレッド! Part 2 at TECH
[2ch|▼Menu]
[前50を表示]
450:デフォルトの名無しさん
07/12/21 18:49:10
vbsかwsfでftpの処理をして処理内容をリダイレクトしようとしています。
ftpのコマンドを書いたファイルを読み込ませているのですが、うまく処理できません。

コメントを切り替えて下記10通りのパターンで試してみたのですが、
一つ目のRun以外動作していないようです。
ftpもできないしログも吐かないし、エラーも出ません。
その後のEchoは表示されます。
------------------
Dim objShl
Set objShl=Wscript.CreateObject("WScript.Shell")
objShl.Run "ftp -s:crp.ftp", 0, true

'objShl.Run "ftp -s:crp.ftp > ftp.log", 0, true '×
'objShl.Run "ftp -s:crp.ftp >> ftp.log", 0, true '×
'objShl.Run "ftp -s:crp.ftp > ftp.log", 1, true '×
'objShl.Run "ftp -s:crp.ftp > C:\db\wsh\ftp.log", 0, true '×
'objShl.Run "ftp -s:crp.ftp >> C:\db\wsh\ftp.log", 0, true '×
'objShl.Run "ftp -s:C:\db\wsh\crp.ftp >> C:\db\wsh\ftp.log", 0, true '×
'objShl.Run "ftp -s:C:\db\wsh\crp.ftp > C:\db\wsh\ftp.log", 0, true '×
'objShl.Run "ftp -s:/db/wsh/crp.ftp >> /db/wsh/ftp.log", 0, true '×
'objShl.Run "ftp -s:/db/wsh/crp.ftp > /db/wsh/ftp.log", 0, true '×
WScript.Echo "完了"
------------------
OSはWindows2003 Serverです。
上記をコマンドプロンプトで実行すると、ftpもログも正しく処理できています。

違っているところや、別の対処方法等教えてください。
よろしくおねがいします。

451:デフォルトの名無しさん
07/12/21 18:54:12
cmd.exe /c ftp....

452:450
07/12/21 19:04:49
>>451 ありがとーーーーー!!ヽ(・∀・ )ノ  できました!

453:デフォルトの名無しさん
07/12/21 23:29:39
objShl.Exec

454:デフォルトの名無しさん
07/12/28 13:37:03
WSHでドライバインストールって出来ませんか?

著名確認画面で止まるのを自動で進みたいんですが。

455:デフォルトの名無しさん
07/12/28 16:24:02
>>454
マウスクリックするだけじゃん。
どんだけズボラなんだよ。
スクリプト書く方がはるかに手間がかかるよw



なんて冗談はさておき、たぶん、自分のPCなら自分で
マウスをクリックすればいいだけな話だが
キミやりたいのは、不特定多数の他人のPCにインストールしたい
ということなんだろ?

たぶん sendkeys って命令を使えばいいんだと思う。
(誰か詳しいひとがフォローしてくれるはず)

それはそれとして、いったい何のための署名なのか。よく考えて欲しい。
システムに深刻な障害を与える可能性のあるソフトを
何の確認もせずに自動インストールできてしまう機能がOSに
備わっていたら?それはセキュリティーホールだよね。
ウイルス作成ハッカーの格好の餌食じゃん。

456:デフォルトの名無しさん
07/12/28 18:41:26
>>455
>それはそれとして、いったい何のための署名なのか。よく考えて欲しい。

親切で言ってるとは思うが、余計なお世話だろ。

>>454
出す情報少な杉。ダイアログを自動で操作したいだけなら455の言うとおり
ウインドウハンドルを取得してsendkeys使えばいい。


457:デフォルトの名無しさん
07/12/28 20:18:55
>>455
SendKeysは知っていますが・・・

それから、著名確認を無効にする事がWindowsでは出来ますよ。
貴方の言うように著名確認が無いならそれはセキュリティホールだというなら、どうして
そのような機能がWindowsについているのでしょうか?

>>456
すみません。携帯電話からだったのでつい・・・・。
今度はPCから書いています。 確かにSendKeysを使えば良いのでしょうが、確認ダイアログ
が出るかどうかが分からないとか、 AutoHotKeyの IfWinExist みたいな 指定したタイトルの
ウィンドウが存在するかどうかチェックとか、そういった事はWSHでは出来ないのかなぁと。

要するに、SendKeysだとAppActivateと組み合わせても、タイミングによってはユーザの介入
によって上手くいかない可能性もあるので、そういった不安要素を取り除いて確実なスクリプト
にしたいなぁと思ったのですが、無理っぽいですねぇ・・・・
マニュアルを "存在するか" とか "ドライバ" とか 色々検索してみたのですが、どうも
なさそうでした・・・・。

458:デフォルトの名無しさん
07/12/28 20:36:01
>>457
本筋とは関係ないが、「著名」じゃなくて「署名」だよ。

459:デフォルトの名無しさん
07/12/28 21:23:03
「しょめい」じゃどう変換しても「著名」にはならんから
ずっと「ちょめい」と読んでいたんだろうね。

460:456
07/12/28 21:27:53
>>457
突っ込みどころが多杉。

>>455がsendkeys出したのは、情報小出しのおまえが悪いんだろ。
それに対して礼も言わずにバカにしたようなレスはどーなのよ。

携帯電話なんてそっちの事情はしらねーんだよ。

>AutoHotKeyの IfWinExist みたいな 指定したタイトルの

できるが、「確認ダイアログが出るかどうかが分からない」って事じゃ
使いようがないだろ。

ある程度知ってる人ならスマートな解決方法がわからないまでも、この流れで
2種類の解決方法が思い浮かぶだろうな。

ブチむかついたので、以上。


461:デフォルトの名無しさん
07/12/28 21:27:59
>>458
うっはw 指摘ありがとうございます。
超恥ずかしいOTL オレバカす・・・・・


それはそうと、スクリプトはどんなコンピュータで実行されるか分からないじゃないですか?
ハードウェアのインストールウィザードで一旦止まりますが、要はユーザがそれを見て
よく分からずに「インストール停止」を選べないように、出てきた瞬間にインストールを選択
させてインストールしたいのです。

最悪かなり重いマシンで実行する事を想定すると Wscript.Sleep 10000で10秒ぐらいは待って
それから objWshShell.SendKeys "{Left}" Wscript.Sleep 100 objWshShell.SendKeys "{Enter}"
ってやらないと、まだハードウェアのインストールウィザードが出てきてないのに
SendKeysしてしまうと失敗しますよね。
ではそのように作ったスクリプトを高速なマシンで実行した場合はどうなるか・・・
ハードウェアのインストールウィザードは出ているのにしばらく停止したまま。その間にユーザが
インストール停止を選択してしまうかもしれない。そうでなくても無駄に待ち時間が長いのは問題。
だから、出てきたらすぐインストールを選択させたいんです。無駄な待ち時間をなくしたい。
そうするにはどうすればいいのでしょうか?
AutoHotKeyだと IfWinExist タイトル で そのタイトルが存在するかどうかチェックとか
そういった事が出来たのですが、WSHではどうするのかなぁと。
存在しないタイトルを objWshShell.AppActivate タイトル ってやってアクティブにしようとして
存在しないのだから多分 Falseが帰ってくるから、それがTrueになるまで1秒ずつ実行するような
無限ループでも作ればいいのでしょうか?こんな感じ

Do While objWshShell.AppActivate("ハードウェアのインストール") <> True
Wscript.Sleep 1000
Loop

しかしこうするとなんらかの原因で永遠にAppActivateするプログラムが立ち上がってこなかったら
無限ループに陥ってしまうし・・・どうしたらいいんでしょう?

462:461
07/12/28 21:35:15
>>460
すみませんでした。 ただ、署名を無効にするオプションが存在するのに署名無視でインストール
なんて出来るとセキュリティホールでしょ?って言っていたので、それはおかしいなと思って
レスしたまでです。で、携帯電話からってのは確かに、貴方には知る由もありません。申し訳ございませんでした。

>できるが、「確認ダイアログが出るかどうかが分からない」って事じゃ
方法をぜひご教示願えませんか?

>ある程度知ってる人ならスマートな解決方法がわからないまでも、この流れで
>2種類の解決方法が思い浮かぶだろうな。
向学のために2種類の解決方法とスマートな解決方法をご教示願えませんか?

>ブチむかついた
"ブチ"って、山口県辺りの人ですか?

463:デフォルトの名無しさん
07/12/28 22:14:01
>>461
>無限ループに陥ってしまうし・・・どうしたらいいんでしょう?
有限ループにする

464:461
07/12/28 23:48:48
>>463
なるほど・・・

i = 0
Do While objWshShell.AppActivate("ハードウェアのインストール") <> True
       WScript.Sleep 1000
       i = i + 1
       If i >= 10 Then
              WScript.Popup "エラー!ドライバのインストールに失敗しました", 5
              WScript.Quit
       End If
Loop
こんな感じですかね。。。

それともう1つ聞きたいのですが、指定した名前のドライバがきちんとインストールされているか
どうかIfで分岐する事はできませんか?

もう具体的に出した方が分かりやすいと思いますので言いますが UltraVNC のVNC Hook Driver
のインストールをしたいのです。 もしインストールされてなければインストールを実行(全自動)
インストールされていればインストールはせずにスクリプトを終了させる
といった分岐です。

465:デフォルトの名無しさん
07/12/29 11:38:43
もう全部手作業でやった方がいいと思うよ。

466:デフォルトの名無しさん
07/12/29 15:19:42
>>462
「署名を無効にするオプションが存在する」 なら、無効にしとけばいいじゃん!頭悪っ

467:デフォルトの名無しさん
07/12/29 15:29:01
あーあ、言っちゃったよ


468:461
07/12/29 18:09:53
>>466
そういう設定に変えちゃらめぇ〜〜〜!

469:デフォルトの名無しさん
07/12/30 01:12:43
方法があるのに「らめぇ〜」ってどういう事だよ。もう付き合いきれん。

470:デフォルトの名無しさん
07/12/30 08:43:10
らめぇ〜って何?
日本語の乱れ?

471:デフォルトの名無しさん
07/12/30 08:53:40
>>470
お前は萌えを知らんのか?

472:デフォルトの名無しさん
07/12/30 10:27:00
萌えは知っているがみさくらなぞ知らん!


473:デフォルトの名無しさん
07/12/30 12:37:18
MSはWSHというものが
Windowsの自動操作を行えると主張するが
AppActivate+SendKeysはWindowの基本設計とは完全に矛盾しており
システムのクラッシャーになりかねない

OLE対応アプリ/機能以外は操作できないというのは
実質WSHには自動操作はできないという事を示している

474:デフォルトの名無しさん
07/12/30 13:34:25
「Windowsの」ここ重要
決して「Windowsアプリケーションの」とは言っていない。

475:デフォルトの名無しさん
07/12/30 13:37:55
もちろん、ドライバのインストールはWindowsに関わることだけど、
上にもあるようにセキュリティに関わることだから、
自動化に制約がかかるのは勘弁してやれ。

476:デフォルトの名無しさん
07/12/30 15:00:30
でもさ、市販ソフトのインストーラでも、うらでダイアログポチポチしてるよね。
Windowsってなんなの?って感じ。

477:デフォルトの名無しさん
07/12/30 17:56:40
VBSと組めばバッチなんていらんくね?

478:デフォルトの名無しさん
07/12/30 20:31:53
WScript.ShellのPopUpの秒指定、ExcelやIEやHTAで効かないんだけど
使えているひともいるみたいで、環境依存なの?
URLリンク(www.vbalab.net)

479:デフォルトの名無しさん
07/12/30 20:33:11
そう思うなら、
COPY *.TXT A:\
と同等の機能をVBSで書いてみろよ。
適材適所で使い分けの出来ないヤツは役に立たん。

480:デフォルトの名無しさん
07/12/30 22:51:01
>>478
既知の問題で、(おそらく)環境依存で、原因不明で、解決法無し(不明)です
スレ違いなので詳しくは書きませんが代用法もあるわけですし
問題が起きるようならキッパリ諦めてください

481:デフォルトの名無しさん
07/12/31 04:06:48
>>479

Option Explicit
Dim objFSO
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "*.txt" "A:\"
Set objFSO = Nothing

こんな感じでしょうか?

482:デフォルトの名無しさん
07/12/31 04:49:23
前から思ってたんだがWScript.つけてるコードって
どこソースなんかね

タイピング増やしたくない俺は滅多に使わないんだが

483:デフォルトの名無しさん
07/12/31 05:15:55
Scripting Guyですよ

484:デフォルトの名無しさん
07/12/31 05:16:47
どこソースって、MSDN(WSHヘルプファイル)には

object.CreateObject(strProgID[,strPrefix])

object
 WScript オブジェクトです。

って書かれてるわけだが

485:デフォルトの名無しさん
07/12/31 05:19:20
ちゅーか別物だよね

486:デフォルトの名無しさん
07/12/31 05:26:43
Scripting.FileSystemObjectのインスタンス作る場合に置いては別物じゃないよ
大元は一緒でラップの仕方が違うだけだし

487:デフォルトの名無しさん
07/12/31 05:42:27
クライアントサイドはCreateObject()
サーバサイドはServer.CreateObject()
って記述してる

488:デフォルトの名無しさん
07/12/31 09:02:11
>>487
それはまた全然別の話だよw

489:デフォルトの名無しさん
07/12/31 16:43:29
>>481
ブッブーーッ!はいダメ。

無理すんな。素直にバッチファイル書けよ。

490:デフォルトの名無しさん
07/12/31 18:28:02
ダメな理由くらい書け

491:デフォルトの名無しさん
07/12/31 18:49:49

なぜダメか一人でずっと悩んでろ!

492:デフォルトの名無しさん
07/12/31 18:56:41
じゃあ俺は駄目だと思わないから481を使うね。

493:デフォルトの名無しさん
07/12/31 20:43:42
>>489
"*.txt" と "A:\" の間にカンマがないのがダメってこと?

494:デフォルトの名無しさん
07/12/31 20:54:13
CreateObject("Scripting.FileSystemObject").CopyFile "*.txt", "A:\"

495:デフォルトの名無しさん
07/12/31 21:11:40
>>479がダントツで役立たずだな

496:デフォルトの名無しさん
07/12/31 22:14:00
対話的じゃないとかいうオチか?

497:デフォルトの名無しさん
08/01/01 00:29:29
>>478
WScript.Shellという名前からしてWSH専用だろ

498:デフォルトの名無しさん
08/01/01 00:32:29
>>479はCopyFileで*.txt使えること知らずに複数行になるはずと
勘違いしてたに1票

499:481
08/01/01 01:18:11
あっちゃーやっちゃった。すみません。
objFSO.CopyFile "*.txt", "A:\"

↑こうですね・・・・。。。

500:デフォルトの名無しさん
08/01/01 02:35:00
500ゲット!あけおめ

501:デフォルトの名無しさん
08/01/01 13:01:20
>>499
はいそのとおり。
バッチなら COPY *.TXT A:\ で済む、バイトの女の子さえミスしようがない超超超簡単なことさえ
WSHで書くとミスっちゃうだろ?
ミスの確立が増える。そういうこと。
だから、WSHがあればBATはいらない、などとイキガッテないでさ、適材適所で使い分けれ。

それにしても、超〜〜思うツボだな。わざとミスってくれたのかと思ったよ。
天然だったんだねw

502:デフォルトの名無しさん
08/01/01 13:08:20
(ノ∀`) アチャー

503:デフォルトの名無しさん
08/01/01 13:10:06
>ミスの確立が増える。
狙って書いてるのか?w

504:デフォルトの名無しさん
08/01/01 13:20:23
天然だろ

505:デフォルトの名無しさん
08/01/01 14:11:33
>>501
かんじで かくと みすっちゃう だろ?
いきがって ないで ひらがなで かけ。

506:481
08/01/01 14:35:00
>>501
はい、今回WSHで書いて、確かにBatで書いた方が良い場面もある事を痛感しました。
WSHとBatを混合させると言うのはどうなんでしょうか?
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.Exec "copyFile.bat"

みたいな。でもこうすると処理が複雑になったときにbatとWSHと行き来するような事になると
なんかバグが出てきそう・・・。その時修正が大変じゃないですかねぇ・・・。
それに出来れば1つのスクリプトファイルで済ませたいし・・・

>>505
ワラタw

507:デフォルトの名無しさん
08/01/01 15:02:00
>>503-505
ネット初心者?

508:デフォルトの名無しさん
08/01/01 16:08:59
氏ね

それはこういうやつだろ。「確立」は単なる間違い。

>>506
バッチファイル内のCALLで他のバッチファイルを呼んだ方が解り易いかと。
基本バッチファイルで、足りない機能をWSHでフォローって感じで
書いていけばいいんじゃないかな。
無論、内部・外部コマンドが殆ど不必要なら、直接WSHで書いてしまえばいいし。

509:デフォルトの名無しさん
08/01/01 17:08:23
>>478
リンク先の代替法はSendKeys使っててもひとつやね
VBSファイル作って呼び出すのが確実

510:デフォルトの名無しさん
08/01/01 20:18:13
>>506
おもしろい発想だけど、たとえばC言語でこんな・・・
main()
{
 system("MKDIR \"C:\\Program Files\\MyApp\"")
 system("COPY *.* \"C:\\Program Files\\MyApp\"");
 system("ECHO インストールが完了しました。||PAUSE");
}
こんなの書いて、「オレ、C言語でプログラムかいたおw。スゴイでそ!」
なんて言ったら笑われるだけ。他の言語でも同じこと。

511:デフォルトの名無しさん
08/01/01 21:54:49
C言語が使いこなせてるわけではないが
C言語でプログラム書いたというのは事実なわけだが

512:デフォルトの名無しさん
08/01/01 22:43:12
笑われるのもまた事実というわけだ

513:デフォルトの名無しさん
08/01/02 01:32:04
JScriptのマクロ変数の値を出すことできる?
WScript.Echo(@if (@_Win32) 'Y' @else 'N' @end);
はできても、
WScript.Echo(@_Win32);
はできない

514:デフォルトの名無しさん
08/01/02 01:37:34
スレ違い

515:デフォルトの名無しさん
08/01/02 02:13:13
>>513
@変数は、JScript コードでは使えませんよ。
@setや@ifの中でしか使えない仕様です。

>>514
プログラム板で有名な基地害さんじゃありませんかw

516:デフォルトの名無しさん
08/01/02 02:53:29
>>513
@_win32じゃね?
>>514
それ見ていつも思うけど
誘導先が書いてないんじゃ無意味なレスじゃね?

517:デフォルトの名無しさん
08/01/02 05:05:50
そうでもないか

518:デフォルトの名無しさん
08/01/02 12:01:50
>>510
ちょwwwwそれはないですwwwww さすがにそれはひどい・・・・。

519:デフォルトの名無しさん
08/01/02 15:06:44
で、ドライバがインストールされているかどうかで処理を分岐させることはWSHではどうすれば良いのでしょうか?

520:デフォルトの名無しさん
08/01/02 15:10:57
If Then Else End If

521:デフォルトの名無しさん
08/01/02 19:17:49
>>520
いや、その構文を使うのはわかるけど、 If の後に書く内容ですよ。
どういう風に書いて真偽を返させればいいのかが全く検討がつきません。

If ドライバがインストールされている Then
  MsgBox ドライバインストールされてるよ〜
Else
  MsgBox ドライバインストールされてないよ〜
End If

の"ドライバがインストールされている" と言う判定をどう書けばいいのかをお聞きしています。

522:デフォルトの名無しさん
08/01/02 19:27:25
インストールされた状態とされていない状態の差分を調べろ。
レジストリでも覗いとけ。それ以上はこのスレの範囲外。

523:デフォルトの名無しさん
08/01/02 20:45:49
・複数のバイナリファイルの文字列を置換したい。
・置換リストを作って置換したい。
・CUIでもいい。

これらを実行したい場合は、WSHで出来ますか?

524:デフォルトの名無しさん
08/01/02 21:27:49
>>523
WSHとCOM(標準のものだけで事足りる)で出来ますよ

525:デフォルトの名無しさん
08/01/02 22:11:30
バイナリはpowershellのほうが楽

526:デフォルトの名無しさん
08/01/02 22:30:03
>>524
COMとはCOMMAND.COMのことですか?

>>525
win2kは未対応のようで、うちでは使えません。

527:デフォルトの名無しさん
08/01/03 05:08:06
よくActiveXコントロールの事
ActiveXって言う人いるよね。
もちろんActiveXが何かは殆どわかってない人が多い

528:デフォルトの名無しさん
08/01/03 12:46:44
特撮ヒーローの名前だ間違いない

529:デフォルトの名無しさん
08/01/03 16:09:38
>>526
win2kではCMD.EXEだな

530:デフォルトの名無しさん
08/01/03 16:22:51
WSHでバイナリは読めても書くのが大変だから、PowerShell使え
win2kでも誤魔化せば使えるらしい

531:デフォルトの名無しさん
08/01/03 16:38:06
つVBA

532:デフォルトの名無しさん
08/01/03 16:57:36
>>529
そういうボケはいらん
COMコンポーネントだろ

533:デフォルトの名無しさん
08/01/03 17:05:17
そういうボカシタ話はいらん
具体的なProgIDを書け
しらんなら書くな

534:デフォルトの名無しさん
08/01/03 17:32:01
CreateObjectすんのにProgIDとか使わんがな

535:デフォルトの名無しさん
08/01/03 17:40:10
ProgID使わないでどうやってCreateObjectするんだよ。
っていうかググればADODB.Stream使うってすぐ出て来るよね。

536:デフォルトの名無しさん
08/01/03 17:42:03
ADODB.Streamにバイナリ書き込むのが面倒だって

537:デフォルトの名無しさん
08/01/03 18:18:04
WSHでも理論上はできそうだな。

俺は面倒臭がりだからC#で書くけど。

538:デフォルトの名無しさん
08/01/03 20:22:49
>>522
レジストリを覗く・・・それぐらいしか手が無いとは・・・・OTL

539:デフォルトの名無しさん
08/01/03 20:55:40
>>538
WSHはそういうもの
痒いところに手を伸ばすにはダルシムレベルの修行が必要

540:デフォルトの名無しさん
08/01/03 22:37:30
wmi

541:デフォルトの名無しさん
08/01/04 00:19:04
残念ながらそれはハズレだ

542:デフォルトの名無しさん
08/01/04 03:12:15
>>539
別にWSHがそうだから、
とかいう問題じゃなくね?

543:デフォルトの名無しさん
08/01/04 10:01:01
きっとWSH以外ならもっと簡単な方法があるんだろう
僕にもその方法を教えてください

544:デフォルトの名無しさん
08/01/04 11:46:40
そういえばWindowsXPの「プログラムの追加と削除」ってHTAじゃなかったっけ

545:デフォルトの名無しさん
08/01/04 14:37:11
WSHでアイドル時の検出とか出来ませんか?
Windowsのタスクスケジューラでアイドル時検出試してみたのですが
とりあえず1分アイドル時間が続いたら hoge と表示してpauseしてそれから終わらせるスクリプト
をスケジュール登録してみたのですが、 負荷が小さい処理、例えばメモ帳に文字列を
打ち込んでいたり、こうやって2chを見たりしていると、操作しているからアイドルではないのですが
CPUから見るとアイドル状態なので、スケジュールが実行されてしまいます。
やりたい事は パソコンを切るのをしょっちゅう忘れる愚息のパソコンに仕込む事による
省エネ対策です。 1時間以上パソコンを全く触ってないならshutdownさせると。
しかし先ほど述べたように1時間以上2chを見てたりネットサーフィンしている状態だと
操作しているにも関わらずアイドル検出されてしまってシャットダウンされてしまうのでダメです。
MSNメッセンジャの「退席中」表示みたいな、指定時間全くマウスもキーボードも操作しなかったとき
(Inputが全く無い時)にスクリプトを発動させたいのですが、WSHでアイドル時間を取得できませんか?

546:デフォルトの名無しさん
08/01/04 14:40:42
コントロールパネルの電源オプションでよくね?

547:デフォルトの名無しさん
08/01/04 14:41:16
電源管理使えよ

548:デフォルトの名無しさん
08/01/04 15:08:21
レスありがとうございます。
電源オプションのプロパティ ウィンドウを見てみましたが、シャットダウンがありません。
まぁ休止状態で代用してもいいかな?とは思いますが
システム休止状態 の所の 1時間後 にすると、アイドル時間(CPUがアイドルではなく
ユーザによるマウスやキー入力が一切無いアイドル)が1時間経ったら勝手に休止になる
のでしょうか?スレチ?

549:デフォルトの名無しさん
08/01/04 15:13:03
システム休止状態1分で 何もせずに2chブラウザだけ立ち上げた状態で
放置してみましたが、休止状態になりませんでした。
これじゃダメなようです・・・・

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
> デカイ動画ファイルの 最初の数バイトだけ 読み込んで処理したいけど
とのことだ。
バイナリは無理だろ。


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

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