旅人 さん 2014年 02月 13日 18時 28分 05秒

数字当てゲームをダウンロードさせていただきました。
試してみたところ、例えば、コンピューターが、「542」を選んだ場合、自分が「122」と入れると、1hit 1dorw と表示されてしまいます。
どうにかできないでしょうか。

IT業界5年目 さん 2013年 11月 14日 16時 53分 13秒
URL:http://masahiror.hatenadiary.jp/entry/20111201/vbs_admin_run

以下の内容ですが、自己解決しました。

VBSを管理者として実行することで解決しました。
詳細はURLをご参照ください。

IT業界5年目 さん 2013年 11月 14日 15時 30分 57秒

こんにちはVBSで困っていることがあります。
力をお貸し下さい。

OS:Windows7 pro

【やりたいこと】
ファイルサーバからFilecopyを使用してC:\Program Files\Common Files\ODBC\Data Sourcesへファイルをコピーしたい。

【ソース】
Option Explicit

Dim objFSO
Dim strCopyFile1
Dim strCopyFile2

Set objFSO = CreateObject("Scripting.FileSystemObject")
strCopyFile1 = "\\testsvr\test\test.dsn"
strCopyFile2 = "C:\Program Files\Common Files\ODBC\Data Sources\test.dsn"

objFSO.CopyFile strCopyFile1, strCopyFile2, True

msgbox "完了しました"

Set objFSO = Nothing

【考察】
エクスプローラでC:\Program Files\Common Files\ODBC\Data Sources以下にファイルコピー時はアクセス許可を求められますので、それが原因かと考えています。
思い通りにコピーする方法等ご存知の方おられましたら助けて下さい。


nysh さん 2013年 08月 24日 11時 07分 53秒

超初心者さん

