素人丸出しお粗末で遅くてもいいので
いますぐ使えるちょっぴり便利プログラムを作れ
(例○○を自動処理してくれるプログラム)
探検
VBSで便利なプログラムを作れスレ
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2007/02/03(土) 17:49:47397392
2011/04/10(日) 19:18:31.68398デフォルトの名無しさん
2011/04/23(土) 17:43:43.24 唐突ですがウサギ型ロボットをR2D2にするためのVBSを公開しましたよ
ttp://xbmc.inpane.com/sub/nabaztag/
ttp://xbmc.inpane.com/sub/nabaztag/
399デフォルトの名無しさん
2011/04/23(土) 23:30:59.78 会社の共有PCの管理のため、Windowsのログオンスクリプトにかまして、
とあるプロセスを監視しています。
なので基本的にユーザーがログイン中は常にWscript.exeが動いているのですが、
↓のような無限ループでもいいんですかね?
なんとなく無理やりな感じがして、もっとスマートなやり方があるでしょうか?
Call プロセス監視処理
@
Sub プロセス監視処理
Do
'WMIからプロセス取得して、目標のプロセスがでたらループ抜け
Wscript.Sleep 1000
Until
Call やりたい処理
End Sub
A
SUb やりたい処理
'やりたい処理がおわったらまた、プロセス監視処理をCall
End Sub
とあるプロセスを監視しています。
なので基本的にユーザーがログイン中は常にWscript.exeが動いているのですが、
↓のような無限ループでもいいんですかね?
なんとなく無理やりな感じがして、もっとスマートなやり方があるでしょうか?
Call プロセス監視処理
@
Sub プロセス監視処理
Do
'WMIからプロセス取得して、目標のプロセスがでたらループ抜け
Wscript.Sleep 1000
Until
Call やりたい処理
End Sub
A
SUb やりたい処理
'やりたい処理がおわったらまた、プロセス監視処理をCall
End Sub
400デフォルトの名無しさん
2011/04/27(水) 22:03:44.07401デフォルトの名無しさん
2011/04/27(水) 22:11:12.36402デフォルトの名無しさん
2011/04/27(水) 22:38:33.12403デフォルトの名無しさん
2011/05/20(金) 13:19:16.79 ここで聞いていいのか分かりませんが、分かる方いたら教えてください。
コマンドラインでフォルダを圧縮するためにZIP.VBSというのを使っているのですが、
MakeZIP.VBSでフォルダを圧縮する際、zipファイルにフォルダ名が格納されてしまいます。
photo
├aa.jpg
└bb.jpg
上記のような場合に、zipファイルにphotoフォルダも格納されます。
これをphotoフォルダを格納せず、ファイルのみ格納するにはどこを修正すればよいのでしょうか。
よろしくお願いします。
コマンドラインでフォルダを圧縮するためにZIP.VBSというのを使っているのですが、
MakeZIP.VBSでフォルダを圧縮する際、zipファイルにフォルダ名が格納されてしまいます。
photo
├aa.jpg
└bb.jpg
上記のような場合に、zipファイルにphotoフォルダも格納されます。
これをphotoフォルダを格納せず、ファイルのみ格納するにはどこを修正すればよいのでしょうか。
よろしくお願いします。
404デフォルトの名無しさん
2011/05/20(金) 14:38:03.93 そもそもスレ違いだが、それ解らないレベルならZIP.VBSなんか使わずに
コマンドライン型のアーカイバツール使えよ。
GUIで予め設定しておけば渡したフォルダの中身だけ圧縮してくれるものなんて
いくらでもあるから。
コマンドライン型のアーカイバツール使えよ。
GUIで予め設定しておけば渡したフォルダの中身だけ圧縮してくれるものなんて
いくらでもあるから。
405デフォルトの名無しさん
2011/05/23(月) 11:47:33.82 修正も何もコマンドラインをまず書けよ、なっ?
406デフォルトの名無しさん
2011/06/05(日) 10:08:34.52 ブ・・・vbs・・・
わしは・・ワシは今までこんな素晴らしい言語があるなんて知らなかった・・・!
APIなんかいらないじゃん!
わしは・・ワシは今までこんな素晴らしい言語があるなんて知らなかった・・・!
APIなんかいらないじゃん!
407デフォルトの名無しさん
2011/06/05(日) 11:18:49.84 VBSにD&Dしたものを他のソフトのウィンドウへD&Dとして受け渡すことは可能ですか?
408デフォルトの名無しさん
2011/06/05(日) 18:56:55.67 ファイルへのD&Dなら可能
これは単なるコマンドライン実行なので
ウィンドウへのD&Dならデフォでは不可
専用のCOMでも作るか探すかすれば出来ないことはないだろうけど
これは単なるコマンドライン実行なので
ウィンドウへのD&Dならデフォでは不可
専用のCOMでも作るか探すかすれば出来ないことはないだろうけど
409デフォルトの名無しさん
2011/06/06(月) 00:45:23.45 サンプルをいじることしか出来ない私には手に負えないですね…
諦めで別な方法を模索してみます
諦めで別な方法を模索してみます
410デフォルトの名無しさん
2011/06/14(火) 02:40:29.91 2chのhtmlを取得して、vbsで正規表現による抽出と置換をしてhtmlを整形してログを管理するプログラムに読ませたい。
抽出までは上手くいきました。
しかし、正規表現による置換ができません
例えばこのスレのhtml内のコメ409を抜粋するとこうです
<dt>409 :<a href="mailto:sage">
<b>デフォルトの名無しさん</b></a>:2011/06/06(月) 00:45:23.45 <dd> サンプルをいじることしか出来ない私には手に負えないですね… <br> 諦めで別な方法を模索してみます <br><br>
ここから
409 :2011/06/06(月) 00:45:23.45 <dd> サンプルをいじることしか出来ない私には手に負えないですね…
<br> 諦めで別な方法を模索してみます<br><br>
にするには\<a.+/a>|(</a>:)|\</?.+?\> で置換して余計なものを取り除けばできました。
しかし、<dd>や<br>などの改行にあたる部分も別途置換しないといけないのでここで詰まってます。
片方づつなら出来るのですが同時に1スクリプト内
でやろうとするにはどうすればいいのでしょうか?
抽出までは上手くいきました。
しかし、正規表現による置換ができません
例えばこのスレのhtml内のコメ409を抜粋するとこうです
<dt>409 :<a href="mailto:sage">
<b>デフォルトの名無しさん</b></a>:2011/06/06(月) 00:45:23.45 <dd> サンプルをいじることしか出来ない私には手に負えないですね… <br> 諦めで別な方法を模索してみます <br><br>
ここから
409 :2011/06/06(月) 00:45:23.45 <dd> サンプルをいじることしか出来ない私には手に負えないですね…
<br> 諦めで別な方法を模索してみます<br><br>
にするには\<a.+/a>|(</a>:)|\</?.+?\> で置換して余計なものを取り除けばできました。
しかし、<dd>や<br>などの改行にあたる部分も別途置換しないといけないのでここで詰まってます。
片方づつなら出来るのですが同時に1スクリプト内
でやろうとするにはどうすればいいのでしょうか?
411デフォルトの名無しさん
2011/06/14(火) 02:45:14.28 \<a.+/a>|(</a>:)|\</?.+?\> の部分を空白に置換するvbsです
Dim objFile ' 対象ファイル
Dim oldText ' 置換前テキスト
Dim newText ' 置換後テキスト
Dim objFSO ' ファイルシステムオブジェクト
Dim objRep ' 正規表現オブジェクト
Dim repText ' 置換対象文字列
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("読む込むテキストファイル")
' テキストデータ読込
oldText = objFile.ReadAll
' 置換対象文字列
repText = ""
Set objRep = New RegExp
objRep.Multiline = True
' 正規表現パターンを指定する
objRep.Pattern = "\<a.+/a>|(</a>:)|\</?.+?\>"
objRep.IgnoreCase = True
objRep.Global = True
' テキスト変換
newText = objRep.replace(oldText, repText)
objFile.Close
' 書き込み
Set objFile = objFSO.CreateTextFile("書き出すテキストファイル")
objFile.WriteLine (newText)
objFile.Close
Dim objFile ' 対象ファイル
Dim oldText ' 置換前テキスト
Dim newText ' 置換後テキスト
Dim objFSO ' ファイルシステムオブジェクト
Dim objRep ' 正規表現オブジェクト
Dim repText ' 置換対象文字列
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("読む込むテキストファイル")
' テキストデータ読込
oldText = objFile.ReadAll
' 置換対象文字列
repText = ""
Set objRep = New RegExp
objRep.Multiline = True
' 正規表現パターンを指定する
objRep.Pattern = "\<a.+/a>|(</a>:)|\</?.+?\>"
objRep.IgnoreCase = True
objRep.Global = True
' テキスト変換
newText = objRep.replace(oldText, repText)
objFile.Close
' 書き込み
Set objFile = objFSO.CreateTextFile("書き出すテキストファイル")
objFile.WriteLine (newText)
objFile.Close
412デフォルトの名無しさん
2011/06/14(火) 02:45:45.67 ' 書き込みの前から' 正規表現パターンを指定するへループして繰り返せればなと考えているのですが上手く思いつきません。
もし、わかるかたがいらっしゃれば教えてください。よろしくお願いします。
もし、わかるかたがいらっしゃれば教えてください。よろしくお願いします。
413デフォルトの名無しさん
2011/06/14(火) 04:43:26.73 やりたい事がいまいちわからないが、
複数回やりたいんであれば、
正規表現パターンを配列に入れて、ループするだけじゃないかな〜
複数回やりたいんであれば、
正規表現パターンを配列に入れて、ループするだけじゃないかな〜
414デフォルトの名無しさん
2011/06/14(火) 07:48:13.52415デフォルトの名無しさん
2011/06/14(火) 19:38:12.72 なんでdat使わないで、
わざわざhtmlなんて難しいものを使う?
わざわざhtmlなんて難しいものを使う?
416デフォルトの名無しさん
2011/06/15(水) 11:59:02.32 ちょっと見てみた、確かにhtmlよりdatのほうが容量4割減でおいしいんだけどタイトル取得できないのとコメ番号ないから置換するときどうやって割り当てようか思いつかない
417デフォルトの名無しさん
2011/06/15(水) 12:03:32.40 よくみたら1行目の最後にタイトルあったわ
418デフォルトの名無しさん
2011/06/15(水) 19:08:23.10 デスクトップから2ch検索するvbs作ってるんだけど、
変数の件でわからないところがある。
Dim 変数 で宣言する
このとき変数が、例えば2churlとかだと識別子がありません。とエラーがでる
churlなら問題ない、どうして先頭に数字がくるといけないんですか?
識別子がありません。
変数の件でわからないところがある。
Dim 変数 で宣言する
このとき変数が、例えば2churlとかだと識別子がありません。とエラーがでる
churlなら問題ない、どうして先頭に数字がくるといけないんですか?
識別子がありません。
419デフォルトの名無しさん
2011/06/15(水) 19:30:46.07 先頭に数字が来ることを許すと
Dim 2
とか
Dim 123
という変数が出来てしまう
これってどうやって変数の2や123と、数値の2や123を識別するの?
ってことになるので、必ず英字を入れなければならないというルールが必要になるわけで
1文字の変数がある以上、その英字が入る位置は1文字目、つまり先頭になり
1文字目が英字でなければいけない=先頭が数字ではいけない
ってことになるわけだ
1文字目が英字でさえあれば、1文字変数でも、2文字目以降が数字でも
確実に変数と数値を識別できる
Dim 2
とか
Dim 123
という変数が出来てしまう
これってどうやって変数の2や123と、数値の2や123を識別するの?
ってことになるので、必ず英字を入れなければならないというルールが必要になるわけで
1文字の変数がある以上、その英字が入る位置は1文字目、つまり先頭になり
1文字目が英字でなければいけない=先頭が数字ではいけない
ってことになるわけだ
1文字目が英字でさえあれば、1文字変数でも、2文字目以降が数字でも
確実に変数と数値を識別できる
420デフォルトの名無しさん
2011/06/17(金) 20:55:49.75 vbsでpingを打って、通るまで処理を繰り返すスクリプトを
作成しているのだが、どうもうまくいきません。
IF文で分岐をさせるのはうまくいくのですが、以下のスクリプトで
192.168.0.3に対して通るようになった時点でスクリプトを終了
させたいんですが、どこが悪いんでしょうか?
dim strIP
dim timeOut
'タイムアウト設定(ミリ秒)
timeOut = "10"
strIP = "192.168.0.3"
Set objWMIService = GetObject("winmgmts:\\.")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_PingStatus " & _
"Where Timeout = " & timeOut & " AND Address = '" & strIP & "'")
For Each objItem in colItems
do while objItem.StatusCode <> 0
Wscript.echo "NG"
Set objWMIService = GetObject("winmgmts:\\.")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_PingStatus " & _
"Where Timeout = " & timeOut & " AND Address = '" & strIP & "'")
loop
Next
作成しているのだが、どうもうまくいきません。
IF文で分岐をさせるのはうまくいくのですが、以下のスクリプトで
192.168.0.3に対して通るようになった時点でスクリプトを終了
させたいんですが、どこが悪いんでしょうか?
dim strIP
dim timeOut
'タイムアウト設定(ミリ秒)
timeOut = "10"
strIP = "192.168.0.3"
Set objWMIService = GetObject("winmgmts:\\.")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_PingStatus " & _
"Where Timeout = " & timeOut & " AND Address = '" & strIP & "'")
For Each objItem in colItems
do while objItem.StatusCode <> 0
Wscript.echo "NG"
Set objWMIService = GetObject("winmgmts:\\.")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_PingStatus " & _
"Where Timeout = " & timeOut & " AND Address = '" & strIP & "'")
loop
Next
421デフォルトの名無しさん
2011/06/19(日) 01:45:19.27 選択プルダウンボックスとか作れたら便利になるのになぁ
422デフォルトの名無しさん
2011/06/19(日) 02:28:19.04 VBSで選択プルダウンボックス使ってるけど、何か?
VBSというかWSHは、COM、OCXで拡張してナンボなんだから
欲しいけど言語に備わってない機能は、外部で補えば良いだけだ
VBSというかWSHは、COM、OCXで拡張してナンボなんだから
欲しいけど言語に備わってない機能は、外部で補えば良いだけだ
423デフォルトの名無しさん
2011/06/19(日) 07:13:15.16 自分専用ならそうだろうけど、
comはインストールの壁が越えられない
comはインストールの壁が越えられない
424デフォルトの名無しさん
2011/06/19(日) 07:17:25.40 超えられるけど、何か?
USBメモリで持ち歩いて使ってる
COMのレジストリ登録を自動化してるとかではなく未登録で
USBメモリで持ち歩いて使ってる
COMのレジストリ登録を自動化してるとかではなく未登録で
425デフォルトの名無しさん
2011/06/19(日) 07:43:48.47 自信満々で「超えられるけど、何か?(キリッ」だもんなあw
426デフォルトの名無しさん
2011/06/19(日) 08:09:56.20 自信満々に言った「comはインストールの壁が越えられない(キリッ」
を否定されて悔しかったの?
を否定されて悔しかったの?
427デフォルトの名無しさん
2011/06/19(日) 08:19:38.57 GetObject
428デフォルトの名無しさん
2011/06/19(日) 08:29:07.02 USB股間に忍ばせて持ち歩く男の人って・・・///
きみの端子にプラグ★イン!
きみの端子にプラグ★イン!
429≠423
2011/06/19(日) 10:02:11.33430デフォルトの名無しさん
2011/06/19(日) 12:12:42.62 なんか勘違いしてる子が出てきたなw
あのね、comにインストールの壁なんて無いって話であって
USBメモリなんて、全く関係ない話なのよ
それと、『ある程度』レベルの会社だと、勝手にツール類をインストールする事ができないところが多いけど
『ある程度』を超えたまともな会社だと、勝手にツール類をインストールする事が出来るところも多い
セキュリティーが確立している上に、VBAやWSHなどの元から入ってる言語でいろいろ作れる奴が多いから
外部からのツールのインストールを制限しても、元から入ってる言語でツールが作れちゃうから意味無いw
逆にまともな会社だでツールのインストールを制限している場合は、WSHもVBAも制限してる
あのね、comにインストールの壁なんて無いって話であって
USBメモリなんて、全く関係ない話なのよ
それと、『ある程度』レベルの会社だと、勝手にツール類をインストールする事ができないところが多いけど
『ある程度』を超えたまともな会社だと、勝手にツール類をインストールする事が出来るところも多い
セキュリティーが確立している上に、VBAやWSHなどの元から入ってる言語でいろいろ作れる奴が多いから
外部からのツールのインストールを制限しても、元から入ってる言語でツールが作れちゃうから意味無いw
逆にまともな会社だでツールのインストールを制限している場合は、WSHもVBAも制限してる
431デフォルトの名無しさん
2011/06/19(日) 18:14:48.56 ≠423とか必死に否定すると、余計に・・・・・( ̄ー ̄)ニヤリッ
432デフォルトの名無しさん
2011/06/19(日) 21:27:41.80 「勝手に出来る」って方がおかしいだろ
今の時代どこもピリピリしてるってのに。
単におまえさん自身か会社がその客に信用されてるってだけじゃねーの?
でも普通は申請式だと思うけど。他人の会社で勝手にてのはどうかと思う。
今の時代どこもピリピリしてるってのに。
単におまえさん自身か会社がその客に信用されてるってだけじゃねーの?
でも普通は申請式だと思うけど。他人の会社で勝手にてのはどうかと思う。
433デフォルトの名無しさん
2011/06/20(月) 00:02:07.13 勝手にしてよいと許されていることを勝手にやる上で、何の咎があると?
なにか勘違いしてやいないか?
なにか勘違いしてやいないか?
434デフォルトの名無しさん
2011/06/20(月) 00:33:54.55 これは突っ込んであげたほうが良いのだろうか?
435デフォルトの名無しさん
2011/06/20(月) 00:59:30.37 生温かい目で見守ってあげるのが良いんじゃないかと
436デフォルトの名無しさん
2011/06/20(月) 10:20:41.11 batファイルは止められませんね
じゃぁバッチ最強じゃん
じゃぁバッチ最強じゃん
437デフォルトの名無しさん
2011/06/20(月) 17:46:53.34 <a href="http://upload.jpn.ph/500/bin/やきそば.zip">こちら</a>
という内容のテキストファイルからURLの部分を抽出して
変数に入れるっていう目的でvbs作ったんですが上手く変数に入りません
Dim objFile ' 対象ファイル
Dim oldText ' 置換前テキスト
Dim newText ' 置換後テキスト
Dim objFSO ' ファイルシステムオブジェクト
Dim objRep ' 正規表現オブジェクト
Dim repText ' 置換対象文字列
var1 = "解析.txt" '保存する名前
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(var1, 1, false, 0)
' テキストデータ読込
oldText = objFile.ReadAll
patrn="(http:\/\/[^\x22 ]+)" '検索する文字列を入力して下さい。
repText = "$2"
Set objRep = New RegExp
objRep.Multiline = True
' 正規表現パターンを指定する
objRep.Pattern = patrn
oldText = objRep.replace(oldText, repText)
WScript.Echo $2
objFile.Close
どうすればいいのでしょうか、もしわかるかた入れば教えてください。
自分では後方参照とかExecuteやマッチとかが関係ありそうで
調べて試したんですが思うようにいきませんでした。
という内容のテキストファイルからURLの部分を抽出して
変数に入れるっていう目的でvbs作ったんですが上手く変数に入りません
Dim objFile ' 対象ファイル
Dim oldText ' 置換前テキスト
Dim newText ' 置換後テキスト
Dim objFSO ' ファイルシステムオブジェクト
Dim objRep ' 正規表現オブジェクト
Dim repText ' 置換対象文字列
var1 = "解析.txt" '保存する名前
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(var1, 1, false, 0)
' テキストデータ読込
oldText = objFile.ReadAll
patrn="(http:\/\/[^\x22 ]+)" '検索する文字列を入力して下さい。
repText = "$2"
Set objRep = New RegExp
objRep.Multiline = True
' 正規表現パターンを指定する
objRep.Pattern = patrn
oldText = objRep.replace(oldText, repText)
WScript.Echo $2
objFile.Close
どうすればいいのでしょうか、もしわかるかた入れば教えてください。
自分では後方参照とかExecuteやマッチとかが関係ありそうで
調べて試したんですが思うようにいきませんでした。
438デフォルトの名無しさん
2011/06/21(火) 21:55:45.73 まずは基本を学べってレベル
439デフォルトの名無しさん
2011/06/23(木) 15:44:28.14 正規表現の構文がデタラメ。
パターンがデタラメだし後方参照の仕方もデタラメ。
ヘルプもろくに見てないだろ。
パターンがデタラメだし後方参照の仕方もデタラメ。
ヘルプもろくに見てないだろ。
440デフォルトの名無しさん
2011/06/23(木) 22:13:57.11441デフォルトの名無しさん
2011/06/23(木) 22:32:18.65 凄い違和感あったんだけど納得
442デフォルトの名無しさん
2011/06/23(木) 23:57:00.51443デフォルトの名無しさん
2011/06/24(金) 07:22:39.31 久しぶりに酷い自演をみた
444デフォルトの名無しさん
2011/06/24(金) 10:19:04.37 >repText = "$2"
この意味不明っぷりがすごいね
この意味不明っぷりがすごいね
445デフォルトの名無しさん
2011/06/24(金) 14:11:47.65 突っ込む所はそこじゃないと思うがw
Echoのとことか、パターン自体に突っ込めよ
Echoのとことか、パターン自体に突っ込めよ
446デフォルトの名無しさん
2011/06/24(金) 14:15:34.45447デフォルトの名無しさん
2011/06/24(金) 19:23:21.29448デフォルトの名無しさん
2011/06/25(土) 00:10:36.15 >>437も恥ずかしくて出れこれないんだから、いい加減に許してやれよ
449デフォルトの名無しさん
2011/06/25(土) 13:11:24.67 >>443
そんなに悔しかったの?
そんなに悔しかったの?
450天使 ◆KOAgYBL/Xg
2011/06/29(水) 17:41:46.87 さすが VBSなんていう時代遅れツール使ってるスレはレベルが低い
451天使 ◆uL5esZLBSE
2011/07/02(土) 08:25:05.28ゴミみたいな奴だな
452デフォルトの名無しさん
2011/08/28(日) 14:30:43.29 文字を文字コードの数値に変換して出力したいんだけど誰か助けて
453デフォルトの名無しさん
2011/08/28(日) 20:10:45.21 asc("a")
454デフォルトの名無しさん
2011/09/01(木) 09:14:32.07 何その顔文字、ふざけてるの
455デフォルトの名無しさん
2011/09/01(木) 10:09:24.83 ("з")
456デフォルトの名無しさん
2011/11/20(日) 14:29:12.95 (・∀・)
457デフォルトの名無しさん
2011/11/20(日) 15:33:06.16 VBScriptって、1ヶ月もあれば極められるよね
あとはCOMを何処まで使いこなせるかだけ
あとはCOMを何処まで使いこなせるかだけ
458デフォルトの名無しさん
2011/11/21(月) 17:49:41.03 そんな時期もありました
459デフォルトの名無しさん
2012/02/10(金) 21:02:00.29 例えば、notepad.exeを起動するvbsは?
460デフォルトの名無しさん
2012/02/10(金) 21:08:54.09461459
2012/02/10(金) 22:23:36.81 >460
分かりました。ありがとう
ところで、Option Explicitを書くとshellが宣言されてないと起こられますが
この場合、shellの型は何ですか?
あるいは、Option Explicitを書くべきじゃない?
分かりました。ありがとう
ところで、Option Explicitを書くとshellが宣言されてないと起こられますが
この場合、shellの型は何ですか?
あるいは、Option Explicitを書くべきじゃない?
462デフォルトの名無しさん
2012/02/10(金) 22:46:07.22 >>461
Object 型
VBScript では VB や VBA と違い、宣言で型を記述しないのであまり意識はしないが、
Object 型だけは代入時に Set を必要とするので認識は必要
あと、Option Explicit は書いた方がよい
Option Explicit
Dim shell
Set shell = CreateObject("WScript.Shell")
shell.Run "notepad"
Object 型
VBScript では VB や VBA と違い、宣言で型を記述しないのであまり意識はしないが、
Object 型だけは代入時に Set を必要とするので認識は必要
あと、Option Explicit は書いた方がよい
Option Explicit
Dim shell
Set shell = CreateObject("WScript.Shell")
shell.Run "notepad"
463459
2012/02/11(土) 07:35:54.95 >462
ありがとうございました
ありがとうございました
464デフォルトの名無しさん
2012/02/12(日) 01:57:20.27 Option Explicitはtypo無くしてくれるからな
昔のソース改修でstrPrinterとstrPrnterで1週間ぐらいハマった記憶
今なら真っ先に疑うけど当時はまだ慣れてなくて泣いたなぁ
昔のソース改修でstrPrinterとstrPrnterで1週間ぐらいハマった記憶
今なら真っ先に疑うけど当時はまだ慣れてなくて泣いたなぁ
465デフォルトの名無しさん
2012/03/10(土) 23:34:01.81 >>462
CreateObject()の戻り値がObject型ってだけで変数に型は無いよ
Object型を変数に代入するのに、Setが必要なだけ
その証拠に、
Set shell = CreateObject("WScript.Shell")
shell = 1 '変数に型は無いので、この代入は有効
shell.Run "notepad" '変数には数値型のデータが入っているので、ここでエラーが発生
細かい事だけど、知っているのと知らないのでは大違い
>>464
typoを無くす為にOption Explicitを宣言してはいけない
Option Explicitの宣言は、ローカル変数とグローバル変数の区別を明確にするために宣言すべき
CreateObject()の戻り値がObject型ってだけで変数に型は無いよ
Object型を変数に代入するのに、Setが必要なだけ
その証拠に、
Set shell = CreateObject("WScript.Shell")
shell = 1 '変数に型は無いので、この代入は有効
shell.Run "notepad" '変数には数値型のデータが入っているので、ここでエラーが発生
細かい事だけど、知っているのと知らないのでは大違い
>>464
typoを無くす為にOption Explicitを宣言してはいけない
Option Explicitの宣言は、ローカル変数とグローバル変数の区別を明確にするために宣言すべき
466デフォルトの名無しさん
2012/03/11(日) 04:51:38.09 > 変数に型は無いよ
ちょっとハズレ
正しくはVBSの変数の型は、無いのではなくValiant型のみというだけ
で、Valiant型は内部型が固定されていないのでどんな型の値をも代入することが可能だが
値が代入されている状態では、内部に歴とした型という概念が存在する
細かい事だけど、内部文字列型と内部数値型では、外がValiant型でも扱いが異なるので、
知っているのと知らないのでは大違い
> Option Explicitの宣言は、ローカル変数とグローバル変数の区別を明確にするために宣言すべき
それ、VBやVBAの場合ね
それらの場合はグローバル変数(全モジュール共通変数)とモジュール内変数の区別に役立つ
でもVBSの変数スコープには、グローバル変数、プロシージャ内変数、クラス内変数の3つがあるが
Option Explicitはこれらの区別を明確にする役目は果たさない
ちょっとハズレ
正しくはVBSの変数の型は、無いのではなくValiant型のみというだけ
で、Valiant型は内部型が固定されていないのでどんな型の値をも代入することが可能だが
値が代入されている状態では、内部に歴とした型という概念が存在する
細かい事だけど、内部文字列型と内部数値型では、外がValiant型でも扱いが異なるので、
知っているのと知らないのでは大違い
> Option Explicitの宣言は、ローカル変数とグローバル変数の区別を明確にするために宣言すべき
それ、VBやVBAの場合ね
それらの場合はグローバル変数(全モジュール共通変数)とモジュール内変数の区別に役立つ
でもVBSの変数スコープには、グローバル変数、プロシージャ内変数、クラス内変数の3つがあるが
Option Explicitはこれらの区別を明確にする役目は果たさない
467デフォルトの名無しさん
2012/03/11(日) 09:35:32.83 >>466
だから、違うって
全ての変数は型が無いことを保障されてるの、これをValiant型と言います
そして、型を持っているのは、データ側であって変数ではありません
変数に型がある場合は、オブジェクト型の変数に整数を代入する事は絶対に出来ません
次に、Option Explicitは、全てのスコープにDim文を強制します
VBScriptの仕様では、Dimで宣言された変数は該当スコープでのローカル変数として確実に扱われるが、Dimで宣言されない変数は、同名のグローバル変数がある場合、グローバル変数として扱われます
ようは、使うべきでないグローバル変数を誤って使う事をしない為に使われるのであって、typo問題の為に使われているのではない
考えるまでもなく、typoによって引き起こされる問題よりも、グローバル変数への不用意なアクセスによる影響の方がはるかに大きく深刻です
だから、違うって
全ての変数は型が無いことを保障されてるの、これをValiant型と言います
そして、型を持っているのは、データ側であって変数ではありません
変数に型がある場合は、オブジェクト型の変数に整数を代入する事は絶対に出来ません
次に、Option Explicitは、全てのスコープにDim文を強制します
VBScriptの仕様では、Dimで宣言された変数は該当スコープでのローカル変数として確実に扱われるが、Dimで宣言されない変数は、同名のグローバル変数がある場合、グローバル変数として扱われます
ようは、使うべきでないグローバル変数を誤って使う事をしない為に使われるのであって、typo問題の為に使われているのではない
考えるまでもなく、typoによって引き起こされる問題よりも、グローバル変数への不用意なアクセスによる影響の方がはるかに大きく深刻です
468デフォルトの名無しさん
2012/03/11(日) 10:11:16.22 バリアントの綴りが間違ってた...
ValiantではなくVariantでした。
ValiantではなくVariantでした。
469デフォルトの名無しさん
2012/03/11(日) 10:54:20.03 なんだ、この子全然解ってないんだね
470デフォルトの名無しさん
2012/03/11(日) 11:14:12.71471デフォルトの名無しさん
2012/03/11(日) 13:25:47.06 痛すぎw
472デフォルトの名無しさん
2012/03/11(日) 13:38:11.81473デフォルトの名無しさん
2012/03/11(日) 18:41:00.25 >>467
横レスだけど
ローカルとグローバルでの変数名は、設計レベルで対応すべき話では?
実際の製造(プログラミング)時はtypo対策の方が重要では
そもそも、グローバルとプロシージャレベルで同名変数使うって
どれだけ可読性の低いプログラムを書くつもりかと。
普通コーディングルールで禁止されていると思うし、自分なら禁止する
個人レベルならともかく企業でもVB系言語を使う以上、Option Explicitは
BASICを、普通の(変数宣言を強制する)プログラミング言語と
同レベルに引き上げるものだと思ってるけど
とMSX-BASIC1から入って業務でVBは2(Win版。流石にDOS版は触って無い)から
使っている年寄りとしては思う
横レスだけど
ローカルとグローバルでの変数名は、設計レベルで対応すべき話では?
実際の製造(プログラミング)時はtypo対策の方が重要では
そもそも、グローバルとプロシージャレベルで同名変数使うって
どれだけ可読性の低いプログラムを書くつもりかと。
普通コーディングルールで禁止されていると思うし、自分なら禁止する
個人レベルならともかく企業でもVB系言語を使う以上、Option Explicitは
BASICを、普通の(変数宣言を強制する)プログラミング言語と
同レベルに引き上げるものだと思ってるけど
とMSX-BASIC1から入って業務でVBは2(Win版。流石にDOS版は触って無い)から
使っている年寄りとしては思う
474デフォルトの名無しさん
2012/03/11(日) 18:57:57.83 QB「
475デフォルトの名無しさん
2012/03/11(日) 19:15:38.79476デフォルトの名無しさん
2012/03/11(日) 20:27:28.25 Dimで解決するだろ
477デフォルトの名無しさん
2012/03/11(日) 21:49:45.91 >>476
だからソースの始めに、Option Explicitが必要なんじゃんw
だからソースの始めに、Option Explicitが必要なんじゃんw
478デフォルトの名無しさん
2012/03/11(日) 22:27:49.57479デフォルトの名無しさん
2012/03/11(日) 23:22:53.96 >>478
お前、馬鹿だろw
Option Explicitが書いてあれば、ローカルでDim宣言されている証明になるが
Option Explicitが書いてあっても、typoしていない証明にはならない
お前、馬鹿だろw
Option Explicitが書いてあれば、ローカルでDim宣言されている証明になるが
Option Explicitが書いてあっても、typoしていない証明にはならない
480デフォルトの名無しさん
2012/03/12(月) 06:39:57.23 なんか、自分自身が勘違いしていて痛い奴だってことに気付いてない
蘊蓄野郎が一人でずっと頑張ってるなぁ
蘊蓄野郎が一人でずっと頑張ってるなぁ
481デフォルトの名無しさん
2012/03/12(月) 09:02:44.77 Option Explicitでtypo対策する奴の方がよっぽど痛いけどね
482デフォルトの名無しさん
2012/03/12(月) 19:53:12.43 普通に考えて、変数名をコピペしてたらtypoなんて起きないだろ...
つーかtypoが問題になるって何十年前の開発環境だよ...
つーかtypoが問題になるって何十年前の開発環境だよ...
483デフォルトの名無しさん
2012/03/12(月) 20:26:55.78 入力補完じゃなくてコピペって・・・・・
それこそ何十年前だよって話だなw
程度が知れてきたぜ
それこそ何十年前だよって話だなw
程度が知れてきたぜ
484デフォルトの名無しさん
2012/03/12(月) 20:44:07.58 うはっ、入力補完機能のあるエディタ使ってて、変数名のtypoがプログラム制作上の重要課題ってw
あれだな、うちのメモ帳の方が、あんたの開発環境よりも上って事だなw
この10数年の間、変数名のtypoなんて起きた事ねぇもんw
あれだな、うちのメモ帳の方が、あんたの開発環境よりも上って事だなw
この10数年の間、変数名のtypoなんて起きた事ねぇもんw
485デフォルトの名無しさん
2012/03/12(月) 20:56:31.62 この子、相手が一人だと思ってるのかな?
俺は変数名のtypoがプログラム制作上の重要課題なんて一言も言ってないんだが
必死になりすぎて周りの現実が見えてないんだね
大勢に嘲笑されているという現実が・・・・・
俺は変数名のtypoがプログラム制作上の重要課題なんて一言も言ってないんだが
必死になりすぎて周りの現実が見えてないんだね
大勢に嘲笑されているという現実が・・・・・
486デフォルトの名無しさん
2012/03/12(月) 21:10:17.75 うはっw
とうとう、「俺はtypoなんて言ってねぇ」とか言い出しちゃいましたよ
このお方w
とうとう、「俺はtypoなんて言ってねぇ」とか言い出しちゃいましたよ
このお方w
487デフォルトの名無しさん
2012/03/12(月) 21:13:40.15 入れ食い
488デフォルトの名無しさん
2012/03/12(月) 21:20:02.41 そもそもプロシージャとグローバルで名前重複なんて、可読性が低くて
絶対保守したくない類のソース。機械が読めても人が読みにくい。
Option Explicit以前にその時点で根本的に間違っていると思う。
それ以前に最近は「グローバル変数自体原則禁止、明示的に引数で渡すべき」
とか言われる事も多くて、高度情報処理試験の午前問題にもあったり。
ま、あくまで「原則」なんでグローバル変数を使わざるを得ない場合もあるが
独立性が低下するので再利用性が低下するのは避けられない。
つまりはスコープの違いをOption Explicitでどうこうして再利用性を上げようとする
のは方針自体が間違っている。
引数のオーバーヘッドに関しても昔はともかく今はPCの性能が十分高いので
高速策よりも安全策というか保守性を取る方が多いし。
VBSの場合は短い事もあり汎用的に使うfsoとかはグローバルな事も多いけど。
絶対保守したくない類のソース。機械が読めても人が読みにくい。
Option Explicit以前にその時点で根本的に間違っていると思う。
それ以前に最近は「グローバル変数自体原則禁止、明示的に引数で渡すべき」
とか言われる事も多くて、高度情報処理試験の午前問題にもあったり。
ま、あくまで「原則」なんでグローバル変数を使わざるを得ない場合もあるが
独立性が低下するので再利用性が低下するのは避けられない。
つまりはスコープの違いをOption Explicitでどうこうして再利用性を上げようとする
のは方針自体が間違っている。
引数のオーバーヘッドに関しても昔はともかく今はPCの性能が十分高いので
高速策よりも安全策というか保守性を取る方が多いし。
VBSの場合は短い事もあり汎用的に使うfsoとかはグローバルな事も多いけど。
489デフォルトの名無しさん
2012/03/12(月) 22:18:26.28 >>488
馬鹿か
なんの為のスコープ分けだ
もう一度、構造化プログラムについて習いなおせ
互いのスコープが引数と戻り値のみでのみデータの受け渡しをする限り、互いの内部の処理は気にする必要は無いの
そして、VBScriptの場合は、グローバルスコープへ直接コーディングをする可能性があるから、Option Explicitによるコードの再利用性の保障が必要なんだっつうの
馬鹿か
なんの為のスコープ分けだ
もう一度、構造化プログラムについて習いなおせ
互いのスコープが引数と戻り値のみでのみデータの受け渡しをする限り、互いの内部の処理は気にする必要は無いの
そして、VBScriptの場合は、グローバルスコープへ直接コーディングをする可能性があるから、Option Explicitによるコードの再利用性の保障が必要なんだっつうの
490デフォルトの名無しさん
2012/03/12(月) 22:31:33.94 Option Explicit「みんな!私のために争わないで!」
491デフォルトの名無しさん
2012/03/13(火) 06:14:50.44 >>489
らちが明かないから何かサンプル上げて説明してみて
らちが明かないから何かサンプル上げて説明してみて
492デフォルトの名無しさん
2012/03/13(火) 09:37:52.97 >>491
まず共通部分
<job id="main">
<script language="VBScript" src="test.vbs" />
<script language="VBScript">
fso = "Hello"
MsgBox Test() & vbCrlf & fso
</script>
</job>
まず共通部分
<job id="main">
<script language="VBScript" src="test.vbs" />
<script language="VBScript">
fso = "Hello"
MsgBox Test() & vbCrlf & fso
</script>
</job>
493デフォルトの名無しさん
2012/03/13(火) 09:39:40.86 次に、test.vbs部分Option Explicit無しバージョン
Function Test()
Set fso = CreateObject("Scripting.FileSystemObject")
Set File = fso.OpenTextFile("test.vbs")
Test = File.ReadAll
Set fso = Nothing
End Function
Function Test()
Set fso = CreateObject("Scripting.FileSystemObject")
Set File = fso.OpenTextFile("test.vbs")
Test = File.ReadAll
Set fso = Nothing
End Function
494デフォルトの名無しさん
2012/03/13(火) 09:43:32.86 こいつも、test.vbsでOption Explicit有りバージョン
Option Explicit
Function Test()
Dim fso, File
Set fso = CreateObject("Scripting.FileSystemObject")
Set File = fso.OpenTextFile("test.vbs")
Test = File.ReadAll
Set fso = Nothing
End Function
Option Explicit
Function Test()
Dim fso, File
Set fso = CreateObject("Scripting.FileSystemObject")
Set File = fso.OpenTextFile("test.vbs")
Test = File.ReadAll
Set fso = Nothing
End Function
495デフォルトの名無しさん
2012/03/13(火) 21:41:15.30 散々蘊蓄垂れてこのレベルか
496デフォルトの名無しさん
2012/03/13(火) 21:50:38.27 Option Explicit 云々以前の問題だな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 日本損失1.7兆円に修正 中国渡航自粛の影響試算 [蚤の市★]
- NY円、一時1ユーロ=180円台まで下落…1999年のユーロ導入以来初 [蚤の市★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【実況】博衣こよりのえちえち朝こよ🧪 ★2
- 【実況】博衣こよりのえちえち朝こよ🧪
- カカロット、腰痛い
- 結局松本人志ノーダメージじゃん
- 【!?】高市早苗「靖国神社電撃参拝プラン」浮上!これもう戦争だろ… [481941988]
- 今朝も阿佐ヶ谷に住みたくて咽び泣いてる😭
