WSH(・∀・)スレッド! Part 3 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
08/04/23 20:00:50
( ´ゝ`) 誰か詳しい情報キボンヌ

●過去スレ
WSH(・∀・)スレッド!
スレリンク(tech板)
WSH(・∀・)スレッド! Part 2
スレリンク(tech板)

●関連スレ
お前ら、wsh使ってますか? Part7
スレリンク(win板)
HTAをもっと流行らせる計画
スレリンク(tech板)
★WSHでCGI★JScriptVBScript
スレリンク(php板)

●公式サイト
Windows Script
URLリンク(www.microsoft.com)

●個人サイト
Windows Scripting Host
URLリンク(homepage3.nifty.com)
Windows Scripting Host Laboratory
URLリンク(www.roy.hi-ho.ne.jp)
Windows Script Wiki
URLリンク(winscript.s41.xrea.com)

2:デフォルトの名無しさん
08/04/23 20:22:22


3:デフォルトの名無しさん
08/04/24 00:59:30
    ∧_∧
    (*´Д`)  イヤン
     / ,ノ⌒ヾ、
   ⊂⊂、___(_,つ

4:デフォルトの名無しさん
08/04/24 01:02:51
1乙

5:デフォルトの名無しさん
08/04/25 00:42:57
>>1

まさか3までくるとはage

6:デフォルトの名無しさん
08/04/25 02:03:49
    ∧_∧
    (* ゚Д゚ )  ナニミテンダゴルァ
     / ,ノ⌒ヾ、
   ⊂⊂、___(_,つ

7:デフォルトの名無しさん
08/04/25 20:52:12
前スレ830からWSH 5.7

上から2000, XP, 2003英語版
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)


8:デフォルトの名無しさん
08/05/02 07:24:54
システム日付の変更方法教えれ

9:デフォルトの名無しさん
08/05/02 19:21:15
WScript.Echo " 誰かシステム日付を変更しといてね。 はぁと "

10:デフォルトの名無しさん
08/05/03 08:47:24
初めまして、マリコといいます。
wshからシステム日付の変更する方法を教えてください。

11:デフォルトの名無しさん
08/05/03 09:43:26
ちゃんと金払ってソフト買えよ

12:デフォルトの名無しさん
08/05/03 10:39:00
>>8
>>10

教えて厨乙

13:デフォルトの名無しさん
08/05/03 11:34:00
だめだとわかってるんだけどね
体のつながりが欲しいの

コトバだけぢゃなりない

メールだけぢゃ不安なの

奥様からみたらイヤな女だね

誘惑したわけぢゃないよ

不満のはけ口でもいいから

私を求めて


14:デフォルトの名無しさん
08/05/04 18:34:47
英語版5.7入れると改善点以外はどうなるの?
エラーメッセージが英語になったりするの?

15:デフォルトの名無しさん
08/05/04 19:53:04
>>14
エラーメッセージは日本語のまま。
しかし、vbsファイル等を右クリックしたときのメニューが一部英語になる。

Open
Edit
Open with Command Prompt

など。
他の違いは知らん。

16:デフォルトの名無しさん
08/05/08 02:22:19
.jsソースの文字コードをUTF-8で保存して実行するとソースの中の日本語のところで
エラー 終了していない文字列型の定数です。
とエラーが出るが、ソースをUTF-8のまま実行できないの?

17:デフォルトの名無しさん
08/05/08 19:51:27
>>15
ありがとう
SP3統合ディスクつくってOSクリンインスコするまえに試してみるよ!

18:デフォルトの名無しさん
08/05/09 07:06:23
wsh 5.6 ってどのバージョンのwindowsに標準インストールされてますか?


19:デフォルトの名無しさん
08/05/09 11:12:06
>18
XP

20:デフォルトの名無しさん
08/05/12 18:18:06
WSHをメモ帳あたりに記述して .vbs の拡張子で保存して実行すると構文ミスをしてれば
エラーが表示されるじゃないですか?そのエラー内容に「コンパイル失敗」と言う文字列も見れます。
一般的なC言語やJavaみたいな、コンパイルだけして実行をしない と言う事は出来ないのでしょうか?
コンパイルが通るかどうかだけ試したいのですが、もし仮に通ったら実行してしまうのがちょっと・・・。
構文ミスをしてないかどうかだけ調べたいです。ご教示よろしくお願いします。

21:デフォルトの名無しさん
08/05/12 18:51:09
初っ端でWScript.Exit

22:デフォルトの名無しさん
08/05/12 19:23:52
Option Explicit
WScript.Quit(Exitでしたっけ?Quitだったような)
Dim i, j
objWsh = WScript.CreateOb・・・
'以下処理コード

みたいな感じに100行ほど書いたとして、その場合最後の行まで構文チェックしてくれるのでしょうか?
だとしたらそれで私がやりたいことが実現できます。

23:デフォルトの名無しさん
08/05/12 19:31:55
Set wshObj = WScript.CreateObject("WScript.Shell")
wshObj.regWrite "

の、RegWriteメソッドについて質問があります。
と言うか、RegRead, RegDeleteにも、さらにはreg.exeにも関係する事かもしれません。
レジストリエディタを開いて左側のフォルダのアイコンのキー名、っていうんですかね・・
例えば
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
で、あり得ない事ではありますが、 CurrentVersionと言うキーの名前を ;CurrentVersion と
変更してキーを削除せずにセミコロンで無効化(削除したのと同じ挙動になるけど、データ自体は
レジストリに残してある感じ)したいとして、レジストリエディタなら簡単に名前の変更で出来ますが
WSHからはどのように記述すれば良いのでしょうか?
更新になるので、RegWriteメソッドを使うと思うのですが、どう書いたらいいのか分かりません。
RegWrite "キー名", 更新後の値, ["REG_DWORD"等のデータタイプ(種類)]
と言う外部仕様は分かるのですが、
この仕様だとキー名の変更は出来ませんよねぇ?あくまでもRegWriteは値を更新するのであって
値を格納しているキー名は無理ですかね?何か良い手はありませんか?

24:デフォルトの名無しさん
08/05/12 21:57:08
WMI使えば?

25:デフォルトの名無しさん
08/05/15 19:04:32
>>16
UTF-16ならおk

wsfならUTF-8でもおk

26:デフォルトの名無しさん
08/05/15 19:30:10
>>25
サンクス!

27:デフォルトの名無しさん
08/05/17 10:31:59
あるファイルAの一部を書き換えるには
テンポラリのファイル作らないと駄目ですかね?
FSOにseekみたいな命令無いですよね。


28:デフォルトの名無しさん
08/05/17 12:40:55
cscript で hoge.js 実行するとすぐ閉じてしまって、
デバッグのための表示を出していても見えなくて
困るんですが、スクリプトの終了時に(cscript.exe を
終了する前に)なんかフックをかましてとめることってできませんか?

cmd /k から実行すればいいのかもしれませんが、
できればスクリプトの中から制御できればいいのですが。

29:デフォルトの名無しさん
08/05/17 13:52:47
>>27
fso.open(,forwriting).write replace(fso.open(,forreading).readall(),"aaa","bbb")

>>28
new ActiveXObject("scripting.filesystemobject").GetStandardStream(0).ReadLine();

30:デフォルトの名無しさん
08/05/17 14:24:12
openなんてメソッド無いだろ

31:デフォルトの名無しさん
08/05/17 14:35:36
なんかあるだろ

32:デフォルトの名無しさん
08/05/17 15:46:57
URLリンク(msdn.microsoft.com)
ここに書かれているオブジェクト (WScript とか)は
WSH が標準で最初から提供しているんだよね?
Scripting.FileSystemObject のようなものの
Scripting っていうオブジェクト(クラス名?)は
誰が供給しているの?

33:デフォルトの名無しさん
08/05/17 15:50:41
WScript.CreateObject に与える引数って,
COM コンポーネントの名前を指しているんですよね?
CLSID とかで指定することもできるのでしょうか?

34:デフォルトの名無しさん
08/05/17 15:54:43
The CreateObject method returns a pointer
to the object's IDispatch interface.

なんだ,COM コンポーネントの ProgID 与えたら
インターフェイスへのポインタが返ってくるだけなのか.
すっきりした.

35:デフォルトの名無しさん
08/05/17 15:59:38
>>8
createobject("shell.application").settime

36:デフォルトの名無しさん
08/05/17 16:01:18
>>33
getobject("new:{CLSID}")

37:デフォルトの名無しさん
08/05/17 16:20:10
Javascript には「コレクション」というデータ型は
無いようなんだけど,これは JScript 独自の考え方?

配列やコレクションを「IEnumerable インターフェイスを
実装するオブジェクト」と定義しているのも JScript 独自の考え方?

38:デフォルトの名無しさん
08/05/17 16:21:52
はぁ?

39:デフォルトの名無しさん
08/05/18 01:46:05
>>28
new ActiveXObject('wscript.shell').PopUp('pause');

40:28
08/05/18 06:45:44
>>29 >>39
ありがとう。結局今のところ cscript //D を使うバッチ
ファイル経由で起動してます。教えていただいた方法も
後々試してみたいと思います。

んが、今気づいたんですが、結局デバッグできればいいので
wsf ファイルにして <?job debug="true"?> を使うというのも
いいかなと思っています。

ところでせっかく wsf ファイルで書くジョブのコメントなどを
設定したとしても、特に活用法ほうってないですよねぇ。
wsf ファイルを右クリックしたらジョブ一覧がコンテキストメニューに
かっこよく出てきたり・・・・しないよなぁ。

ところで wsh から ADODB の RecordSet を使ってかなりのデータ
処理ができる気がしてきました。しかし ADODB の中でいろいろと
定義されている定数群を識別子じゃなくてじかに書かなきゃならん
のが面倒っぽい。これも wsf の reference タグで解決?

41:デフォルトの名無しさん
08/05/19 22:39:55
正規表現を使った置換で

hogera=12345
purururu=00000
ranran=99999

これを

hogera=11111
purururu=11111
ranran=11111

こうしたい。
=の左側は英文字。右側は5桁の数字。
どうやったらいいですか?
JScriptです。

42:デフォルトの名無しさん
08/05/19 23:48:44
単に、5桁の数字を "11111" の置換するだけなら、

"hogera=12345".replace(/(\d{5})/, "11111")

でいい。でも、12345=12345 が 11111=12345 になるのが嫌なら

"purururu=00000".replace(/^([A-Za-z]+)=(\d{5})$/, "$1=11111")

とかにすればいい。

43:デフォルトの名無しさん
08/05/19 23:56:09
var s1 = "hogera=12345\npurururu=00000\nranran=99999\n";
WScript.Echo(s1);

var s2 = s1.replace(/^([A-Za-z]+)=(\d{5})$/, "$1=11111");
WScript.Echo(s2);

変わらない。何で?

44:デフォルトの名無しさん
08/05/20 01:28:42
mオプションつけれ

45:デフォルトの名無しさん
08/05/20 05:40:41
var s1 = "hogera=12345\npurururu=00000\nranran=99999\n";
WScript.Echo(s1);

var s2 = s1.replace(/^([A-Za-z]+)=(\d{5})$/gm, "$1=11111");
WScript.Echo(s2);

出来たぁ!ありがと!

46:デフォルトの名無しさん
08/05/23 10:16:36
JScript の中から、今の環境でどんなオブジェクトが使えるかを
知る方法はありますか?たとえば o がオブジェクトだとすると、
for (i in o) print (i); でそのオブジェクトのプロパティ一覧が
得られますが、そもそもどんなオブジェクトがあるのかなと。

WScript オブジェクトとかその環境独自のオブジェクトが
最初から用意されていると思うのですが、それをスクリプト内から
知る方法はあるのでしょうか?

47:46
08/05/23 10:21:56
列挙できると書きましたが、もちろん DontEnum 属性が
設定されていたらだめですね。無視して列挙させるという
ようなメタレベルでの操作もできないようですし。

48:デフォルトの名無しさん
08/05/23 12:47:52
jscriptには定数はないのでしょうか?
Microsoftのページには定数は const みたいに書いてあるのですが、
構文エラーと言われます。

49:デフォルトの名無しさん
08/05/23 18:59:09
123
'abc'

50:デフォルトの名無しさん
08/05/24 07:09:08
>>49
すみません、定数の定義の話です。
つか var つけないと定数になるのかと思ったら、WSH?(Windows Script)のvarはもともといらないのね。
constもつかえないっぽい

51:デフォルトの名無しさん
08/05/24 12:30:20
昔ながらの全部大文字とか勝手にして「これは定数。」って脳内補完しとけばよし。

52:デフォルトの名無しさん
08/05/24 13:04:39
>>48
> Microsoftのページには定数は const みたいに書いてあるのですが、
> 構文エラーと言われます。

それJScript.NETの説明。

>>50
> WSH?(Windows Script)のvarはもともといらないのね。

varなしで変数を宣言すると、グローバル変数になっちゃうぞ。

53:デフォルトの名無しさん
08/05/24 18:26:40
>>52
うへー、ぜんぜん違うのね。
ありがとう。

この辺のことはどこに書いてあるんだろう

54:デフォルトの名無しさん
08/05/24 21:24:09
>>1 の公式

55:名無しさん@Linuxザウルス
08/05/26 13:31:35
makewin.exeでexe化しておいたvbsが
savceの5/26定義パターンから木馬として片端から検疫されてた..

なんでmakewin&exe化したのが木馬扱いされてんねん
あああダメージでかいわ..orz

56:デフォルトの名無しさん
08/05/26 22:22:49
CreateObject("WScript.Shell").SendKeys "moji"

mojiと書きたいのですが。
その前にIMEを切りたいのですが、できますか?

57:デフォルトの名無しさん
08/05/27 01:50:36
はい

58:デフォルトの名無しさん
08/05/27 01:59:53
{kanji}

59:デフォルトの名無しさん
08/05/27 23:50:09
VBScriptの記述で質問です、引数(フォルダのドラッグを想定)で与えられたフォルダの中身を、
コマンドラインで順に処理したいのですが(実行処理を確認したいため)直ぐにターミナルが閉じてしまいます。
今回初めて、VBScriptを作成したのですが、どこがおかしいのか分からない状況です。
おかしい点を教えていただけないでしょうか。

#実行処理が確認できるのであれば、コマンドラインで処理する必要はないのですが、どの様な
#方法があるのか調べることができませんでした。もし他によい方法があれば教えてください。

Set fso = CreateObject("Scripting.FileSystemObject")
Set args = WScript.Arguments
Set WSHShell=Wscript.CreateObject("Wscript.Shell")

'引数チェック
if args.Count <> 1 Then
WScript.Echo "Usage: test.vbs (target folder path)"
WScript.Quit()
End If


'コマンドラインで実行
If LCase(fso.GetFileName(WScript.FullName)) = "wscript.exe" Then
WshShell.Run "cscript """ & WScript.ScriptFullName & """" & args(0) & """",1,False
WScript.Quit
End If

Set folder = fso.GetFolder(args(0))

'フォルダを内のファイル一覧を取得
For Each file In folder.Files
WScript.Echo file.Name
Next


60:59
08/05/27 23:59:39
最終的な目標ですが、フォルダ内にあるファイル全てを順に、あるアプリケーションに
引数として渡して処理を自動化したいと考えてます。よろしくお願いします。

61:デフォルトの名無しさん
08/05/28 00:08:17
WshShell.Run "cmd /k cscript """ & WScript.ScriptFullName & """ " & args(0) & """",1,False

62:60
08/05/28 00:17:04
>61
レスありがとうございます。上手く動作することができました。
本当に助かりました!

63:デフォルトの名無しさん
08/06/01 15:29:48
>>48
typelibrary作って<reference>で参照すれば?

64:デフォルトの名無しさん
08/06/01 20:28:57
WSHを使って、タスクトレイで動いてるアプリとメッセージのやり取りってできますか?

65:デフォルトの名無しさん
08/06/01 20:37:43
出来ますよ
そういうCOMを探すか作るかすれば

66:デフォルトの名無しさん
08/06/02 13:24:17
WSHってメッセージキュー扱えないのか

67:デフォルトの名無しさん
08/06/02 14:13:29
MSMQ使えるだろ

68:デフォルトの名無しさん
08/06/02 22:15:19
NGワード
そういうCOM

69:デフォルトの名無しさん
08/06/02 22:31:06
UWSC使えば?

70:デフォルトの名無しさん
08/06/03 08:35:11
Office2007+Vistaなんですが、MSEもしくは、それ相当のものってないんですか?見あたりません

71:デフォルトの名無しさん
08/06/03 09:06:44
>>68
WSHはいわばCOMを使う土台なわけで
COMを使うことを否定したら何にも出来ないぞ

COMを使うこと自体は否定しないが、COMのDL先書いて
そのCOMを使ったコードまで書いてくれなきゃヤダってなら
自分でブログラムを書く人が集まる場であるこの板に来るのが間違い

72:デフォルトの名無しさん
08/06/03 12:55:18
>>71がこの板に来るのが間違い


73:デフォルトの名無しさん
08/06/03 19:07:02
>>71
中身がないレスは読む価値もないってだけの話

74:デフォルトの名無しさん
08/06/03 21:12:29
悔しかったの?

75:デフォルトの名無しさん
08/06/03 22:58:18
>>71は例の基地外なのか

76:デフォルトの名無しさん
08/06/04 01:16:04
>>71
中身がないレスしかできないってだけの話


77:デフォルトの名無しさん
08/06/04 03:22:31
COMでWordファイルに書き出したりするプログラム書いてみたのですが
ログインユーザがAdministrator権限あるときはちゃんと動くのですが
ないときは例外が出るみたいです
Administrator権限がないとCOMでOfficeの*.Applicationにはアクセス出来ないのでしょうか?


78:デフォルトの名無しさん
08/06/04 07:58:27
>>77
セキュリティオプションの「Visual Basic プロジェクトへのアクセスを信頼する」あたりをチェックすればいけるんじゃないの?
確認してないけど

79:デフォルトの名無しさん
08/06/05 02:12:27
やってみます
ありがとうございました


80:デフォルトの名無しさん
08/06/05 03:21:41
>>77
URLリンク(support.microsoft.com)


81:デフォルトの名無しさん
08/06/05 06:28:49
>>80
>>77 じゃないけど自分も同じような現象で過去あきらめた.
で,リンク先読んでみたいんだけど,いまいちわからなかた.

リンク先で言及されているのは,サーバ内でWordのファイルを
自動生成するというような話だよね.>>77 は普通の
クライアント環境で対話的に使っているのだと思うんだけど.

82:デフォルトの名無しさん
08/06/05 06:56:29
>>80
何度読んでも眠たくなる文章だ


83:デフォルトの名無しさん
08/06/11 06:53:26
wshでSQLServer2000と2005のテーブルの内容を取得するのはどうやるんですか?
なるべく高速な方法が良いです。
更新はしないのでSELECTが出来ればいいです。

84:デフォルトの名無しさん
08/06/11 08:19:08
>>83
ADOを使う
ADODB.Connection とかのキーワードでぐぐってみれ

85:デフォルトの名無しさん
08/06/11 23:10:26
vbsで、
TEST_PATHに"C:\TEST\*.txt"を入れて以下のように
動かしたら"C:\TEST\*.txtt"ファイルのようなものまで
消えてしまいました。
ワイルドカードを使用して、拡張子txtのみを削除する
方法は無いのでしょうか?

objFSO.DeleteFile TEST_PATH

86:デフォルトの名無しさん
08/06/11 23:29:46
>>84
Thanks!

87:デフォルトの名無しさん
08/06/12 00:27:05
>>85
たぶんないと思う。

自分でファイルのリストを取得してから通常の文字列マッチング
で絞り込むくらいしか思い浮かばない。


88:デフォルトの名無しさん
08/06/12 01:00:09
>>85
ひどい仕様だな

89:デフォルトの名無しさん
08/06/12 03:25:01
NTFSならレジストリで8.3ファイル名の記録をオフにすれば
そういう挙動が起きなくなるとどこかで見た気がする。

90:デフォルトの名無しさん
08/06/12 05:03:36
Dim arr()
msgbox Ubound(arr) 'error
ReDim arr(9)

Redimをする前に、arrに値が入っているか
どうかを調べる方法はないでしょうか?

Redimをする前に、Ubound()で調べようとすると
エラー「インデックスが有効範囲にありません」
となります。


91:デフォルトの名無しさん
08/06/12 13:39:45
if err.description="インデックスが有効範囲にありません" then

92:90
08/06/12 18:41:03
>>91を参考にして下記でできました。ありがとうございます。

on error Resume Next
WScript.Arguments.Item(0)
if Err.Number <> 0 then msgbox "引数無し"
Err.clear
on error goto 0

93:デフォルトの名無しさん
08/06/12 22:36:39
if WScript.Arguments.Count = 0 then msgbox "引数無し"

94:90
08/06/13 01:51:11
>>93 私なりにやったのですが、そのようなコードを書けなかった
です。ありがとうございます。

95:デフォルトの名無しさん
08/06/17 22:24:32
VBScriptを使って、HTTPステータスコードを取得する方法を探しています。
ある任意のWeb画面に対してスクリプトでリクエストを行い、HTTPステータスコード(200 ok 等)を
取得する方法はありますでしょうか。
どなたかご存知の方がいらっしゃいましたら、ご教授下さい。

96:デフォルトの名無しさん
08/06/17 22:46:00
>>95
まかせろ!
検索してやった!

URLリンク(oshiete1.watch.impress.co.jp)

97:>>95
08/06/17 22:52:20
>>96
検索ありがとうございます。

確認してみたんですが、この先に紹介してあるサイトはVB?でしょうか。
どうもVBScriptに応用する方法が分かりません。



98:デフォルトの名無しさん
08/06/17 23:09:41
>>97
・・・まーいーや。

Microsoft.XMLHTTP とかの status プロパティ使えばできるでしょ。

99:>>95
08/06/18 06:54:28
>>98
有難う御座いました。
勉強不足の為、すぐに理解できませんでしたが
きちんと出来ました。
助かりました。m(_ _)m

100:デフォルトの名無しさん
08/06/26 18:15:00
処理1
msgbox "AAAA"
処理2


上記を実行し、ウィンドウンがでてきて、
OKボタンを押すと、処理2に移ります。

 OKボタンを押さずとも、処理2に移る方法が
ありませんか? Wait:=Falseみたいな事できま
せんか?

101:デフォルトの名無しさん
08/06/26 18:45:56
.run "msgbox.vbs"

102:デフォルトの名無しさん
08/06/26 22:03:00
WSHはマルチスレッドじゃないからね
1プロセス1スレッドで、書かれたことを"順次"実行していくだけで
Megboxを出した状態で他の処理もするなどの"同時"実行は出来ない
やりたければ>>101も書いてるように別プロセスに非同期でMegboxを出させるしか無い

103:100
08/06/27 12:25:19
>>101 それにします。ありがとうございます。
>>102 マルチスレッドの事はわかりませんが、
「同時にできない」という事だけは覚えておきます。

104:デフォルトの名無しさん
08/06/27 12:37:02
WSH5.8からは出来るようになるかも

105:デフォルトの名無しさん
08/06/28 15:11:17
WSHってまだバージョンアップするの?

106:デフォルトの名無しさん
08/06/28 17:13:30
WSHは滅びんよ、何度でも甦るさ

107:デフォルトの名無しさん
08/06/28 21:01:14
PowerShell

108:デフォルトの名無しさん
08/06/29 02:10:47
PSH

109:デフォルトの名無しさん
08/07/07 23:08:32
VBSで質問です。

hoge.txtが以下の形式であります。

--- hoge.txt --------

foo 001
bar 001

(文字列、ブランク、3桁の数字、改行)
みたいな感じ。

このテキストに記載された文字列と一致する文字列が引数だったら、
同じ文字列の行の数字を+1させたいんです。
たとえば、引数が「foo」だった場合、「foo 002」みたいにしたいんです。

こんな感じの特定行を抜き出してのファイルに記載された文字列の置き換えって出来るんでしょうか?

というか、どんな風に組めばいいか教えてください(泣)


110:デフォルトの名無しさん
08/07/08 00:55:20

>>109
やりたいのって、マッチした文字列をカウントするようなこと?

ファイルの入出力がOKなら、
一行読んでは、Splitして、文字列と整数の構造体に
放り込む、を繰り返して一度全部構造体に入れる。
CLng CIntでもつかって後ろの要素は整数型変換すりゃいい。
使う構造体はハッシュ(Dictionary)でいいんじゃないかな。
マッチしたら、要素をインクリメント処理するを繰り返し、
終わったらJoinでもつかってファイルに書き出せば?

111:デフォルトの名無しさん
08/07/08 03:38:20
毎回ファイル全体書き換えていいなら>>110

必要な場所だけ書き換えたいなら
最大999までっていう制限で良い場合は
R/Wでオープンしてseekして書き換え

必要な場所だけ書き換える方針で
最大いくつになるか分からない場合は
999超えたときに末尾に追加行を作って
999-追加なしなら999
999-000なら1000
999-001なら1001
という処理を入れれば良い


112:デフォルトの名無しさん
08/07/08 13:05:43
COBOLer ですね わかります

113:デフォルトの名無しさん
08/07/08 17:00:48
吉岡照雄って人のOnErrorResumeNext.VBSの解説テキスト読んでるんだけど(2)の後半がよくわからない
On Error GoTo 0で復帰しちゃったら何事もなく処理が再開されちゃうから
ンなもん実装すんなよ!、おまいらも使うなよ!
って言ってるのかしら

114:デフォルトの名無しさん
08/07/08 20:40:17
>>92-93

115:デフォルトの名無しさん
08/07/09 05:33:05
exceptionが無かった頃はそうするしかなかった
いまならtry-catchで済む話

116:デフォルトの名無しさん
08/07/09 13:04:13
いまでもtry-catchつかえないよ

117:デフォルトの名無しさん
08/07/09 15:50:29
.NETなら使える

118:デフォルトの名無しさん
08/07/09 17:37:06
>>117
で?ややこしくならないようにまとめてくれ。

119:デフォルトの名無しさん
08/07/09 21:20:46
まとめるとJScriptを使えばよい

120:デフォルトの名無しさん
08/07/09 21:27:22
超シンプルなデータベースを作りたいと思っています
フォルダ内に100のテキストがあったとして その中に a="赤" とか
a="白"と書いてあり それを読み取り 最終的に割合を出すようにしたいのですが
いいサンプルなどないでしょうか?


121:デフォルトの名無しさん
08/07/09 22:05:46
var fso = new ActiveXObject("Scripting.FileSystemObject");
var Shukei = {};
var Sum = 0;
// カレントフォルダの全ての *.txt ファイルの1行目を読み,Shukeiに集計する
var f = fso.GetFolder(".");
for (var fc = new Enumerator(f.Files); !fc.atEnd(); fc.moveNext()) {
    var file = fc.item();
    if (/\.txt$/.test(file.Name)) {
        var stream = file.OpenAsTextStream();
        var s = stream.ReadLine();
        stream.Close();
        eval(s);
        if (a in Shukei)
            Shukei[a]++;
        else
            Shukei[a] = 1;
        Sum++;
    }
}
// 結果表示
for (var i in Shukei)
    WScript.Echo(i + ": " + (100 * Shukei[i] / Sum) + "%");

122:デフォルトの名無しさん
08/07/09 22:16:21
サンプルまで作ってもらってありがとうございます
行:1、文字:28、コード:800A0401、ソース:Micosoft VBScriptコンパイルエラー
これがでて試せないんですが何が問題なんでしょうか?

123:デフォルトの名無しさん
08/07/09 22:25:59
>>122
拡張子は .js です

124:デフォルトの名無しさん
08/07/09 22:30:24
ありがとうございます vbsだけじゃなくて jsもつかえるんですね


125:デフォルトの名無しさん
08/07/09 22:32:25
JScriptだから

126:デフォルトの名無しさん
08/07/09 23:56:31
>>113
On Error Goto ErrLabel
エラー
ErrLabel:
msgbox "キャッチ"

これをやってみたけど、ダメだった。VBAならできた。

127:デフォルトの名無しさん
08/07/10 15:32:51
helpよめ

128:デフォルトの名無しさん
08/07/13 13:00:54
パスワード入力の時どうしてる?

129:デフォルトの名無しさん
08/07/13 17:15:30
バッチとか、シェルとかPHPしか経験無いんですが、
Wshってマスターするのに、どのくらいの時間が掛かりますか?

130:デフォルトの名無しさん
08/07/13 17:29:40
マスターってなんだよ
と、突っ込まざるを得ない

131:デフォルトの名無しさん
08/07/13 17:43:18
プログラミング言語をマスターしようといっている時点で終わってる。

132:デフォルトの名無しさん
08/07/13 17:47:23
ライブラリの仕様とか、用意されてるものとか、その開発環境で実現できることが
さっと頭に浮かぶほうが、「マスターした」に近いよね。

133:デフォルトの名無しさん
08/07/13 17:49:39
しかも聞いてるのが時間って・・・

134:129
08/07/13 19:33:27
>>132
そういうことですね。
ある程度バッチで出来ちゃうから
なかなかwshやろうと思わないんだよね

135:デフォルトの名無しさん
08/07/13 19:59:02
まぁ、WSHはCOM使うのが得意で、VBかJSで書きますってだけで、
そのCOMと同じ機能を持ったCLIプログラムが最初から用意されて、
それに精通しているなら、それらを組み合わせてバッチでやろうと思うよね。

でもWSHのほうが、多少細かいハンドルできるから、覚えたいという気持ちはわかる。
ちょっとしたファイルの入出力とか、シェル周り、FileSystemObject周りは便利。

136:デフォルトの名無しさん
08/07/13 20:36:51
シェル周り便利なの?

137:デフォルトの名無しさん
08/07/13 20:48:06
>>136
FSOで一通りのファイル操作はできるし、それ以外はShell.Runとかでいいからという発想での話。

138:デフォルトの名無しさん
08/07/13 20:51:41
コマンドプロンプトが一瞬表示されてしまうと嫌がられる

139:デフォルトの名無しさん
08/07/13 20:57:08
>>138
runの第二引数に0じゃだめだっけ?

140:デフォルトの名無しさん
08/07/14 09:18:44
>>135
VB≠VBS

141:デフォルトの名無しさん
08/07/14 09:33:15
>>140
どゆこと?

142:デフォルトの名無しさん
08/07/14 21:05:26
>>141
VBSはVBライクで、VBとは違うって言いたいだけなのかな?

143:デフォルトの名無しさん
08/07/14 22:35:20
WSH スレに VB はいらんでしょ

ってことじゃないかな。

まあ、>>135 の勘違いか typo なんだろうけど、ちいせい奴としか思えない >>140

144:デフォルトの名無しさん
08/07/14 22:54:40
>>128
htmlでフォームを作って、パスワード入力欄に入力してもらう。
Enterを押したら、submitボタンが反応して、ページを読み込もうとするから、それを検出して・・・

って、もっといい方法があると思う

>>138
表示されないようにコマンドから返ってくる文字列を取得する
妙に複雑なコードを見たことがあるな

145:デフォルトの名無しさん
08/07/14 23:24:12
>>138
タスク
WScript.exe //E:JScript hoge.CMD

hoge.CMD
@if(0==0)WScript.Quit(new ActiveXObject('WScript.Shell').Run('"'+WScript.ScriptFullName+'"',0,true));@else
REM バッチファイルだよーん
:@end


146:デフォルトの名無しさん
08/07/14 23:31:47
>>128
Hey, Scripting Guy!
URLリンク(www.microsoft.com)


147:デフォルトの名無しさん
08/07/17 17:30:06
VBScriptを書く時、みなさんは、どんなエディターを
使っていますか?

148:デフォルトの名無しさん
08/07/17 21:20:28
Excel

149:デフォルトの名無しさん
08/07/17 21:45:51
男は黙ってメモ帳。

150:デフォルトの名無しさん
08/07/17 21:53:42
男じゃない場合↓

151:デフォルトの名無しさん
08/07/17 22:04:04
Microsoft Visual Web Developer 2008 Express Edition

152:デフォルトの名無しさん
08/07/17 22:11:39
サクラ

153:デフォルトの名無しさん
08/07/18 01:35:27
コントロールパネルの「コンポーネントの追加と削除」一覧と
インストールの状態の有無を出力したいと考えているのですが
WSHやWMIで可能でしょうか?

154:デフォルトの名無しさん
08/07/18 13:07:01
まぁ、レジストリ管理されてるものっぽいし、
レジストリ操作か、WMIでかのうじゃないの?

155:デフォルトの名無しさん
08/07/18 17:06:08
でもまあ、具体的なやり方は自分で調べろってことで

156:デフォルトの名無しさん
08/07/18 17:57:35
URLリンク(www.microsoft.com)

157:マイク ◆yrBrqfF1Ew
08/07/19 07:10:06
>>147
ずっとterapadを使ってる。
テキストファイルはほとんどterapadとxyzzyとnotepadで開いてる。

158:デフォルトの名無しさん
08/07/22 01:06:42
フォーカスされたチェックボックスをオンに
する方法がありますか? お願いします。

obj.SendKeys " "
上記でスペースを押せば、オンオフが切り替わります。
しかし、切り替えたいのでなくて、オンにしたいのです。

159:デフォルトの名無しさん
08/07/22 02:57:56
どんな状況で、何をやっているのか想像つかね。

160:デフォルトの名無しさん
08/07/22 14:27:59
obj.SendKeys "On"


161:デフォルトの名無しさん
08/07/22 17:58:33
>>160
つまらん。

162:デフォルトの名無しさん
08/07/23 01:56:06
シリアルポートに文字出力して、その応答を受け取るにはどうすれば
出力だけならCreateTextFile → WriteLineでできたっぽいですが、ReadLineすると怒られます

163:デフォルトの名無しさん
08/07/23 23:30:55
>>162
できたって、え?

164:デフォルトの名無しさん
08/07/24 05:08:00
指定位置、指定サイズ、指定表示状態(アイコン、詳細表示など)でフォルダウィンドウ(エクスプローラー)を起動できちゃったりしますか?


165:デフォルトの名無しさん
08/07/24 08:44:21
出来ちゃいますよ
アレ使えば

166:デフォルトの名無しさん
08/07/24 15:17:40
Shell.Explorer
System.Object
など、使い道が無さそうなProgIDがレジストリにいっぱいあるのはなぜ?


167:デフォルトの名無しさん
08/07/24 18:35:25 BE:555198645-2BP(802)
>>165
ヤダァ♪
もう、えっちぃ♥

168:デフォルトの名無しさん
08/07/24 23:48:00
COmってリファレンスないもの、多いよな

169:デフォルトの名無しさん
08/07/25 00:08:03
アレってなあに?

170:デフォルトの名無しさん
08/07/25 00:12:34
>>166
System.Objectは.NET Frameworkのもの。
確かにWSH (COM)ではこれだけあっても役立つとは思えないけど。

171:デフォルトの名無しさん
08/07/26 16:23:19
set x=createobject("explorer.application")
x.top=100
x.left=100
x.visible=true
だろ

172:デフォルトの名無しさん
08/07/26 22:07:11
実行したら

ActiveXコンポーネントはオブジェクトを作成できません:'explorer.application'

って出た

173:デフォルトの名無しさん
08/07/27 00:24:26
C08AFD90-F2A1-11D1-8455-00A0C91F3880
にprogidを登録しろ


174:デフォルトの名無しさん
08/07/27 00:27:13
internetをつけてみろ

175:デフォルトの名無しさん
08/07/27 00:32:51
それだとIEになるぞなもし

176:デフォルトの名無しさん
08/07/27 15:29:30
レジストリに
C08AFD90-F2A1-11D1-8455-00A0C91F3880
がないのに、使えるのはなぜ?

177:デフォルトの名無しさん
08/07/28 17:16:08
なぜWSHでwindowsを終了させられないのですか?

178:デフォルトの名無しさん
08/07/28 21:00:13
WSHスクリプトを起動するより、電源ボタンを押すほうが簡単だからかも?

179:デフォルトの名無しさん
08/07/28 21:05:03
>>177
出来るけど、なにか?

180:デフォルトの名無しさん
08/07/28 23:21:04
WMI使ってできるよねぇ。

181:デフォルトの名無しさん
08/07/28 23:50:19
WScript.Echo("電源ボタンを押してください");

182:デフォルトの名無しさん
08/07/29 19:35:52
createobject("shell.application").shutdown

183:デフォルトの名無しさん
08/08/01 10:37:00
フォームの自動入力させているんだけど、
IEじゃなくて、IEコンポーネントつかったブラウザとかソフトに入力する方法って無いですかね。


184:デフォルトの名無しさん
08/08/01 11:17:45
ありますよ。

因みに「どうやるの?」とか「具体的なやり方は?」とか、ネチっこく聞いてこないでで。
ただでさえ暑いんだから。


185:デフォルトの名無しさん
08/08/01 11:24:00
ヒントだけでも教えてもらえないでしょうか?

186:デフォルトの名無しさん
08/08/01 20:42:35 BE:333119243-2BP(802)
>>184
キサマは湘南海岸でプログラミングしてるのかと、小1時間…

187:デフォルトの名無しさん
08/08/01 21:28:43
set o2 = createobject("vb2ch.clsThread")
o2.sage

188:デフォルトの名無しさん
08/08/01 22:03:23
if nothing is nothing then msgbox (nothing is nothing)

189:デフォルトの名無しさん
08/08/01 23:03:27
>>183
EnumWindowsしてWindowの中にInternet_Explorer_Serverクラスがあるか探せばいいと思う

190:デフォルトの名無しさん
08/08/03 03:14:00



191:デフォルトの名無しさん
08/08/03 03:39:35
For Each ObjFile in CreateObject("Scripting.FileSystemObject").getFolder(CreateObject("Wscript.Shell").CurrentDirectory).Files
  ObjFile.name = "new" & ObjFile.name
  msgbox ObjFile.name
Next

フォルダに2つのファイルがあり、上記を実行します。
Forで2ループしてほしいのですが、4ループします。
なぜですか?

192:デフォルトの名無しさん
08/08/03 03:55:42
ループの中でリネームするから

193:デフォルトの名無しさん
08/08/03 08:07:09
>>191
普通に2回しか回らないぞ (@Windows2000SP4)

194:デフォルトの名無しさん
08/08/03 14:43:26
a ->newa
b ->newb
newa -> newnewa
newb -> newnewb


195:デフォルトの名無しさん
08/08/03 16:47:09
それが起るなら、無限ループになりそうなもんだが。

196:デフォルトの名無しさん
08/08/03 22:38:20
隠しファイルが2つあるとか

197:デフォルトの名無しさん
08/08/03 23:19:39
ファイル名によるんじゃないの?
ファイルのコレクションを得る時内部でどういったソートしてんのか知らんけど。
リネーム後のファイルが、処理済ファイルと未処理ファイルのどちらに振り分けられるかの違い。

経験則でいうと、ファイルコレクションに対してリネーム処理をするといったような場合は
一旦全ファイル名の配列を得るとかして、
その配列に対して、即ち明示的にファイル名を指定してループ処理しなければおかしくなる。

for ... in でコレクションからひとつひとつファイルを取り出しつつリネームしていく、
といったオンザフライな処理では恐らく望んだ結果は得られない。
リネームすることで大元のコレクションの内容がリアルタイムで変わっちゃう感じ。

泥臭いけど俺はいつもこうしてる。

var f1 = objFSO.GetFolder(folderspec);
var f2 = new Enumerator(f1.Files);
var arr = new Array();
for (; !f2.atEnd(); f2.moveNext()) arr.push(f2.item().Name);
var f, i;
for (i = 0; i < arr.length; i++) {
    f = objFSO.GetFile(objFSO.BuildPath(folderspec, arr[i]));
    f.Name = "new" + f.Name;
}

198:デフォルトの名無しさん
08/08/04 05:15:53
自分もそこでよく悩んだな
ループ中でリネームするとリネーム後のファイルがFilesコレクションに追加されてそのファイルも処理対象になっちゃうんだよな
そして延々と"new"が付加されていく

それ理解するのに時間かかった

199:191
08/08/04 05:24:31
>>192 たしかにリネームしなければ正常です。
>>193-195 回る数は2,3,4と不定ですが、無限はないです。
>>196 隠しファイルはないです。

>>197 
>コレクションの内容がリアルタイムで変わっちゃう感じ

特にこの一言でイメージできて分った気がします。
なので頑張ったのですが、どうしてもコードが読めません。
>>197をVBScriptにしてくれないでしょうか?

200:デフォルトの名無しさん
08/08/04 05:47:12
ええええ!?

201:デフォルトの名無しさん
08/08/04 07:07:03
うちも普通に2回しか回らないよ、XP SP3

202:デフォルトの名無しさん
08/08/04 08:10:08
>>199
コード読めなくても、その上で文章説明してるんだから
その通りにVBSで書けば良いだけだろ

ここはPC初心者板ではなくプログラム技術板なので
ここに来る以上、そのくらいは自分でやれなくちゃね

203:デフォルトの名無しさん
08/08/04 11:03:45
「PC初心者板」という言葉を持ち出してくる奴は
この板で有名な基地外の特徴なので
構わなくていいですよ。

204:デフォルトの名無しさん
08/08/04 11:04:03
普通に2回しか回らないね。(XP SP3)

2回以上回ってる人はどんな環境でやってるの?

205:デフォルトの名無しさん
08/08/04 11:11:10
プログラミングに関しては全く初心者なんで、変なこと言ってるかも知れないけど
For Each ObjFile in CreateObject("Scripting.FileSystemObject").getFolder(CreateObject("Wscript.Shell").CurrentDirectory).Files
これって毎回オブジェクト作ってるわけじゃなくて、最初の1回作ったときに
コレクションは出揃ってメモリに書き込まれるというわけじゃないの?

2回以上回る時は内容にアクセスするたびにオブジェクトを作り直してるわけ?

206:デフォルトの名無しさん
08/08/04 15:00:36
For Each ObjFile in CreateObject("Scripting.FileSystemObject").getFolder(CreateObject("Wscript.Shell").CurrentDirectory).Files
If Left(ObjFile.name,3)<>"new" Then ObjFile.name = "new" & ObjFile.name
  msgbox ObjFile.name
Next
で、どう?

207:デフォルトの名無しさん
08/08/04 15:03:32
For Each ObjFile in CreateObject("Scripting.FileSystemObject").getFolder(".").Files


208:デフォルトの名無しさん
08/08/04 15:12:10
>2回以上回る時は内容にアクセスするたびにオブジェクトを作り直してるわけ?
作り「直して」るわけ、ではなかろう

209:199
08/08/04 16:48:49
>>202の言う通りですね。
>>199レスでのコード依頼は、躊躇しながらも書いてしまったのですが、
やはり場違いなので取り消します。

さまざまなレスありがとうございます。

210:デフォルトの名無しさん
08/08/04 18:34:22
環境書いておくれよ

211:デフォルトの名無しさん
08/08/04 21:27:00
XPSP2/WSH5.7

上の簡単なリネームで試してみたら2回だったけど
ちょっと前に書いた自分のごちゃごちゃしたリネームのスクリプトだと
なんかリネームしたのが追加された覚えがあるな…
特定のメソッドを使ったりとかでコレクションへの追加が発動するんかな
そのスクリプトもどこかいったから確かめようがないな、ごめんよ

212:デフォルトの名無しさん
08/08/04 22:21:43
For Each ObjFile in Folder.Files
  ObjFile.name = "new" & ObjFile.name
  msgbox Folder.Files.Count
Next
してみ

213:デフォルトの名無しさん
08/08/04 22:42:35
VBscriptでApplication型のオブジェクトの宣言ってもしかして出来ない?

214:デフォルトの名無しさん
08/08/04 23:01:07
>>212
普通に2が2回表示されたよ
XP SP3

215:デフォルトの名無しさん
08/08/04 23:10:30
>>191
Set Files = CreateObject("Scripting.FileSystemObject").getFolder(CreateObject("Wscript.Shell").CurrentDirectory).Files
For Each File In Files
 File.Name = "new" & File.Name
For Each File1 In Files
  WScript.Echo File1.Name
 Next
Next

ってやると、Files の内容はリアルタイムに変わってる。
でも、外側のループは正常に2回しか回らない。

ファイルをコピーするようにすると、Files はちゃんと増えるけど、
それでも外側のループは最初にあったファイルしか対象にしない。

なので、For Each の In に続く部分は一回しか評価してないみたい。

じゃあと言うことで、ループ中にファイルを削除すると今度は削除
した奴はそ知らぬ顔でスキップする。

う〜む、どうやっても >>191 の4ループは再現しない。

とりあえず、環境と再現した時のファイル名を書いてくれないか。

>>213
VBScript ではそもそも型付の宣言なんかできません。

216:デフォルトの名無しさん
08/08/04 23:14:33
>>213
createobject("Excel.Application")
createobject("Word.Application")
createobject("Autocad.Application")


217:197
08/08/04 23:20:45
>>212
リネームすることでコレクション内のポインタ(moveNext() で動くやつ)の位置に
(恐らく)不整合が出るだけであって、ファイル数自体が増えるわけではないよ。

「(元のファイル名) -> (リネーム後のファイル名) (コレクションの要素数)」という
フォーマットで結果を吐き出すスクリプト。(当方環境:Me/WSH5.6)

var targetDir = "C:\\TEST"; // '1.TXT'、'2.TXT' の2枚のファイルが入っている。
var objFSO = WScript.CreateObject("Scripting.FileSystemObject");
var fo = objFSO.GetFolder(targetDir);
var fc = fo.Files;
var fe = new Enumerator(fc);
var filename = "";
var arr = new Array();
for (; !fe.atEnd(); fe.moveNext()) {
    filename = fe.item().Name;
    fe.item().Name = "_" + fe.item().Name; ... (a)
    //fe.item().Name = "~" + fe.item().Name; ... (b)
    arr.push(filename + " -> " + fe.item().Name + " (" + fc.Count + ")");
}
WScript.Echo(arr.join("\n"));

(「改行が多い」と怒られたので結果は次)

218:197
08/08/04 23:21:34
結果:
(a)
1.TXT -> _1.TXT (2)
2.TXT -> _2.TXT (2)
_1.TXT -> __1.TXT (2)

(b)
1.TXT -> ~1.TXT (2)
2.TXT -> ~2.TXT (2)
~1.TXT -> ~~1.TXT (2)
~2.TXT -> ~~2.TXT (2)
~~2.TXT -> ~~~2.TXT (2)

219:デフォルトの名無しさん
08/08/04 23:26:39
varってみるとVARIANT思い出すよ・・・orz

220:197
08/08/04 23:27:50
×fe.item().Name = "_" + fe.item().Name; ... (a)
×//fe.item().Name = "~" + fe.item().Name; ... (b)

○fe.item().Name = "_" + fe.item().Name; // ... (a)
○//fe.item().Name = "~" + fe.item().Name; // ... (b)

行末、コメントアウトするの忘れました。

221:197
08/08/04 23:42:35
他にもいろいろとファイル名とプレフィックスを変えて試してみたけど、
はっきり言って予測不能な振る舞いをします。

今のところ、初期条件(ファイル名とプレフィックス)が同じであれば
何度試行しても結果が再現されている感じです。

222:197
08/08/05 00:23:27
今回はリネーム作業でしたが、例えば Attributes プロパティを変更する処理では
このような問題は発生しませんでした。

223:デフォルトの名無しさん
08/08/05 00:31:31
それって、予測不能って言わないよな

224:デフォルトの名無しさん
08/08/05 00:38:51
そもそも、JScript と vbs じゃ処理が違って当たり前だと思うが。

225:デフォルトの名無しさん
08/08/05 00:52:18
JScriptとVBScriptの処理の違いなんて今誰も問題にしていないが


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

4976日前に更新/94 KB
担当:undef