肝心の xhr.responseText がコメントアウト(//の後は注釈扱いで無視されます)されているので、そのせいで動いていないように見えるのでは?

nysh さん (nysh2480@gmail.com) 2013年 08月 19日 14時 57分 57秒
URL:http://magicgate.luna.ddns.vc/

自宅サーバでWSHをCGIとして動かしています。
WWWサーバはAbyss X1で、ASP.NETは使っていません。
JScript、VBScriptによるファイルアップロードCGIに必要なコードや知識を探しています。
よろしくお願いします。

超初心者 さん 2013年 08月 05日 10時 43分 46秒

xpで動いていたスクリプトを、
Windows7に移植したら動かなくなりました。

スクリプトは下記です。


var xhr = WScript.CreateObject("MSXML2.XMLHTTP");
xhr.open("GET", "http://192.168.0.1/index.asp");
xhr.send();
while( true )
{
     WScript.Sleep(100);
     if( xhr.readystate == 4 )
     {
          //WScript.Echo( xhr.responseText );
          WScript.Quit();
     }
}

素人なもので困っています。
どなたか、お知恵を貸して下さい。
お願いします。

初心者過ぎて恐縮野郎 さん (czw04442@yahoo.co.jp) 2013年 03月 18日 23時 19分 09秒

始めまして。
初心者過ぎて恐縮なのですが・・・

WSHであるページのリンクだけを抜いて、そのリンク先だけを順次巡回しておりました。

そのあるページが仕様変更致しました。
簡単に言うとこのような感じのページになりました。

ttp://ameblo.jp/new-blue-777/archive-201206.html

こう言った場合、例えばメニューの『記事』とか『コメント』とか『よくある質問』とかが、ページ上段の写真の直下にありますが、ここだけを片っ端からクリックする方法などはあるのでしょうか?

管理人牟田口大介 さん 2012年 09月 02日 01時 53分 48秒

>shum さん
こちらでも確認してみましたが、確かにEmptyな変数に対して論理演算子を使うとLong型の0が代入されますね。
しかしなぜそうなるのか、理由は私にはわかりません。すみません。
VBScript or VBの言語仕様なんでしょうか…。

Empty値を、代入さえしなければいつまでもEmptyであると期待して扱っていると思わぬ落とし穴にはまりそうですね。
パターンとしては、変数宣言→On Error Resume Next内で変数にメソッドの結果代入→If文で変数を論理演算→その変数がEmptyかどうか調べる
みたいな流れのときに。

エラー処理の中で、メソッドが失敗して変数がEmptyのままなら、その変数に何らかの無効値(0とかFalseとか、変数に応じて)を入れておくべきなのかもしれません。
あるいは変数は必ず初期値を入れておくのが安全かもしれません。

shum さん 2012年 09月 01日 21時 09分 37秒

要らん事してしまったようですorz
もう一度、例文コードを載せます。ごめんなさい

'−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Dim bFlg
If Not bFlg Then
  '本来ここで何か処理を行う
End If
MsgBox IsEmpty(bFlg) & "," & TypeName(bFlg) & "," & bFlg 'False,Long,0 となっている!
'−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

shum さん 2012年 09月 01日 21時 05分 58秒

初めまして。
VBScriptでなんだか不自然な現象を発見したのでここに投稿します。 常識または既出だったらスミマセン
WSH5.7 on Windows Vistaを使用してます。

[現象:Empty値の入った変数を式の中で論理演算子と組み合わせて使用すると、0(Long型)が代入される]

初めまして。
VBScriptでなんだか不自然な現象を発見したのでここに投稿します。 常識または既出だったらスミマセン
WSH5.7 on Windows Vistaを使用しています。

[現象:Empty値の入った変数を式の中で論理演算子と組み合わせて使用すると、0(Long型)が代入される]

例えば、下記のような感じです。

'−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Dim bFlg
If Not bFlg Then
    '本来ここで何か処理を行う
End If
MsgBox IsEmpty(bFlg) & "," & TypeName(bFlg) & "," & bFlg 'False,Long,0 となっている!
'−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

以下も同様です。
If bFlg And 条件 Then
If bFlg Or 条件 Then

以下は大丈夫(Emptyのまま)です。
If bFlg Then
If bFlg = 0 Then
If bFlg + 1 Then
If IsEmpty(bFlg) Then

If文の条件式だけではなくて、代入式の右辺などで使用しても全て同じ結果です。


どうも書いたコードがうまく動作しなくて、この現象に気づくまで軽くハマッってしまいました。
なんだか腑に落ちない現象ですね。

aMI_KUH95291 さん 2012年 08月 04日 15時 32分 55秒

>牟田口大介 さん

>インクルードするファイルに記述する関数を
>function test(a){WScript.Echo(a)}
>ではなく
>test=function(a){WScript.Echo(a)}
>のように記述しておくと、呼び出し元スクリプトのfunction内でevalしても、test関数はグローバルで実行できるみたいです。

なるほど。グローバル変数への代入の形で書けば、どこで実行されても同じか。
自分用のライブラリ参照はそのやり方を使ってみますわ。

>WSHでは関数のインクルードは.vbsや.jsではなく、.wsfファイルでやるのがお作法なんでしょうね。

本来そうなんでしょうけど、
企みの一つは、インクルード対象をWEB上から持ってこようとしているので。

最終的には

use("function tr");

みたいな書法を取り入れたいな、と。
最小限の自分用スクリプトのテンプレート作っておいて
あとの機能追加は必要に応じて個別に。




管理人牟田口大介 さん 2012年 08月 04日 02時 56分 55秒

>aMI_KUH95291 さん

インクルードするファイルに記述する関数を
function test(a){WScript.Echo(a)}
ではなく
test=function(a){WScript.Echo(a)}
のように記述しておくと、呼び出し元スクリプトのfunction内でevalしても、test関数はグローバルで実行できるみたいです。

ただ、どうもevalで実行するスクリプトは、セキュリティ制限が通常よりきつくなるらしくて、たとえばファイルを読み書きするコードをevalしても動かなかったりするらしいです。

WSHでは関数のインクルードは.vbsや.jsではなく、.wsfファイルでやるのがお作法なんでしょうね。
.wsfは色々とめんどくさいですけども。

aMI_KUH95291 さん 2012年 08月 03日 15時 03分 56秒

>牟田口大介 さnn

>「関数のインクルードは初期処理ではなく、あくまでインクルードである」と考えれば、そこだけ冒頭に持ってきてもいいんじゃないでしょうか。

あ。まさしくそうですよねえ。
単に初期化の一環と考えてましたが
「どんな外部ソースを使っているか」は隠蔽してしまわず冒頭に置くべきでしょう。

それはそれとして、結局、function内で
Global.eval(ほげほげ) とかやっても
少なくともWSH上では思うように動いてくれないんですよね。
(当然、適宜Globalはなんらかの方法で設定しておくという前提で。)

グローバルなプロパティやメソッドの設定は Global 使ってうまくいきましたが
あとは eval だけなんですよねー。
実用的には牟田口大介さんの言われる通りで問題ないのですが。
なんか、気になります。


管理人牟田口大介 さん 2012年 08月 03日 13時 18分 15秒

>aMI_KUH95291 さん

「関数のインクルードは初期処理ではなく、あくまでインクルードである」と考えれば、そこだけ冒頭に持ってきてもいいんじゃないでしょうか。
その場合、

eval(別ファイル内容);
初期化();

主処理

function 初期化(){}

という構造になるかと思います。
他の言語構文と照らしても、インクルード部分だけ冒頭に持ってくるのはそれほど違和感がないように思います。

aMI_KUH95291 さん 2012年 08月 03日 12時 39分 07秒

あ。
逆に主処理を function main() にして、
一番底から呼び出す、という手はあるな。

aMI_KUH95291 さん 2012年 08月 03日 11時 48分 26秒

WSH/JScriptのevalについてです。
他ソースのincludeの仕組みを作ろうとしているのですが
「evalは実行時のスコープに依存する」ので
グローバルなfunctionの追加とかを行うには
evalをトップレベルで直接記述するしかありません。

初期化の処理とかは、まとめて後ろの方に置きたいのですが
それだとfunction呼び出しになるので、include用のevalが書けません。

なにかエレガントな解決方法はないでしょうか?

aMI_KUH95291 さん 2012年 07月 27日 17時 13分 34秒

>牟田口大介 さん
いえいえ。諦めて別IE立ててやります。
「できること」は調べればたいていわかるんですが
「できないこと」は見切るのがなかなか難しいので。
参考になりました。ありがとうございます。

管理人牟田口大介 さん 2012年 07月 27日 16時 56分 09秒

>aMI_KUH95291 さん
私もいい方法が思いつかないです。すみません。
IEはタブ化してから外から扱いにくくなりましたよね。
もっとも外から扱うことはあまり想定されていないのだとは思いますが…。

aMI_KUH95291 さん 2012年 07月 27日 15時 19分 48秒

牟田口大介 さん、さっそくどうも。
ですよねー。やっぱり。
新たにIE立てるのではなく
既設のIEにタブ足して自動運転、てのをやろうといろいろ試しているところです。

DocumentComplete や OnQuit をうまく扱うか
何か代わりのいい方法はないもんでしょうかね。


管理人牟田口大介 さん 2012年 07月 27日 15時 16分 03秒

>aMI_KUH95291 さん

WScript.ConnectObject()で既存のオブジェクトのイベントを捕捉できるのですが、残念ながらIEオブジェクトは対応していないので不可能、ということだったと記憶しています。

IE(Window)オブジェクトのDocumentプロパティから辿れるDOMオブジェクトのイベントは、GetRef関数で関連付けできたりはしますが、Windowオブジェクトそのもののイベントは取れなかったと思います。

aMI_KUH95291 さん 2012年 07月 27日 14時 37分 05秒

イベントハンドラのプリフィックス指定付のWScript.CreateObjectからではなく
Shell.ApplicationのShellWindowsコレクションから捕まえた
既存のIEのイベントを取ることはできるんでしょうか。

いろいろ試しているのですが、どうもうまくいきません。

BAT VBS やや経験有 さん 2012年 07月 06日 09時 53分 31秒

管理人牟田口大介 さん ありがとうございます。

はい、1) は手動でタスクスケジューラに登録するということです。

はい、3) はMozBackupが行う処理です。

求める情報はほぼもらえたと思います。
時間を見つけて1週間以内に作成して、ここに投稿して、添削してもらいたいと希望します。

管理人牟田口大介 さん 2012年 07月 05日 17時 42分 15秒

>BAT VBS やや経験有 さん

1)は手動でタスクスケジューラに登録するということでしょうか?

2)はWshShell.RunもしくはWshShell.Execで可能と思います。

3)はMozBackupが行う処理ということで、スクリプト上は特に処理をしなくてもいいということでしょうか。

4)はファイル数の数はまずFileSystemObjectオブジェクトのGetFolderメソッドでFolderオブジェクトを取得し、Folder.Files.Countプロパティの値を調べればいいかと思います。

もっとも古い.pcvファイルがどれかを調べて削除するには、

a) もっとも古い最終更新日時を持つファイル名を格納する変数宣言

b) もっとも古い日時を格納する変数宣言。未来の日時を代入して初期化しておく。

c) Folder.Filesコレクションに対してFor EachでFileオブジェクトを列挙

d) ループ中で、まず拡張子を調べて該当のものだけ対象とする。
if LCase(FileSystemObject.GetExtensionName(File.Name))="pcv" then
ファイル名の絞り込みを拡張子だけではできない場合は、さらにinstr関数などを使って絞り込む。

e) ループ中で、現在チェック中のファイルの最終更新日時(File.DateLastModified)とb)で作った変数を比較演算し、b)の方が古ければ何もしない。b)の方が新しければ、そのファイルの最終更新日時をb)に代入し、ファイルパス(File.Path)をa)に代入する

f) ループを抜けた後で、a)に代入されているファイル名に対し、FileSystemObject.FileDeleteメソッドを実行。

以上のようにすればできるかと思います。
何かわからないことがありましたら、またご質問ください。

BAT VBS やや経験有 さん 2012年 07月 05日 09時 56分 07秒

初めて投稿します。10日程度で解決したい相談を投稿します。
WinXP で実行中のアプリを For each で取得して、taskkill で強制終了する VBS 程度でしたらネット情報を参照して作成した経験があります。

下記の今回の相談について「このURLの記載と、このURLの記載を組み合わせれば可能」等の、何かヒントになる情報をもらえましたら助かります。

今回、Thunderbird をバックアップできる MozBackup はコマンドラインで実行できる事を知りました。
そこで、WinXP タスクスケジュールに、次の様な手順のスクリプトを登録して、MozBackup を自動実行したいです。VBSに限らず、何でも構いません。

0)予め手動で、LAN上に共有フォルダ \\192.168.xxx.xxx\share\Backup を作成しておき、

1)週1回、タスクスケジューラを用いて、スクリプトを実行して、
2)"MozBackup.exe Thunderbird.conf" を実行して、
3)バックアップファイル Thunderbird *.PCV が共有フォルダに作成されて、
4)共有フォルダの Thunderbird *.PCV の数が 11 になっていれば、最も古い Thunderbird *.PCV を削除して、
5)スクリプトは終了する。

Gowasu_na さん 2012年 05月 21日 00時 35分 19秒

早々のご回答ありがとうございます。

やっぱり、やってみないとわかりませんね。

コード作成して、実行して結果を見たいと思います。

アドバイスありがとうございます。

また、ご相談させてください。




管理人牟田口大介 さん 2012年 05月 21日 00時 13分 16秒

>Gowasu_na さん

どちらが速いかは私も何とも言えないですね。ぜひやってみてください^^
中間ファイルを作る手順が省けるのでその分後者が速い気がしないでもないですが、確信は持てません。

ただファイル名以外の情報を逐一FileSystemObjectで取得するのであれば、結局そこがボトルネックになって全体の処理は遅くなる可能性もあります。
しかし件のサンプルのようにFSOだけで再帰処理で全部こなすよりは速くなる可能性もなきにしもあらずで、やっぱり実際にやってみないと分からないですね。

Return