I Wish U Heaven
7 :
名無し~3.EXE :2005/09/13(火) 21:45:44 ID:AptHJ6TV
保守は荒らし
じゃ、俺が代わりにメンテナンス後、テンプレを1/3程度に圧縮して 次スレから変更するわ。何ヵ月後になるかは知らんが。
新スレみっけ
11 :
11 :2005/09/16(金) 13:38:58 ID:DWe+J9rR
12 :
名無し~3.EXE :2005/09/20(火) 00:49:47 ID:PQfo7QY0
WMI使ってIEの履歴とかって見れないのかなぁ?
何に使う気だ
>11 mshってそれ自体の立ち上がりに時間がかかるから mshファイルをダブルクリックして実行するとメッチャ遅い。 ダブルクリックして実行したら 起動済みのmsh.exeに処理させるようには出来ないのかな。
15 :
名無し~3.EXE :2005/09/24(土) 15:27:48 ID:ZXIJYCRS
ある特定のフォルダのファイルの ファイル名と、作成日時、更新日時を取得して、 何日以前作成or更新でかつ、ファイル名に"hogehoge"を含むファイルを 削除するWSHスクリプトを晒してください。
やだ
17 :
15 :2005/09/24(土) 15:38:29 ID:ZXIJYCRS
残念です。。。
>>15 晒してもいいんだけど、残念ながら持ってなかった。
「書いてくれ」じゃなくて「晒してくれ」だから
持ってない場合はわざわざ書いてまで晒さなくてもいいんだよね。
まあ、いまさら訂正は認めないけどな。
この程度なら30分も調べりゃ全くの初心者でも書けるようになるからがんがれ。
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFolder = fso.GetFolder("フォルダのパス")
Set colFiles = objFolder.Files
For Each objFile in colFiles
' ここで検索パターンを書くなりファイルを消すなり好きにしろ
' Fileオブジェクトのプロパティ一覧を調べれば
' やることはわかるな。
' ファイル削除は"FileSystemObject ファイル 削除"でぐぐれ
Next
Set colFiles = Nothing
Set objFolder = Nothing
Set fso = Nothing
たまたま「特定のフォルダとそのサブフォルダ」から「特定の
ファイルタイプのファイル」を抽出して処理するスクリプトが
あったんで、大幅改変の上晒し。
>>15 はサブフォルダ内も検索したいとは書いてなかったんで
その部分はばっさり削除した。
>>19 それ枠組みだけじゃん
そんなん書く意味なしww
>>21 で、
>>19 は4処理中の1つだけなんだがな
オブジェクトの解放やらなんやらで見た目の行数だけは多いが、処理的には
For Each objFile in fso.GetFolder("フォルダのパス").Files
の1行に過ぎない。
>>15 は「何日以前」だから日時の判定は日付だけでいいんだよな?
だったら
If InStr(objFile.Name, "hogehoge") > 0 And Left(objFile.DateLastModified, 10) <= "2004/12/31" Then
objFile.Delete
End If
で済むよね。
笑えねー・・・・・
必要もないのに条件式をAndで繋いだり、 Date型を返すDateLastModifiedを文字列比較したりと面白い子ですね。
26 :
15 :2005/09/24(土) 22:50:21 ID:rRbm0XLT
みなさん、ありがとう。でも、、、
>>18 “がんがれ”って言われても、
“がんが”ってみたんだけど、わからなかったんだよね。。。
>>25 言っとる意味がわからん。。。
29 :
15 :2005/09/24(土) 23:41:35 ID:rRbm0XLT
>>27 VBScriptやJScriptをコンパイルするんだったら
VB.NETかC#でいいんじゃないかな?
>>30 せっかくだからJScript .Netって言ってあげて。
32 :
名無し~3.EXE :2005/09/25(日) 11:43:17 ID:lekHd/Mq
Webサーバ上のCSVファイルを読み込んで計算したいんですが OpenTextFileでファイル名にURLを指定しても名前が不正と怒られます。 どうしたらできるのか教えてください。お願いします。
msxml2.XMLHTTPオブジェクトとかを使う
ローカルファイルでもネットリソースでも 同じように処理してくれるものだと思っちゃうあなたはニュータイプです
指定した時刻から経過した分数を足して出力するスクリプトです。 ---------- Dim MyArray, times check = 1 Function jikoku() times = InputBox("""開始時刻,分""を入力。カンマで区切る",,"10:00,60") MyArray = Split(times, ",") m2h1 = MyArray(1) \ 60 m2h2 = MyArray(1) mod 60 MyArray(0) = DateAdd("h", m2h1, MyArray(0)) jikoku = DateAdd("n", m2h2, MyArray(0)) check = MsgBox(jikoku,65,"終了時刻") End Function Do While check = 1 jikoku() Loop ------------ これを実行して結果を得た後にキャンセルを押すと「インデックスが有効範囲に無い」 と言われるんですが、何のエラーも無く終了させるにはどうすれば良いのでしょうか。 仕様は 「InputBoxで時間、分を入力→計算して結果をMsgBoxで出力→ MsgBoxの返り血が"1"なら初めに戻る、"2"なら華麗に終了」にしたいです。
wsh(vbs)使い始めて30分ってとこか。 あと30分も勉強すれば、原因も解決方法も解ると思うよ。
>35 Functionの位置がおかしい。 それとInputBoxでキャンセルすると同じエラーになる。 ---------- Dim MyArray, times check = 1 Do While check = 1 jikoku() Loop Function jikoku() times = InputBox("""開始時刻,分""を入力。カンマで区切る",,"10:00,60") if times = "" then Wscript.Quit MyArray = Split(times, ",") m2h1 = MyArray(1) \ 60 m2h2 = MyArray(1) mod 60 MyArray(0) = DateAdd("h", m2h1, MyArray(0)) jikoku = DateAdd("n", m2h2, MyArray(0)) check = MsgBox(jikoku,65,"終了時刻") End Function
38 :
35 :2005/10/02(日) 21:43:31 ID:tQNDmXF1
>>37 あるがとうごさいます
FunctionとDo〜Loopの位置関係だけで改善されるとは…。
先にFunctionを読み込んで、それから呼び出す必要があるのかと思っていました。
>InputBoxでキャンセル〜
それでキャンセルしないようにし、
やったとしても特に問題にはなら無いので気にしないようにします。
>>36 恥ずかしながら、ちょこちょこやって三ヶ月以上触っています。
(今回のは三十分ぐらいで出来ました)
新しく書く度にドキュメントを見ながらやっている次第です。
39 :
35 :2005/10/02(日) 21:47:33 ID:tQNDmXF1
事故レス
>InputBoxでキャンセル〜
>>37 さんので問題が解決されてました。「if times = "" then Wscript.Quit」を見落としていました。
IEで表示している画像から、テンポラリフォルダに入ってるこういう画像パスを取得する方法ってないですか? 「file:///C:/Temporary%20Internet%20Files/Content.IE5/N13DF6BG/A.JPG
とりあえず私はそれ用の簡単なCOMを作った。 事実上GetUrlCacheEntryInfo関数しか使ってないので、DynaCallを使えばいけると思う。 他の手段は知らない。
>>41 GetUrlCacheEntryInfoってAPIですよね?
よければそのCOMを;゚∀゚)=3
>39 まぁ、本当はInputBoxで不正値を入力した場合の対応も必要だけど、 個人用ならそこまでしなくてもいいか。
>>44 サンクスです!
しかし登録しようとしたら、
「LoadLibrary("LocalCacheFinder.dll")failed - 指定されたモジュールが見つかりません」ってなるんですが。
もち、同じフォルダでプロンプトから「regsvr32 LocalCacheFinder.dll」やったんですが
おや。 ん〜、なんでだろ。 実はCOMを作ったのも渡すのも初めてなので良く分かってないんで。 同じフォルダって、カレントディレクトリがそれになってます? C:\**********> のところですが。 あるいはいっそdllのフルパスを指定してみるとか。
フルパスとバッチファイルもやりましたが、ダメでした。。
うん、私も他の環境で試してみて駄目でした。試せよ私。 作り直したのでダウンロードし直してくださいな。 //ついでにLocalCache.jsも修正……5行のコードにミス2カ所って……。
49 :
42 :2005/10/03(月) 01:50:21 ID:6du8aECY
>>48 無事登録できますた!
サンプルスクリプトを試した結果、パス取得出来ませんでした。。
自分はメモリにテンポラリ作ってるんですがこれがダメなんでしょうか?
C:\じゃないと無理?
51 :
42 :2005/10/03(月) 18:13:53 ID:twlgBP9+
>>50 レス遅くなってすみません。
CacheTest.exeからなら上手く表示されましたが
Scriptからはパスが取得出来ないみたいです。。
52 :
42 :2005/10/03(月) 18:24:44 ID:twlgBP9+
>>50 たびたびすみません。
スクリプトから正常に取得出来ました。
LocalCache.jsにブラウザに表示してる画像をそのままD&Dしていたのですが、
よく考えると、そのD&Dってテンポラリに入ってるキャッシュパスを引数に渡してたので
取得出来なかったことが分かりました。。こっち側のアフォ丸出しのミスでお手数かけてすみませんw
しかし、これすごい便利ですね。マジ感謝です!
53 :
名無し~3.EXE :2005/10/07(金) 14:44:23 ID:vUxYWxnM
WSHって仕事で使って大丈夫ですか? DOSバッチのように枯れても使い続けられるのなら良いのですが MSが明日にもサポートやめとか言い出さないか心配
>>53 VistaβにもWSH5.6はインストールされてるらしい。
monadは先送りになったし、しばらく生き残ってるんじゃない
55 :
53 :2005/10/07(金) 15:50:51 ID:vUxYWxnM
>>54 THX!
チ眥ョハルカッ、キ、ニ、゚、゙、ケ。」
解読よろ
「早速勉強してみます。」
エクセルのユーザーフォームに確実に値をブチ込みたいんですが、いい方法ありませんか? SENDKEY以外で
OLE
どうやって勉強すればいいでしょうか? サンプルがほしい
>>61 そりゃ可哀相だ。せめてこれで。
tp://www.google.com/search?num=100&hl=ja&lr=lang_ja&q=Excel.Application+WSH
おいっ。気をつけろ! OLE OLE 詐欺だ!
お前ら不親切ですね
WSHでfs.deletefolder(c:\temp\)を実行すると遅いマシンで巨大なディレクトリを削除しようとした場合、 途中でタイムアウトになりエラーになってしまいます。 これを回避する方法は無いでしょうか?
質問! WSHに必要なファイル(exeやdllなど)を消したかもしれません。 何が必要ですか?「設定ファイル”C”が不正」と出ます。
>>66 Dim fso, f, f1, fc, s
Set fso = CreateObject("Scripting.FileSystemObject")
Sub delFolderList(folderspec)
Set f = fso.GetFolder(folderspec)
Set fc = f.SubFolders
For Each f1 in fc
delFolder(f1.Path)
f1.delete
Next
End nSub
70 :
ミスった :2005/10/13(木) 01:33:10 ID:dBkYtGa7
Dim fso, f, f1, fc, s Set fso = CreateObject("Scripting.FileSystemObject") Sub delFolderList(folderspec) Set f = fso.GetFolder(folderspec) Set fc = f.SubFolders If fc.Count > 0 Then f.delete Else For Each f1 in fc delFolder(f1.Path) Next End If End Sub MsgBox "朦朧とした頭で再帰"
Option Explicit Dim objFS, objFolder, objSubFolder, colSubFolders Set objFS = CreateObject("Scripting.FileSystemObject") Call delFolderList("C:\Temp") Sub delFolderList(folderspec) Dim biggest biggest = folderspec Do While objFS.FolderExists(biggest) Set objFolder = objFS.GetFolder(folderspec) Set colSubFolders = objFolder.SubFolders If colSubFolders.Count = 0 Then objFolder.delete Else For Each objSubFolder in colSubFolders delFolderList(objSubFolder.Path) Next End If Loop End Sub MsgBox "ちょっと目が覚めた。オヤスミ"
72 :
名無し~3.EXE :2005/10/13(木) 02:54:47 ID:dBkYtGa7
73 :
名無し~3.EXE :2005/10/13(木) 22:26:01 ID:2jxo6pDt
ネットワーク上の別のPCのデスクトップにメモ帳を立ち上げる なんてこと、出来るのでしょうか?
>>73 できるよ。
でも、どうせ他の場所にも書いてるんでしょ?
そっちで聞いてね♪
76 :
名無し~3.EXE :2005/10/14(金) 01:00:00 ID:WDfPxMxX
マルチがなぜいかんのですか?
開き直るなよ、俺たちゃスルーしたるぜおいってだけだろがこのう゛ぉけなす
タスクバーに出ているアプリの名前を取得するにはどうすればいいでしょうか WindowsShell.item(i).Nameなどでは当然シェル名しか取れずに困っています
タスクバーに表示されるのってアプリによってはアプリ名とは限らず、
文書名だったりして、ウィンドウのタイトルになってると思うけど、
実際に取得したいのはそのタイトル名? それともプロセス?
それから
>>80 自身はどこまで試してどこまで把握してる?
任意サイトのHTMLソースを抜き取る方法を教えて下さいませ
>>82 var oXMLHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
with(oXMLHttpRequest)
{
Open("GET", strUrl, false);
Send();
}
var str=oXMLHttpRequest.responseText;
84 :
82 :2005/10/14(金) 21:39:42 ID:va92Dl+v
ようこそWindows script hostスレへ
88 :
85 :2005/10/15(土) 13:36:45 ID:m+AMWUQc
自動的に次スレ立てるスクリプトでもつくらないか。
90 :
85 :2005/10/15(土) 20:21:30 ID:m+AMWUQc
stream = new ActiveXObject("ADODB.Stream"); の時点で「オートメーション サーバーはオブジェクトを作成できません」 とエラーが出ます。セキュリティ設定の問題?
92 :
85 :2005/10/15(土) 21:39:12 ID:m+AMWUQc
>>91 なるほど。。これ有効にするとセキュリティ的に弱くなるわけですか。
自分で使う分にはいいけど・・・
みんさんどうしてるんでしょう?
94 :
85 :2005/10/16(日) 07:08:55 ID:Bdzlzn2G
>>93 おおっ仕事中考えてたんですよ!
やっぱできますかそういうこと。なるほど〜
とりあえず出鼻くじかれずにすんでほっとしました。
ありがとうございます。
95 :
85 :2005/10/16(日) 15:22:41 ID:Bdzlzn2G
完成!とても使えるものができました。ありがとうございました。 TextEncoder(objXML.responseBody); function TextEncoder(bite) { //レジストリ修正 ADODB.Streamを使用可に WshShell = new ActiveXObject("WScript.Shell") WshShell.RegWrite("HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\\ActiveX Compatibility\\\{00000566-0000-0010-8000-00AA006D2EA4\}\\Compatibility Flags",1,"REG_DWORD") var FS = new ActiveXObject("Scripting.FileSystemObject") var sFileName = FS.GetTempName() var TS=FS.CreateTextFile(sFileName,true,true) //UNICODEとして書き込む TS.Write(bite) TS.Close() var adTypeText = 2; var stream = new ActiveXObject("ADODB.Stream"); stream.charset='_autodetect'; //文字コード自動判定 stream.type = adTypeText; stream.open(); stream.loadFromFile(sFileName); stream.position = 0; var returnText = stream.readText(); stream.close(); FS.DeleteFile(sFileName) //レジストリ修正 ADODB.Streamを使用不可に WshShell.RegWrite("HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\\ActiveX Compatibility\\\{00000566-0000-0010-8000-00AA006D2EA4\}\\Compatibility Flags",1024,"REG_DWORD") return returnText }
97 :
85 :2005/10/16(日) 16:07:51 ID:Bdzlzn2G
あ。はじめのWshShell.RegWriteの第二引数は1じゃなくて0ですね。
ってか完成じゃなかったようです。
いざ目的のアクティブデスクトップに設定してみると
「オートメーションサーバーはオブジェクトを作成できません」 orz
なんでだ!?
レジストリの書き換えはできてるみたいなのに。
>>96 ん?どこだ?探してみます。
ってか地震でけぇ
98 :
85 :2005/10/16(日) 16:33:30 ID:Bdzlzn2G
連続カキコすいません。 再起動したら動いたというオチでした。
フォルダ内の作成日時順にあるリストに従って名前をつけるスクリプト書いてください MDダビングしたんだけどいちいちリネームするの面倒だ
ここはスクリプト書いてくださいスレじゃないぞ まあ、教えたがりのピエロが踊って(書いて)くれるかもしれないけど
101 :
99 :2005/10/16(日) 19:30:23 ID:wHYznMTs
いま自分で書いてますが、配列に作成日順にファイル名を入れる方法が思いつきません・・・ なにか方法ありませんでしょうか?
>>101 日付オブジェクトを格納した配列をバブルソートでもなんでも使ってソートすればok
書いたものを省略せずに全てここに書け 他人任せではなく、やる気があるならアドバイスするぞ
104 :
ぴえろ :2005/10/16(日) 19:43:34 ID:Tmen2nQo
>>99 金払え。
Dim objFS
Set objFS = CreateObject("Scripting.FileSystemObject")
Dim objFolder, objFile1, objFile2, objTSR
Set objFolder = objFS.GetFolder("ぱす")
Set objTSR = objFS.OpenTextFile("りすとのぱす")
I = 0
For Each objFile1 In objFolder.Files
For Each objFile2 In objFolder.Files
Do until objFile1.DateCreated < objFile2.DateCreateed
I = I + 1
Loop
Next
Next
105 :
ぴえろ :2005/10/16(日) 19:56:49 ID:Tmen2nQo
なにかんがえてたか忘れたよ。 ファイル名を日付順に連番にしてから名前をつけなおすつもりだったんだが。
Dim objFS,objFolder, objFile1, objFile2, objTSR Set objFS = CreateObject("Scripting.FileSystemObject") Set objFolder = objFS.GetFolder("ふぉるだぱす") Set objTSR = objFS.OpenTextFile("りすとぱす",1,False) I = 0 For Each objFile1 In objFolder.Files For Each objFile2 In objFolder.Files If DateDiff("s",objFile1.DateCreated , objFile2.DateCreated) < 0 Then I = I + 1 objFile1.Name = I End If Next Next For Each objFile1 In objFolder.Files IF objTSR.AtEndOfLine Then Exit For objFile1.Name = objTSR.ReadLine Next
107 :
99 :2005/10/16(日) 20:50:26 ID:wHYznMTs
あんたら神だ。ちきしょう涙でモニタが見えねぇ・・・
安い神だな
110 :
99 :2005/10/17(月) 20:08:42 ID:vtLP9HIH
>>106 から少々拝借しまして、日時をファイル名にして普通にリネームしたらできました
地道にリネームした方が早かったけど達成感があるからいいや
111 :
名無し~3.EXE :2005/10/17(月) 21:14:55 ID:4T0yxDjM
すいません初歩的すぎて申し訳ないんですが、次のサンプルスクリプトをWSHへ書き換えたいんですが パラーメータの渡し方がわかりません。 どなたか教えてください。 <object ID=NetMeeting CLASSID="CLSID:3E9BAF2D-7A79-11d2-9334-0000F875AE17"> <PARAM NAME = "MODE" VALUE = "DataOnly"> </object> ↓ Set NWobj = createobject("Netmeeting.App")
はいはい。まるちまるち。
HTMLでは属性の名前と値の間のイコール前後に空白をあけない方が良いぜ。
114 :
名無し~3.EXE :2005/10/17(月) 21:32:44 ID:4T0yxDjM
>>112 答えてくれんだったら、どんなに批難を受けようと甘んじて受けますよ。
で、あっちのスレを見て、こっちのスレも見てる常連さんなら判るよね?
>>114 答えてやらなかったらどうだってんだ?
死ねや。
むこうで謝ってきてから死ね。
最近はマルチしといて開き直るのが流行ってるのか?
マルチを自覚しないからだろ
>114-117 フッ゚ >111 出来ない。 <Object>タグが使えのなら、wshでIEを起動して、そこへHTMLを吐き出す方法がイイヨ
えなに
>>118 が笑うところ?
普通にProgIDあるのに……。
フッ゚ ↑崖から飛び降りた人のAA
>フッ゚ なによりも「ッ」の後の「 ゚」が気になる
「おっ゜て」みたいなもんだろ
「アッー」みたいなもんだろ
設定データの読み書きについて質問です。 hoge.ini に以下のように複数のカテゴリに複数の設定項目を読み書きしようとしてます。 [category1] hoge1=100 hoge2=500 hoge3='test' [category2] hogehoge1=100 hogehoge2=500 hogehoge3='test' 書き込みは問題ないんですが読み込み時、 FSOでReadLine()したとしてもただのテキストデータなので変数としては扱ってくれません。 一般的にこういった設定データはどのように扱うものなんですか?
>>125 wshからAPIを使える環境を整えてないなら、
行単位で読み込んだものを文字列操作していくしかないだろ。
やり方は自分で調べろ。
>>126 それはwshからapiを使える環境を整えれば簡単にできるというこですよね?
具体的にはどういう作業なんですか?
128 :
126 :2005/10/20(木) 15:13:22 ID:615yvaOi
文字列操作は意外に簡単にできました。 hoge.ini test=1 var fso = new ActiveXObject("Scripting.FileSystemObject") var oTS = fso.OpenTextFile("hoge.ini", 1, true, -2) var loadObj = oTS.ReadLine().split('='); window[loadObj[0]] = loadObj[1]; alert(test)
GetPrivateProfileSection 行単位で呼んで解析するのと大して変わらないかな
HTMLの相対パスを絶対パスに一発変換出来る正規表現の構文教えてください。 先読みとかいろいろやったが「../../../index.html」とか上位階層の指定はどうやっても思いつかないです。
>>125 Function IniRead(IniFile, Section, Value)
Dim objFS, objTSR, line
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objTSR = objFS.OpenTextFile(IniFile, 1, False)
Section = "[" & Section & "]"
Do Until objTSR.AtEndOfStream
If Section = objTSR.ReadLine Then
Do until objTSR.AtEndOfStream
line = objTSR.ReadLine
If Value = Split(line, "=")(0) Then
IniRead = Split(line, "=")(1)
Exit Do
End If
Loop
Exit Do
End If
Loop
objTSR.Close
End Function
IniWrite "C:\y.ini","gg","ff","tekitou"
>>132 もうちょっと例外処理をきちんとやった方が良くないか?
まあその辺は使う奴が修正しろってつもりならそれもいいけど。
指定セクションの指定キーが間違いなく有る場合は問題ないしな。
>>133 Function IniRead(IniFile, Section, Value)
On Error Goto er
Dim objFS, objTSR
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objTSR = objFS.OpenTextFile(IniFile, 1, False)
IniRead = Split(Split(objTSR.ReadAll, Section & ".*" & Value)(1),"\r\n")
er:
Set objTSR = Nothing
End Function
Sesame Scriptって何処かで聞いたような語感だよな
話が逸れるけど、
>>128 >window[loadObj[0]] = loadObj[1];
これと同じ window[...] という表現をたまに見るんだけど、
文法的には「window オブジェクトのプロパティとして新たに
定義してる」って解釈で正しいのかな?
だとすると「連想配列の添字=プロパティ」っていう JS の
仕様を知らないと分からない、ちょっとアクロバチックな
書き方な気がする。
JSにはそもそも連想配列なんてありませんが
138 :
名無し~3.EXE :2005/10/24(月) 12:56:57 ID:dKouxBZe
教えて君ですみません。 ローカルエリア接続を「無効/有効」をWSHで行いたいのですが、ヒントすらも見つかりません。 こんなようなことがやりたい ifconfig en0 down|up
教えて君は書き込まないで下さいね。
>>138 何かのツール使うしかないんじゃない?
とりあえずwmiじゃだめだったはず
141 :
138な教えて君 :2005/10/24(月) 17:08:04 ID:dKouxBZe
>139 ケチ! >140 あっちこっち検索しているうちになんとか出来た。 Set Shell = WScript.CreateObject("Shell.Application") For Each oItem In Shell.NameSpace(3).Items If oItem.Name="ネットワーク接続" Then For Each oSubItem In oItem.GetFolder.Items If oItem.GetFolder.GetDetailsOf(oSubItem,1)="LAN または高速インターネット" Then 'これは4つあるので3になった If oItem.GetFolder.GetDetailsOf(oSubItem,3)="Intel PRO/100とかなんとか" Then 'ファイアウォールを使っていなかったら違う書き方 If oItem.GetFolder.GetDetailsOf(oSubItem,2)="接続、ファイアウォール" Then oSubItem.InvokeVerb "無効にする(&B)" WScript.Sleep 1000 ElseIf oItem.GetFolder.GetDetailsOf(oSubItem,2)="無効、ファイアウォール" Then oSubItem.InvokeVerb "有効にする(&A)" WScript.Sleep 1000 End If Exit For End If Exit For End If Next Exit For End If Next だれかCoolでスマートにしてくれ。(やっぱり教えて君)
文字列をJIS・Shift-JIS・EUCJPにエンコードするにはどうすればいいのでしょうか? UTF-8 → encodeURIComponent() Unicode → escape() の2つしか無理でしょうか?
このスレを検索すればでてくる
144 :
142 :2005/10/28(金) 10:01:40 ID:xCgLkcWv
145 :
142 :2005/10/28(金) 11:16:02 ID:xCgLkcWv
UTF8→SJISの場合なんですが、どこが間違っているんでしょうか? var word = external.menuArguments.document.selection.createRange().text; var word1 = encodeURIComponent(word) var word2 = Unicode2SJIS(word2) alert(word2) function Unicode2SJIS(bite){ var FS = new ActiveXObject("Scripting.FileSystemObject") var sFileName = FS.GetTempName() var TS = FS.CreateTextFile(sFileName,true,true) //UNICODEとして書き込む TS.Write(bite) TS.Close() var TS=FS.OpenTextFile(sFileName,1,false,0) //SJISとして読む if(! TS.AtEndOfStream){ TS.Read(2) //2バイトのごみ(UNICODEヘッダ?) if(! TS.AtEndOfStream){ sTempStr = TS.ReadAll() } } TS.Close() var TS=FS.CreateTextFile(sFileName,true,false) //SJISとして保存 TS.Write(sTempStr) TS.Close() FS.DeleteFile(sFileName) return sTempStr }
146 :
142 :2005/10/28(金) 11:17:42 ID:xCgLkcWv
>>145 >var word2 = Unicode2SJIS(word2)
var word2 = Unicode2SJIS(word1)
の間違いです。
普通Unicodeと言えばUTF-16を指すな。 素直にADODB.Stream使うべし。
148 :
名無し~3.EXE :2005/10/28(金) 17:31:02 ID:ktRkHCQR
最小化になってるJaneを最大化するにはどうしたら良いですか? Set WSHShell = WScript.CreateObject("WScript.Shell") WSHShell.Run """C:\(省略)\jane2ch.exe""",9,True とやってもだめでした。よろしくお願いします。
>>145 BASP21使うのは?KconvFile
const int SW_MAXIMIZE = 3; HWND hWnd = FindWindow( "クラス名", "ウインドウタイトル" ); ShowWindow( hWnd, SW_MAXIMIZE );
151 :
142 :2005/10/28(金) 18:51:04 ID:xCgLkcWv
>>147 ADODB.Streamでもできないんでうが、どこが間違っているでしょうか?
var word = external.menuArguments.document.selection.createRange().text;
var word2 = TextEncoder(word)
alert(word2)
function TextEncoder(bite) {
//レジストリ修正 ADODB.Streamを使用可に
WshShell = new ActiveXObject("WScript.Shell")
WshShell.RegWrite("HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\\ActiveX Compatibility\\\{00000566-0000-0010-8000-00AA006D2EA4\}\\Compatibility Flags",0,"REG_DWORD")
var FS = new ActiveXObject("Scripting.FileSystemObject")
var sFileName = FS.GetTempName()
var TS = FS.CreateTextFile(sFileName,true,true) //UNICODEとして書き込む
TS.Write(bite)
TS.Close()
var adTypeText = 2;
var stream = new ActiveXObject("ADODB.Stream");
stream.charset='_autodetect'; //文字コード自動判定
stream.type = adTypeText;
stream.open();
stream.loadFromFile(sFileName);
stream.position = 0;
var returnText = stream.readText();
stream.close();
FS.DeleteFile(sFileName)
//レジストリ修正 ADODB.Streamを使用不可に
WshShell.RegWrite("HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\\ActiveX Compatibility\\\{00000566-0000-0010-8000-00AA006D2EA4\}\\Compatibility Flags",1024,"REG_DWORD")
return returnText
}
何やりたいのか分からない。 スクリプトの中では文字列は文字列であって、別にエンコーディングとか無いよ? エンコーディングが問題になるのはファイルに書き出すときとかそんなの。 まさかUnicodeバイト列を無理矢理Shift_jisで読み込むとか言う話でもないだろうし。
153 :
142 :2005/10/28(金) 19:38:29 ID:xCgLkcWv
>>152 よくわからないんですが、したいことを説明すると
「ブラウザで選択文字を右クリックから検索サイトで検索する」です。
この時、&ie=が使えないところもありますし、
検索サイトに合わせて文字をエンコードする必要があると思ってるんですが
勘違いでしょうか?
155 :
142 :2005/10/28(金) 20:42:38 ID:xCgLkcWv
>>154 ?
変換しなくても日本語のままでいけるよってことでしょうか?
あー、UrlEncodeだったのか。見落としてた。 こんなのでどうだろう。JScriptだとバイナリ操作が面倒だからなぁ……。 function urlEncode(text, encoding) { //encodingは"utf-8"とか"shift-jis"とか"euc-jp"とか var ados = new ActiveXObject("ADODB.Stream"); //まあこれは適当に許可を与えるなりして ados.type = 2; ados.charset = encoding; ados.open(); ados.writeText(text); ados.position = 0; ados.type = 1; var xmldoc = new ActiveXObject("Microsoft.XMLDOM"), elem = xmldoc.createElement("tmp"); elem.dataType = "bin.hex"; elem.nodeTypedValue = ados.read(); ados.close(); var bin = elem.text, len = bin.length, retval = new Array(), i = 0; retval.push(""); switch (encoding.toLowerCase()) { //BOMを無視するため case "utf-8" : i = 6; break; case "unicode": case "utf-16" : i = 4; break; } for (; i < len; i += 2) retval.push(bin.substr(i, 2)); return retval.join("%"); }
157 :
142 :2005/10/28(金) 21:02:07 ID:xCgLkcWv
158 :
148 :2005/10/29(土) 00:00:50 ID:fL642uml
解決しますた。 アクティブにした後、sendkeyで"%スペースX"でできました。 これでひとつ前進です。
159 :
142 :2005/10/29(土) 04:39:09 ID:oMw/bu2r
・ここで使うってどう使ったの? ・関数に渡した文字列は? ・encodingには何を?
161 :
159 :2005/10/29(土) 05:08:07 ID:oMw/bu2r
>>160 Sleipnir用のスクリプトですみませんが
var pnir = new ActiveXObject("Sleipnir.API");
var id = pnir.GetDocumentID(pnir.ActiveIndex);
var document = pnir.GetDocumentObject(id);
var word = document.selection.createRange().text;
word = urlEncode(word, "ISO-2022-JP")
var link = "
http://www.wdic.org/?word= " + word;
pnir.NewWindow(link, true);
普通にIEの右クリックだと
var word = external.menuArguments.document.selection.createRange().text;
word = urlEncode(word, "ISO-2022-JP")
var link = "
http://www.wdic.org/?word= " + word;
external.menuArguments.window.open(link);
>>159 の時点では確認してなかったのですが、後者だとできました。
上のスクリプトでもMSのサイト以外なら機能しています。
エンコードを変えても、検索サイトを変えてもダメです。
Sleipnirのことだとスレ違いになってしまうかもしれませんが・・・。
frameset/frame要素のせいだな。 その操作ではurlが示すdocumentしか取れないから、肝心のselectionが存在するframeを調べられないんだ。 これで選択中のdocument.selectionが取れる。 ただし、結構コストがかかる。MSDNだったら後ろから調べた方が良いんだが。 念のためにその後selection.createRange().textが空文字列かどうかもチェックした方が良いな。 function getSelectionInFrames(document) { var selection = document.selection; if (selection.type == "Text") return selection; else { var frames = document.frames; for (var i = 0; i < frames.length; i++) { if ((selection = getSelectionInFrames(frames.item(i).document)) != null) return selection; } return null; } }
163 :
159 :2005/10/29(土) 09:58:28 ID:oMw/bu2r
164 :
名無し~3.EXE :2005/11/01(火) 00:31:27 ID:NSjNBsMW
ユーザプロファイルのバックアップのスクリプトを作成したいのですが、どなたか 作成方法ご存知でしょうか?ソースが乗ってあるサイトや書籍がありましたら、教えてくれませんでしょうか? また、使用しないユーザ削除したり、プロキシ変更したりするプログラムもありましたら お願いします。
教 え て 君 、 登 場 ..!!
>>164 まずは自分で書いたものを晒せ
ここは、多少なりともwshの知識がある奴が
テクを披露したり、ヒントを貰ったりするスレであり、
全くのド素人に、ポンポンとソースくれてやる為のスレじゃないぞ
勉強する気すら無いなら立ち去れ
>>164 googleを使い倒して見つからなかったらここで聞け
168 :
名無し~3.EXE :2005/11/01(火) 01:25:07 ID:DaBmThTM
とあるhtmlを表示するのにSleipnirで表示させたいのですが、下記のように実行すると IEで表示されます。対処法はありますか?(関連付けはSleipnirです) Set WSHShell = WScript.CreateObject("WScript.Shell") WSHShell.Run "abc.html"
Option Explicit Dim pnir, document, id Set pnir = CreateObject("Sleipnir.API") id = pnir.GetDocumentID(pnir.ActiveIndex) Set document = pnir.GetDocumentObject(id) If document Is Nothing Then Call pnir.MessageBox("Document オブジェクトを作成できません") Else ' TODO: コードをここに記述してください。 Set document = Nothing End If Set pnir = Nothing
Set pnir = CreateObject("Sleipnir.API") id = pnir.GetDocumentID(pnir.ActiveIndex) Set document = pnir.GetDocumentObject(id) If document Is Nothing Then Call pnir.MessageBox("Document オブジェクトを作成できません") Else ' TODO: コードをここに記述してください。 Set objShell = Wscript.CreateObject("Wscript.Shell") objShell.Run "abc.html" Set document = Nothing End If Set pnir = Nothing 同じくIEで起動します。
テラワロス
>>168 通常使うブラウザの設定などが絡んでいる気がする。
175 :
11 :2005/11/03(木) 14:19:17 ID:XshjENEj
>>174 WshShell.Runはhttpの関連付けに関わらず、常にIEで開いてしまいます。
Shell.ApplicationのShellExecuteメソッドを使えば、httpの関連付けで開かれます。
Sleipnirに限らず、Donut系でもOKです。
Set Shell = WScript.CreateObject("Shell.Application")
Shell.ShellExecute "index.html"
176 :
名無し~3.EXE :2005/11/03(木) 22:11:13 ID:Xy82FO4t
全角数字を半角数字に変換するには何か方法がありますか? 例 1234 → 1234
文字コードをテーブルで変換……数字だけならテーブル作るまでもなく計算でいけるか。 var a = "1234", retval = ""; for (var i = 0; i < a.length; i++) retval += String.fromCharCode(a.charCodeAt(i) - 0xFEE0); WScript.Echo(retval);
178 :
名無し~3.EXE :2005/11/03(木) 23:38:22 ID:zRsZ7sw3
Set WshNetwork = WScript.CreateObject("WScript.Network") Set objNetwork = WScript.CreateObject("WScript.Network") UserName = objNetwork.UserName Call WshNetwork.MapNetWorkDrive("S:","\\zasdsd12\abc") MsgBox( "IEのお気に入りのコピーを始めます。") Set objFso = CreateObject("Scripting.FileSystemObject") Set objFolder = objFso.GetFolder("S:\") Set objSubFol = objFolder.SubFolders Set objNetwork = WScript.CreateObject("WScript.Network") UserName = objNetwork.UserName objSubFol.Add(UserName) 'お気に入りフォルダ作成 Set objFso = CreateObject("Scripting.FileSystemObject") Set objFolder = objFso.GetFolder("S:\"&UserName) Set objSubFol = objFolder.SubFolders Set objNetwork = WScript.CreateObject("WScript.Network") objSubFol.Add("お気に入り") 'IEのお気に入りのコピー Set FSO = CreateObject("Scripting.FileSystemObject") FSO.CopyFolder "C:\Documents and Settings\"&UserName&"\Favorites", "S:\"&UserName&"\お気に入り" MsgBox("お気に入りのコピーは完了しました") これに、ネットワークドライブが常に作成されたときにIEのお気に入りだけデータを上書きコピーするには どうしたらよろしいのでしょうか? ネットワークドライブが作成されており、再び実行するとエラーで帰ってきます。 再実行したときは、お気に入りだけを再コピーする方法はどうすればよろしいでしょうか?
ワラタ
180 :
名無し~3.EXE :2005/11/05(土) 10:21:38 ID:ByQ7/AwF
モバイルでプログラム【NS BASIC/CE】
http://pc8.2ch.net/test/read.cgi/mobile/1012242798/ NSBASIC/CEはWSHを知ってるならほぼ使えるよ!
PDAであるWindowsCE上(実質シグマリやjornadaでないときついが。)でもデスクトップでも
開発が可能。
手のひらで自分の作ったアプリが動く喜び!最新Ver6.02は、EXE化されたものに好きな
アイコンをつけられるのでほとんどスクリプトと分からない。
NS Basic/CEは、WindowsCEにRuntimeを導入してその上で動く。
最新のWM5にも対応しており、日本語版も出ているし、日本語サポートもいるので安心だ。
181 :
名無し~3.EXE :2005/11/05(土) 10:23:42 ID:ByQ7/AwF
よかったら購入してユーザーにならないか? 俺もユーザーになったばかりなんだ。
日本サポートに確認をしたんだが、WEBでユーザー登録していただいて、その後、日本語サポートに連絡を
くれたら、無料Ver6(最新版)にアップデートできるそうだ。
FACTORY SABOT
501 Maritaimu 9-9 Higashimaikochou, Tarumi-ku, Kobe, Japan
Phone(078)787-3602 Fax(078)787-3619
http://www.sabot.co.jp/ [email protected] MobilePLAZA
6-3-7-1F Sotokanda, Chiyoda-ku, Tokyo, 101-0021 Japan
Tel 03-3834-0315
http://www.mobileplaza.co.jp/ で買える。
ttp://www.nsbasic.com/ce/Japanese/ が公式なんだが
DEMO版で試すことができるから、WSHのソースを貼り付けてみるといい。実質WSHだから。
シャープのW-ZERO3のCOMコントロールでPHSに信号を送り電話がかけられることがシャープより
確認が取れてるから今度出るWM5にも対応してる。
どだ?仲間になってくれないか?NSBASICがほぼWSHというのを(画面の大きさとかあるけど)知らない人が
多いんで宣伝してすまそ WSH(・∀・)スレッド! にも貼り付けたのであちらも覗いてる人には非常にすまない
あ、このWEBでユーザー登録して日本語サポートにメールくれたら 最新のをというのは Ver5を買っても、無料でユーザー登録した時点の最新Verアップが可能と言うことなんだ。
普通に.NET Compact Frameworkを使う
184 :
名無し~3.EXE :2005/11/07(月) 00:42:32 ID:+n40qXsg
185 :
名無し~3.EXE :2005/11/07(月) 07:04:34 ID:UiCzACCl
>>178 DriveExistsメソッド使っては?
お気に入りのコピーってスクリプト組むほど頻繁にやるもの?
187 :
名無し~3.EXE :2005/11/08(火) 05:01:33 ID:H8Xxh0KY
ファイルをごみ箱に入れることってできないでしょうか? 普通にDelete使ったらごみ箱に入らないし、Move使おうかと考えたけど ごみ箱のパスってあるんですか?
189 :
187 :2005/11/08(火) 10:17:41 ID:H8Xxh0KY
>>188 ごみ箱のパスはわかったんですが、ファイルをごみ箱へ移動しても
エクスプローラで表示されないです。
>>189 ごみ箱のパスなんて関係ないし
普通の移動(move)とは違うよ
「ググれば一発で出てくる」のはゴミ箱のパスじゃなくて
wshでファイルをごみ箱に入れる方法そのもの
Shell.Applicationから該当ファイルのFolderItemオブジェクト取得して InvokeVerbかな?
192 :
187 :2005/11/08(火) 12:34:23 ID:H8Xxh0KY
ようやくわかりました。 ありがとうございました。
wshってエディターないんですか? ワードパットで作っても味気ないし。
ワードパッドにワロタ 本当にこういう子いるんだねぇ
>>193 ワードパッドでもいいと思うがw
コード補完機能が欲しいのかい?
単純に予約語を挿入して、語法グループで色表示タイプなら、フリーのテキストエディタであるはずだがw
オブジェクト変数まで認識してメンバー候補まで出してくれるのは
あったかなぁ〜
つーか、まだオレはInterDev6使ってHTML上で補完して書いてるからゴメンな
copalとかはどうかな
EmEditorマジおすすめ、 学生、フリーソフト作者、テクニカルライターなら無料だし、 マクロがWSHベース
Office付属のVBEが一番いいんだろうけどWSHは補完されない。 Visual Studio .Netでも書けるらしいけど、使い方がよく分からなかった。
K2Editor + wshcomp でもええやん。
wshcomp = ъ( ゚ー^) WSH補完クン だった。
202 :
名無し~3.EXE :2005/11/11(金) 10:33:07 ID:a7GVXNXi
aadmnistratorのユーザ名の変えるスクリプトなんですが、ログオンIDとパスワードは、 変更できるんですが、スタートメニューに表示される名前だけは、変更できません。 どのようにしたらよろしいでしょうか? 'Renaming Admin Set oMachine = GetObject("WinNT://" & strComputer) Set oInfoUser = GetObject("WinNT://" & strComputer & "/Administrator,user") set oUser = oMachine.MoveHere(oInfoUser.ADsPath,"root") 'Reseting Admin Password Set objUser = GetObject("WinNT://" & strComputer & "/root, user") objUser.SetPassword "test" objUser.SetInfo
203 :
名無し~3.EXE :2005/11/11(金) 19:07:07 ID:dSM3507Z
CDO.MessageオブジェクトのCreateMHTMLBodyメソッドを使って URLからWebアーカイブ (*.mht)を作成するVBSを作ったのですが、 とりあえずmhtの作成はうまくいくのですが、文字コードがEUCになってしまいます。 ブラウザでの表示では問題ないのですが、後の編集の都合上、 S-JISで保存したいのですが、どうすればよいのでしょうか? 以下が使用したコードです。これでEUCでの保存は正常にできてます。 Const CdoSuppressNone = 0 Const adSaveCreateOverWrite = 2 With CreateObject("CDO.Message") .CreateMHTMLBody "対象URL", CdoSuppressNone .GetStream().SaveToFile "保存ファイルパス", adSaveCreateOverWrite End With Eco-SoftのTipsに同じくCDO.Messageを使ってmhtで保存するサンプルがあるので Eco-Soft製のEcoBoxUというmht形式スクラップツールも同じ方法を使ってると思われますが EcoBoxUを使うとS-JISで保存されます。 なので何かしら方法は有るはずなのですが、さすがにEcoBoxUの作者さんに VBSでどうすれば良いか聞くわけにも行かないのでこちらに頼りに来ました。 どうかよろしく御願いします。
>>203 対象ページの文字コードに合わせて保存されるんじゃないの?
205 :
203 :2005/11/11(金) 21:57:39 ID:dSM3507Z
>>204 スクリプトとEcoBoxUを同じページで試しましたが、
EcoBoxUはS-JISになり、スクリプトはEUCになります。
んー、普通に対象ページの文字コードで保存されるけどなぁ。 GetStreamで手に入れたストリームのCharsetを対象ページの文字コードにして、 ReadTextで読み出して保存するとか。
207 :
名無し~3.EXE :2005/11/12(土) 01:44:50 ID:7/zSeljN
WSHでMicrosoft.XMLDOMを作ってDOMでXMLをいじるサンプルは見たことあるんですけど、 SAXはどうやったらいいですか? 各ノードがテキストの何行何列にあるか知りたいのでSAXならできないかと
在るオブジェクト(変数)が有って、 それがNumber型かString型か、はたまた自作クラス型かを判別するには constructorプロパテを調べれば分かりますが、 ActiveXObject型が絡んでくると思う様に判別してくれません。 String型、自作クラス型・ActiveXObject("ADODB.Stream")型・ ActiveXObject("Microsoft.XMLDOM")型等を オブジェクト(変数)から判別する良い方法は有りませんか? JScriptでバイナリを操作出来るクラスを作成していて、 メンバ関数で(疑似)オーバーロード的な事がしたいのですが…。 どなたか助言宜しく御願いします。
>>207 そもそもSAXってWindows/COM標準でサポートしてたっけ?
そうでなきゃCOM対応のSAX処理系を探してくるところから始めなきゃならないが。
>>208 COMの型を知るってのは無理じゃないかなー。
IUnknownだけしかもってないのならQueryInterfaceしかできないんだし。
それはJScript/VBScriptじゃ無理だと思う なにか他の言語で定義・実装して(COMに公開して)やらないと
HTMLでメニューを作成して、そこから目的のVBSを起動するような事をしたいのですが、 どこかにサンプル的なものないでしょうか?
>>211 え、リファレンスに WSH によるコンポーネントの作り方が書いてあるじゃん。
流し読みしたことしかないから違ってたら悪いけど、あれは使えないの?
>>213 私も流し読みしただけだが、既存のインターフェイスを実装する機能は見あたらなかった。
あくまで定義したメソッド・プロパティをCOMインターフェイスとして公開するだけっぽい。
>>214 なるほど、実装できるのは OLE オートメーション (IDispatch かな?) と、
ASP 用、DHTML Behavior 用に限定されてるみたいね。
ご指摘ありがと。ちょっと勉強になった。
んーあんま使い道なさそうだな。
216 :
203 :2005/11/12(土) 22:10:46 ID:5m+MFH8m
>>206 > Charsetを対象ページの文字コードにして、
> ReadTextで読み出して保存するとか。
やってみました。
が、FSOのCreateTextFileメソッドで作成したTextStreamに
Writeメソッドで書き込みを試してみましたが何故か保存できず、
(Writeメソッドの引数を"hoge"とするときちんと書き込めるのでコード自体に間違いは無いはず)
ExcelのVBAを使い(開発環境が無いので)
Openステートメントで開いたシーケンシャルファイルに
Printメソッドで書き込みを試みると書き込みは成功しましたが
文字化けできちんと表示されずです。
どなたかページの文字コードに依存せず、
Shift-JISのmht形式でページを保存する方法をご教示ください。
218 :
203 :2005/11/13(日) 01:22:15 ID:MRQQnkt+
>>217 Writeメソッドでの書き込みは出来るようになりました。
そのあといろんなページで試してみると、EUC-JPでも文字化けしないように保存できるページも有りました。
しかしいくつかのページではやはり文字化けしてしまいます。
具体的には
http://news.goo.ne.jp/の記事などで文字化けが起きました 。
以下が条件別の結果です。
表示 保存ファイルの文字コード
スクリプトでSaveToFile 正常 EUC
スクリプトでReadText→Write 文字化け Shift-JIS
EcoBoxU 正常 Shift-JIS
以下にコードを晒しますので、上記ニュースサイトの記事を
Shift-JISで文字化けしないように保存する方法が解る方(保存できた方)は
そのコードをここに貼るか、以下のコードの修正すべき点を教えてください。
219 :
203 :2005/11/13(日) 01:23:07 ID:MRQQnkt+
Const CdoSuppressNone = 0
Const adSaveCreateOverWrite = 2
Dim strURL, strFilePath, strFilePath2, strText
strURL = "
http:// 〜"
strFilePath = "SaveToFile.mht"
strFilePath2 = "Write.mht"
With CreateObject("CDO.Message")
.CreateMHTMLBody strURL, CdoSuppressNone
With .GetStream
.SaveToFile strFilePath, adSaveCreateOverWrite
.Charset = "EUC-JP"
strText = .ReadText
End With
End With
With CreateObject("Scripting.FileSystemObject").CreateTextFile(strFilePath2)
.Write strText
.Close
End With
ヒント:HTMLBody HTMLBodyPart
221 :
203 :2005/11/13(日) 18:02:20 ID:MRQQnkt+
>>220 Charset、ReadTextはググって解ったけど、
HTMLBody、HTMLBodyPartはググっても私の知識ではどうすればよいのかよくわからないです。
本当に出来るなら
>>218 で書いたように、そのコードを貼るか、
>>219 のコードのどこをどうすれば良いのか具体的に教えて欲しいです。
私には
>>219 が限界なので、私の望むことを本当に出来る人が居るなら、
具体的なコードの教示をお願いします。
ググる前にリファレンス読め、と思うんだけど。 馬鹿なクセに嫌みったらしいから、俺は教えてやらない。 「本当に出来る」と思えないなら、(あんたには)出来ないってことだ。
答えられない時は煽って罵っておくのが吉ってやつか "ヒント"なんて言い出すのも大抵よくわかってない場合だし ここにはバカも多いが、博識な奴も居る 待ってりゃそのうちきちんと答えられる奴も来るさ まぁバカな漏れが言うのもなんだけどw
>>219 With CreateObject("Scripting.FileSystemObject").CreateTextFile(strFilePath2)
.Write strText
.Close
End With
でなくて、
With CreateObject("Scripting.FileSystemObject").OpenTextFile(strFilePath2, 2, True)
.Write strText
.Close
End With
かもね。
なんか胸糞悪いやり取りですね。
225 :
名無し~3.EXE :2005/11/13(日) 22:58:53 ID:dLRKNiR0
>>224 追記。だめだった。
昔RSS用にShift-Jisを変換しようとして随分困った覚えがある。
結局、BASP21で解決した。
ADODB.Streamは?
できるよ
> 「できる」と言葉で言うのは簡単 > 例え実際には出来なかったとしても > やり方を知らなかったとしても > 「できる」と言うのはいくらでも言える > > そして口先だけだろと指摘されても > 本当に出来るけど教える義理はないとか > 態度が気にくわないから教えないとか誤魔化すことも簡単 > > ちょっとした知識が有れば、実際のやり方は知らなくても > 使われそうなキーワードを引っ張ってきてヒントだのなんだの言って > いかにも「俺はできる」という素振りを見せるのもそう難しくはない > > 本当に"できる"奴(知識だけでなく人としても)は > できるだのなんだの口先で言う前に、形を提示する > > 口先だけで「できる」と言う奴の80%は、実際のやり方を知らず > 5%は「できる」ということ自体が嘘であり、 > 残り15%は現実世界での劣等感から、こんなところでさえ > 少しでも優位に立とうとするあまり、情報の出し惜しみをする哀れな奴 > つまり、形にせず口先だけで「できる」という奴にまともなのは0%ってことだ
203=229 こんな偉そうな教えてちゃんは初めて見たw
var m=new ActiveXObject("cdo.message"),s=new ActiveXObject("adodb.stream"),uri="
http://news.goo.ne.jp/ ",file="output.mht";
m.createmhtmlbody(uri,0);m.bodypart.charset="shift_jis";s.open();s.charset="shift_jis";s.writetext(m.htmlbody);s.position=0;m.htmlbody=s.readtext(-1).replace(/charset=euc-jp/i,"charset=shift_jis");s.close();m.getstream().savetofile(file,2);
232 :
228 :2005/11/14(月) 15:53:01 ID:E3JkDTc6
ISPが規制されててさ。 ADODB.StreamとCharsetでぐぐればサンプルが拾える。
>>229 「〜を〜する事は出来ますか?」と訊かれて、あなたはどう回答する?
質問者は出来るか否かを訊いているのであって、その方法までは聞いていない。
つまり、回答者はそれが出来ると思えば「出来る」と答え、出来なければ「出来ない」
と答えればいいのだ。それが質問の意図で、それら以外には答えようが無いのだ。
あえて拡大解釈してまで、その方法を教える必要性がどこにある?
繰り返すが、質問者はその可否を聞いているのである。
質問者は可否以外の回答は望んでいないのである。
それ以外を望むなら、質問の仕方としては上記の訊き方では不適切ではなかろうか。
234 :
203 :2005/11/14(月) 20:21:51 ID:4RjB2Ewo
>>231 ありがとうございました。
.jsで実行して完璧な結果が得られたので
vbsに書き換えて使わせていただきます。
どうもお世話になりました。
235 :
名無し~3.EXE :2005/11/15(火) 10:02:57 ID:hfnN6PNe
キャレットの速度を変えたいんですが、 HKEY_CURRENT_USER\Control Panel\Desktop\CursorBlinkRate を弄っても何故か変更されません。 レジストリエディタから変更しても無理なので仕方ないのかもしれませんが。 コントロールパネルから変更すると適用されるみたいで。 他に方法はないでしょうか?
そうなるとDynaCallでSetCaretBlinkTimeを呼ぶ、 或いはSetCaretBlinkTimeを実行するCOMを作るしか無いんじゃないかな
>>236 自分にはちょっと敷居が高いです・・・。
それでもプログラマーかっ
ここってプログラム技術板だっけ?
上手くいかないので無駄レスだけどrundll32でいけそうな気がして試してみた。 var WShell = WScript.CreateObject("WScript.Shell"); // 点滅しなくなる。数値を変えても同じ。 WShell.Exec("rundll32.exe user32.dll,SetCaretBlinkTime 200"); // エラーになる WShell.Run( "rundll32.exe user.exe,SetCaretBlinkTime 200" );
242 :
235 :2005/11/15(火) 22:43:47 ID:hfnN6PNe
>>238 スクリプト初心者です・・・
>>240 再起動せずに変えたいのです
上では書き忘れましたが、WinXP SP2です
>>241 私にはDLLのことはさっぱりなのでおまかせするしか・・・
よろしくお願いします
質問なんだけど WSHでZIPの個別圧縮を作ろうと思ったらできる物かな? zip.dllみたいなのを利用してたくさん放り込んだファイルを 全部それぞれでzipにするかんじなんだけど。 できるならヒントください。
>>243 >>「たくさん放り込んだファイル」
は無理。
コマンドラインに制限がある。
圧縮なら
統合アーカイバプロジェクトとかにcomがあるし
exe呼び出してもいいし、
ADODB.Streamで自前で圧縮してもいいよ。
>243 D&Dで圧縮してくれるEXEファイルに引数で渡したら? objWshShell.Run """C:\Program Files\Lhaplus\Lhaplus.exe"" /c:lzh " & strFilePath ってかんじで。
何もWSHを使わなくてもバッチファイル(というかコマンドライン)で出来るような。 まあ別にWSHからプロセス起動でもいいけど。
>>241 まあ凄い脇道レスだけど、うまくいかないのは200が文字列と解釈されてそのポインタが渡されてるせい。
点滅しないんではなくて極度に大きい値になっちゃってる。
248 :
名無し~3.EXE :2005/11/16(水) 11:38:40 ID:8WL8rmYa
とあるAPPのテキストボックスに文字を表示させることはできますか?
IEならともかく、普通のアプリじゃほぼ無理。WSHでやることじゃないし。 あとAPPとか微妙な略称は止せ。
>>244 >>245 ありがとです。なんとかがんばってみます。
一個一個右クリック→ZIP(ショートカット)は大変・・・
>>250 拡張子を含まないファイル名が重複しないんだったら、コマンドラインで
for %1 in ( * ) do zip %~n1 %1
で済ませちゃダメ?
zip.exeはInfo-Zipを拾ってくるとして。
同じディレクトリに同じファイル名があるなら(index.htmlとindex.datとか)
別の方法を考えることになるけど。でも極端な話
for %1 in ( * ) do zip %1.zip %1
としてもいいわけでしょ。index.htmlをindex.html.zipにするのが嫌でなければ。
>>251 ありがとうございます。
目的は同じディレクトリにある名前がかぶらない3つのWMVファイルをzipにする事です。
ディレクトリ自体はいっぱいあります。
理想はある親ディレクトリ以下のWMVをその場所ですべてZIPにする事ですが
似たような動作のスクリプトがあればそれを基に作ってみたいです。
意味はわかりませんがfor %1 in ( * ) do zip %~n1 %1でできるかもしれないです。
ん? 3つのWMVファイルとやらを3つのzipファイルにするの? それとも、3つのWMVファイルを1つのzipファイルにするの?
すいません、エクスプローラ上でスクリプトにJPEG画像をドラッグ&ドロップすると BMP形式に変換してファイルに保存したいのですが どうしたらできるんでしょう?
>>254 wshじゃ無理。(APIとか使えば話は別だが)
普通にコマンドライン型の画像処理ソフト使え。
引数指定したショートカットファイルでも作っておけば、
D&Dで処理出来るし。
ImageMagickってActiveXになってないのかな まあコマンドラインでいいだろ
257 :
254 :2005/11/18(金) 10:50:30 ID:xmC2DayN
>>253 個別にZIPです。根本的にわかってないので、探してもなかなか光が見えてこない・・
zip.exeを落として、batファイルにfor %1 in ( * ) do zip %~n1 %1と書いて保存しても動かないよぅ。
フォルダに
001.wmv
002.wmv
003wmv
001.txt
002.txt
001.jpg
というのが入っていて、フォルダを放り込んだ際にwmvだけzipにする、これだけの作業なら
フォルダの中身を調べる→(拡張子認識→zipに渡す→同じところに出力)→終わり
の単純な反復だから難しくなさそうなのにVBscriptだと分かりにくいっす。
こういうのって誰も必要としない作業なんだろうか・・・
というかbatで済ますことだから。batで書くなら for %%a in (%1\*.wmv) do "zip.exeのパス" %%~na %%a って感じになるのかね。zip.exeのコマンドライン引数とか知らないけど。 WSHでやるとなるとScripting.FileSystemObjectを作って、 GetFolderしてGetFilesしてGetExtensionNameで判断して、 WScript.Shellを作ってそれぞれRunってことになるのかな。
動かしてみてないからうまく動かないかもしれんがな。 set objArgs = Wscript.Arguments 'WshArgumentsオブジェクトを作成 set objFileSystem = CreateObject("Scripting.FileSystemObject") 'ファイルシステムオブジェクトを作成 set objTrgFol = objFileSystem.GetFolder(objArgs.Item(0)) if err <> 0 then WScript.Quit end if strTrgExt = "wmv" strPutPath = """C:\Program Files\Lhaplus\Lhaplus.exe"" /c:zip " sub_BackupFol objTrgFol, strPutPath msgbox "complete!" set objWshShell = nothing set objFileSystem = nothing 'end 'sub sub sub_BackupFol(objTrgFol, strPutPath) for each f in objTrgFol.SubFolders sub_BackupFol f, strPutPath & "\" & f.name next for each f in objTrgFol.Files if objFileSystem.GetExtensionName(f.Name) = strTrgExt then objWshShell.Run strPutPath & objTrgFol & "\" & f.Name end if next end sub
亀だけど
>>130 を使って読み込んだiniファイルの同一項目下に同じキーが複数ある時は、
↓ こんなの。
[386Enh]
device=…
device=…
this.readFromFile下のaddメソッドからエラーが出るよね。 → this.secDic.item(section).add( [key], [item] );
同じ文を何度も追加しない為の処理には引数[item]も用いてthis.setあたりで条件判定するとして
同一項目下に同じ引数[key]が2つ以上あるところを指定した時だけは値を書き換えずに、
新たに追加するような形を取りたいのなら、Dictionaryオブジェクトを使うこと自体を諦めるしかないのかな?
前スレ見られないから、既出だったらスマソ
>>261 エラー処理がないのは怠慢です。
iniファイルって一つのsectionに同一keyが二つ以上存在してもいいのね。
知らんかった。
this.readFromFileのkey追加部分を↓に書き換えると \n で区切って連結。
でも、get後、複数の値が連結されているかどうかを自前で判断しなきゃ駄目。
getも書き換えて、連結されているときは配列で返した方がいいかな?
if ( line.match(/(.+?)\s*=(.*)/ig) ) {
var key = RegExp.$1, val = RegExp.$2;
if ( this.secDic.Item(section).Exists(key) )
this.secDic.Item(section).Item(key) += "\n" +val;
else this.secDic.Item(section).add( key, val );
} else以下略
横から失礼。 ほんとは駄目だよ>一つのsectionに同一keyが二つ以上存在 APIのGetProfileStringも同一keyは想定してないし、 WriteProfileStringでそういうデータは書き込めないしね。 INIファイルっぽい形式を採用したINIファイルでないものってのが正しいかと。
u y s o h
265 :
名無し~3.EXE :2005/11/26(土) 17:19:44 ID:0ArwYA27
すみません、教えてください。
例えば
var ie = new ActiveXObject("InternetExplorer.Application");
ie.Visible = true;
ie.Navigate('
http://www.example.com/index.html ');
で訪問したページに
<script>window.open('hogehoge.html')</script>
というポップアップがあったとします。
このポップアップした新しいウィンドウを
スクリプト内の何らかの変数に捕獲したいのですが可能でしょうか?
ご存じの方、ぜひご教示ください。
266 :
265 :2005/11/26(土) 18:40:09 ID:0ArwYA27
Shell.Applicationで自己解決しますた。すんまへん。
268 :
名無し~3.EXE :2005/11/27(日) 00:32:37 ID:vL3/sK3X
クリップボードに変数(A)の値をわたしたいんだが、いい方法ある?
IEオブジェクト使うとか。
TVガイド(
http://www.tvguide.or.jp/signin.html )にログインする部分なのですが、
IDもパスも合っているのに入力情報が正しくありませんと怒られます。
以下スクリプトのどこがおかしいのか、アドバイスをお願いします
var sURL = "
http://www.tvguide.or.jp/cgi-bin/signin.cgi ";
var strDATA = "id1=1111&id2=2222&password=hogehoge";
xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.4.0");
adTypeBinary = 1;
adSaveCreateOverWrite = 2;
TmpPath = "hoge.html";
xmlhttp.Open("POST", sURL, false);
xmlhttp.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded");
Stream = new ActiveXObject("Adodb.Stream");
Stream.Type = adTypeBinary;
Stream.Open();
xmlhttp.Send(strDATA);
Stream.Write(xmlhttp.responseBody);
Stream.SaveToFile(TmpPath, adSaveCreateOverWrite);
Stream.Close();
とりあえず、パスワードのname属性はpasswdのようだな。
>>271 有難うございます。上手くいきました。俺がアホでした・・・
273 :
268 :2005/11/27(日) 16:58:03 ID:szDlVVbL
てすと
すでに立ち上がってるIEから<textarea />タグを見つけ出して、 テキストを取り込んだり、書き込んだりするにはどうしたらいいですか?
その一連の流れのどの部分を聞きたいんだ
IEからページのソースを取得する方法と IEにソースを書き込む方法?
1 すでに立ち上がってるIEを探す 2 IEのDOMからtextareaを探す 3 textareaの文章を取得、書き換え 2、3はなんとかできそうなのでまず1をお願いします。
>>275 出来上がってる部分のコードをここに全て貼って、
何処が解らないのかをきちんと示そう
それが出来ないならさようなら
>>279 1 すでに立ち上がってるIEを探す
ここから分からないのでなんとも
var ieApp = new ActiveXObject("Internet.Application");
Shell.Applicationオブジェクトを使う
>>281 Windowsプロパティを使うのですね
ありがとうございます。
284 :
名無し~3.EXE :2005/12/02(金) 19:59:11 ID:UwskNlKS
指定したディレクトリ以下のWMPで評価が星4か5のメディアファイルを列挙して index.m3uを作りたいんですが 星の数を取得するのってどうやればいいんですか?
UserRating か UserEffectiveRating でいいんじゃない?
286 :
名無し~3.EXE :2005/12/03(土) 09:04:25 ID:GpFD93Gm
3000円は高すぎたろw 俺が同じようなソフトウェア作って無料で配布したろか? こんなのプロトコル知ってりゃ、すぐに作れる
>>288 よろしくお願いします。
ぜひ、フリーでお願いします。
>>286 なでしことWSHだけでほぼ同等の機能を実現できる罠
>>290 実現方法の詳細を、よろしくお願いします。
プログラムの作者に連絡してみたところ 悪質な荒らし依頼っぽいなこれ。 これ以上続けるようなら荒らし依頼ってことで削除依頼出しますよ>>ID:GpFD93Gm
作者乙
>>292 荒らしだなんて失礼ですね。
私は、優秀な
>>290 さんに実現方式を聞いているだけですよ。
お金をかけなくて、簡単に実現できるのであれば、それに越したことはないし。
それのどこが荒らしなのですか?
メールで、PCに命令を送る処理が必要だったから、たまたまJavaScriptが使えるツールを見つけたので、
どんなものなのか、誰かに評価してもらおうと思ってURL貼り付けたのが、荒らしなのですか?
てゆうか、あなた、わざわざ作者にメールしたのですか?
あなた、このスレの支配者気取りですか?
WSHじゃないスレでやれ
どっちもうぜーよw
297 :
290 :2005/12/04(日) 00:11:19 ID:Zeq1U6Vg
>>294 なでしこはメール受信の命令があらかじめ用意されている。
ループでメール受信を繰り返させて、本文にVBSやJScriptが記述されたメールを受信したら
本文をテンポラリフォルダあたりに吐き、それを実行するように組んでやればいいだけのこと。
メールから特定のプログラムを実行させたいたけならWSHすらいらんしな。
これ以上はほかのスレで聞け。
> 優秀な
>>290 さんに実現方式を聞いているだけですよ。
嫌味キタ━━━━(゚∀゚)━━━━ッ!!
>>GpFD93Gm以外
スマソ
>>298 それのアンインストールのやり方教えてくれ・・・
xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.4.0");
adTypeBinary = 1;
adSaveCreateOverWrite = 2;
Stream = new ActiveXObject("Adodb.Stream");
xmlhttp.Open("GET", "
http://www.2ch.net/ ", false);
xmlhttp.Send();
var src = xmlhttp.responseText;
WScript.echo(src);
WScript.Quit(0);
上記のようなUTF8以外のURLのソースを取得する際には
どうすれば文字化けを防げるでしょうか。よろしくおねがいします。
>>301 ありがとうございます。
ADODB.Streamを使って一度ソースの入ったファイルを作らなければいけないと解釈したのですが、
取得したソースを一度ファイルに落とさずに文字化けを防ぐことは可能でしょうか。
>>302 >>270 最後SaveToFileせずに、
位置を先頭にしてTypeをテキストにして妥当なCharset設定してReadText
304 :
208 :2005/12/10(土) 11:58:47 ID:x8t7p5nr
JScriptでバイナリを操作出来るクラスを作ってた物です。
その節は御世話に成りました。
で、作ってたクラスがそこそこ使える様に成ってきた(と思う)ので、
取り敢えず晒してみます。
http://www.eonet.ne.jp/~eral/blog/20051210_CBinary.js.txt 上手く使えば文字コードの変換なんかも出来る様に成ってるんですが、
実用に耐えられますかねぇ。
使い勝手の報告やバクを発見してくれると有難いです。
>>300 CBinaryクラス使うと下記な感じで。
//--get_html.wsf------------------------
<?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?>
<package><job>
<script language="JScript" src="CBinary.js"/>
<script language="JScript"><![CDATA[
var cbnObj = new CBinary();
cbnObj.LoadText("
http://www.2ch.net/ ", "Shift_JIS");
var src = cbnObj.ReadText();
WScript.Echo(src);
]]></script></job></package>
//--End of get_html.wsf-----------------
>>304 どうでもいいが、Adosやら_MakeIndexやらが外から見えるのは仕様?
>>303 var sURL = "
http://www.2ch.net/ ";
var adTypeText = 2;
Stream = new ActiveXObject("Adodb.Stream");
Stream.charset= "x-sjis";
Stream.type = adTypeText;
xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.4.0");
xmlhttp.Open("GET", sURL, false);
xmlhttp.Send();
Stream.Open();
Stream.WriteText(xmlhttp.responseText);
Stream.position = 0;
var src = Stream.readText();
Stream.Close();
WScript.echo(src);
WScript.Quit(0);
すみません、結局ヘルプです。これではやはり文字化けするのですが、
どこがおかしいのかご指摘お願いします。
>>306 >270のどこに
> Stream.WriteText(xmlhttp.responseText);
こんなのが書いてある。
>>307 どうも。どうにか行けました。ありがとうございました
309 :
299 :2005/12/14(水) 14:34:18 ID:lmmzEgAK
自己解決しました IEのインターネットオプションの詳細設定で スクリプトのデバッグを使用しないにチェック入れると元のエラー表示になりました
ぐぐってもそれらしいものが出てこなかったので質問します。 WSHのVBScriptで MySQLを起動→パスワードを入力→use データベース名→delete from テーブル名→ load data infile "import2.txt" into table データベース名.テーブル名 fields terminated by ',' lines terminated by '\r\n'; →exitでMySQL終了 といったことをやりたいのですが実現可能でしょうか?
はい
312 :
名無し~3.EXE :2005/12/21(水) 14:00:40 ID:HqDTIdQE
あるwebページ(3つ)を印刷するスクリプトと あるExcelファイルの決まった2箇所の数値を1増加させて シート2を1枚、シート1を3枚自動で印刷するスクリプトを作りたいのですが それぞれどんな命令が必要でしょうか? とりあえず、簡単そうなwebページの印刷は ブラウザをURLを指定して立ち上げる命令 それを印刷する命令 ウインドウを閉じる命令 でOKだと思うのですが 印刷する命令がよくわかりません。 どうすれば良いでしょうか?
>>312 印刷の方は
>>313 見ればわかるな
数値を増加させる方法は、Excelのインスタンス作った後は
VBAと同じだから簡単でしょ
これで解らなければ、2,3日は自分で調べてから
自分で書いたものをここに貼って再質問しな
すぐに「わかりません」とか書いてくるなよ
315 :
312 :2005/12/21(水) 15:35:24 ID:HqDTIdQE
webページの印刷は結局SendKeysでやりました。 Excelの方は数値の増加をSendKeysでやる方法が思いつきません。 SendKeysで自動的に決まったセルの数値を1増やす方法ないでしょうか?
317 :
312 :2005/12/21(水) 20:25:50 ID:HqDTIdQE
両方満足なものが出来ました。 SendKeysだけで何でもできるじゃん。
よかったね
319 :
名無し~3.EXE :2005/12/23(金) 02:35:43 ID:1Oez9SST
SendKeysは運がよければ何でもできるけど、確実なことは何もできない。 まあそれでいいんならいいんじゃない。 AppActivateと組み合わせれば意外と正確にいくこともあるし。
力技で済まそうとするうんこ君はどこにでもいるんだな。
インスタンスなんて基本的な考え方も分からない
>>312 には sendkeys がお似合いだ。
きっと君にもそいつと決別する日がくる そんなsendkeys
322 :
312 :2005/12/24(土) 01:26:01 ID:G4/YzIqV
クスクス
自分で一から調べてお手上げ……皆さんのお力借ります。 結局 wsh でキー情報を取得することは出来ないのでしょうか? やりたいことは,TeraPad で DoMaco を使ったインクリメンタル検索。 wsh はほとんど初心者で,GetKeyState のような関数もないし, 調べれば分かるだろうと思ったら,丸1日経ってしまった……。 さっき,やっと DynaCall というのを見つけ,Win32API が 使えそうだと分かったが,この辺の文献が少なすぎというか, こういった事例を見つけれなくて。 引き続き調べてますので,みなさん,よろしく。
325 :
323 :2005/12/31(土) 14:27:51 ID:qowRyxGQ
>>324 すんません。
○ DoMacro
× Domaco
でした。
とりあえず,DynaCall で GetAsyncKeyState が使えました。
第一段階を突破したので,あとは早そうです。
ただ,キー取得のために,
while (true) {
// ここで取得処理
}
としているので,若干怖いのですが。
でも DoEvents() がなくても,とりあえずは見かけは大丈夫でした。
引き続き続けます(実家に帰らないと……。)。
326 :
323 :2005/12/31(土) 14:31:27 ID:qowRyxGQ
すんません。 ○ DoMacro × DoMaco ~ でした。 ……ぜんぜん大丈夫じゃなかった。CPU使用率がものすごいことに。
327 :
323 :2006/01/02(月) 00:54:51 ID:UUSDeZK4
とりあえず,TeraPad でインクリメンタル検索ができるようになりました。 とりあえずというのは,かなり強引で……。 1.検索しようとすると,TeraPad 内に文字が入力されるのを回避するため デスクトップを SetForegroundWindow 。 2.DoMacro で Select をして文字列を選択しても,ウィンドウがスクロール しないために,また,その直前に TeraPad を SetForegroundWindow 。 3.検索が終わっても,TeraPad がアクティブにならない……できない。 また強引に Alt-Tab をしようとしたけど,さすがにやめた。 4.CPU が,ものすごいことに。Peek とか Translate とか未実装。 今は,劣悪環境 Win98SE なので,これ以上はやめた。XP では,動作も 変わってきそうだし,また,とりあえずできることがわかったら, 急にやる気がなくなった……もともと,力試しのつもりでやったし。 作るんだったら,本職の C++ で外部ツールででも。 今回は WSH(JScript) の勉強になりました。
おお中々面白い玩具だ
MSにもユーモアの精神があったんだな
スクリプトセンターの文章のギャグセンスが受けつけない
俺はアメリカンジョーク好きだけどなあ。くだらなくて。 まあ、人それぞれだからね。 時々理解できないのもあるけど、本題とは関係ないから困らない。 scriptmaticはWMIのサンプルスクリプト生成だよ。 そのまま走らせて結果をテキストに出せるから、結構手間が省ける。 用途によってはなかなかお役立ち。
それは今更過ぎ、だが知らん人も多いのかな
確かに今更過ぎだな。 デコーダも有るから暗号化としてほとんど役に立たないし。
サービスを有効にして起動させるvbs書いたんだけど regwriteで値を変更してrun sc start ってのじゃ 変更したレジストリが反映されてなくて起動できない。 (起動時に無効のため) 一度services.mscから自動に変更してやればあとは問題ないんだけど なんかスマートな方法ないでしょうか?
sc config start= autoですむ話じゃないの?
344 :
339 :2006/01/13(金) 01:29:56 ID:IHKCJMGY
>>342 ありがとう!
さらに完璧にできた!
ってscでできたのかよ・・俺って・・
var WShell = WScript.CreateObject("WScript.Shell"); var objArgs = WScript.Arguments; var fs = WScript.CreateObject("Scripting.FileSystemObject"); for(var i = 0; i < objArgs.length; i++){ var path = objArgs(i); WShell.Popup(path,1); var fi = fs.GetFile(objArgs(i)); var f = WScript.CreateObject("Scripting.FileSystemObject").getFile(path); f.name = "(何か文句ある?)"+ (fi.Path).substring((fi.Path).length - (fi.Name).length) ; }
・ちょっと括弧多すぎ。(fi.Path).lengthには括弧いらんだろう。 ・いちいちCreateObjectするなよ。何のための冒頭でのfs初期化だよ。 ・いちいちsubstringする意味が一体どこに?
>>345 fso = new ActiveXObject("Scripting.FileSystemObject")
for(i=0;i<WScript.Arguments.length;i++){
WScript.Echo(path = WScript.Arguments(i));
f = fso.getFile(path);
f.name = "(何か文句ある?)"+f.name;
}
WShell.Popup();はわざわざWScript.Shell作らなくてもWScript.Echo()で出来る
fに代入するときにもう一度FileSystemObjectを作るのが意味不明
substringしなくてもfi.Nameだけでいい
他、突っ込みどころ多数
> WShell.Popup();はわざわざWScript.Shell作らなくてもWScript.Echo()で出来る この突っ込みは間違い。 Popupメソッドの第二引数を省略してる場合の動作はWScript.Echoで代用できるけど 第二引数を指定してる場合の動作はWScript.Echoでは代用できない。 ご注意あれ。
そういえばfso.getFile().nameに代入するとリネームできるのか 初めて知った 今までfso.Move()でやってた
で結局345は何を言いたかったんだ?
「何か文句ある?」
いえ、別に
動けばイイと思って作ってみましたが wsh 人口って少ないって思っていましたが意外な多くの方からツッコミを頂きありがとんでした。 いい訳と反省点はスレが汚れるので省略ネ。
少ない分濃い
サンプルを集めまくって組み合わせたりしているとああいう無駄なソースになるよね
ソースの無駄な部分の多さは、作った奴がどれだけ理解しているかに反比例するわけだな。
そうす。
まあ、あんまり理解してなくても、それなりに使えるのがスクリプトのいいところだけどな。
いまどき理解しないで実行はやばいんじゃない? なにが仕込んであるかすぐ分かるのがスクリプトのいいところでしょうが
SendMessageは呼べるんですか?
>>360 標準では呼べないけど、呼ぶ方法はある。
362 :
360 :2006/01/19(木) 01:19:05 ID:XNJfOs1w
なにその楽天祭り
1 って何かと思ったらIEの識別子? 最近はすっかりオブジェクト指向なもんだからなぜ存在するのかさっぱりわからなかったよ ところで識別子は普通CreateNewのとき返値で返すもんじゃないのか?
366 :
363 :2006/01/23(月) 03:46:53 ID:XxAS+4Jh
367 :
363 :2006/01/23(月) 03:58:44 ID:XxAS+4Jh
解決しそう hideでバックグラウンドで動くんだね ググってもマニュアルどこにあるか解らないから 直感で試行錯誤してるんだけど どっかにリファレンスないの? 俺は無駄に時間を過ごしてるな・・・
368 :
363 :2006/01/23(月) 04:06:39 ID:XxAS+4Jh
>>359 誰も実行とは言うとりゃせんがね。
よく理解してなくてもコピペでそれなりに動くものが作れると言ってる。
>>347 みたいにね。
>>363 のやろうとしてることがイマイチわからん。
IEを2つ開いて1つだけ閉じるってこと?
1つ開いて1つ閉じる感じのスクリプトだけど 元から開いてたのを閉じるとかはやめてね って事だと思ってた
>>363 こうかな?
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "IEXPLORE.EXE
http://yahoo.co.jp/ ",6
WshShell.Run "IEXPLORE.EXE
http://www.google.co.jp/ ",6
WScript.Sleep 1000
Set colWindows = Wscript.CreateObject("Shell.Application").Windows
For Each objWindow In colWindows
Do While objWindow.Busy
WScript.Sleep 1000
Loop
If objWindow.LocationURL = "
http://yahoo.co.jp/ " Then
Set ie1 = objWindow
ElseIf objWindow.LocationURL = "
http://www.google.co.jp/ " Then
Set ie2 = objWindow
End If
If IsObject(ie1) and IsObject(ie2) Then
Exit For
End If
Next
For Each strURL In Array("
http://ja.wikipedia.org/wiki/ ","
http://slashdot.jp/ ")
ie1.Navigate strURL
WScript.Sleep 1000
Do While ie1.busy
WScript.Sleep 1000
Loop
Next
WScript.Sleep 5000
ie1.Quit
最小化にこだわってみたけど、これじゃ前から同じURLを開いてたら閉じちゃうか。
>>368 最小化じゃないけど
Ie1.Width=0
Ie1.Height=0
にしておくとか
374 :
372 :2006/01/29(日) 02:26:59 ID:yi7TFNRL
375 :
363 :2006/01/29(日) 09:39:08 ID:G5I4B621
私もライブ○アみたいなIT企業の社長になれるんですね!
378 :
372 :2006/01/30(月) 18:56:18 ID:DDrlE5m4
すみません、ちょっと教えて下さい。 WSHを使って、他のマシンにダイアログメッセージを 表示させる事って出来るんでしょうか? 他のマシンは、同じWindowsドメインに加入しているという 前提で構いません。
net sendとかを使うようWSHのスクリプトを組むとか他にも色々あるんじゃないかな
>>380 あぁ、そっか、WSHからnetコマンドを起動すれば良いんですね。
WSHのオブジェクトばっかり探してました。
ありがとうございます。
382 :
名無し~3.EXE :2006/01/31(火) 14:13:27 ID:DqFH/QKy
383 :
名無し~3.EXE :2006/01/31(火) 14:43:40 ID:2+UfwG4e
ActiveX DLL OCXをレジストリに登録することなく使う方法を 以前どこかで見たのですが失念してしまいました。 自機では普通に登録して使ってるのですが、USBメモリで持ち歩いて使いたいものがあり、 レジストリを弄れない場合に困ってます。 元に戻せばレジストリ弄っても構わないて場合なら、スクリプトで登録しちゃうのですがそうもいかなくて。 具体的な方法、または解説サイトをご存じの方が居りましたらどうかご教示ください。
385 :
383 :2006/02/02(木) 12:37:04 ID:FLSJQQE0
>>384 情報ありがとうございます。
・・・しかしmanifestファイルだと、実行ファイルにしか適用出来ませんよね。
システムにwscript.exe.manifestをインストールするわけにもいかないので
スクリプト単位で適用する方法が無ければmanifestファイルを使う方法は
失礼ながらNGです。
記憶ではスクリプトの内部記述で何かやってたような気がするのですが。
引き続きよろしくお願いします。
GetObjectすればいいじゃん?
387 :
383 :2006/02/03(金) 07:09:51 ID:QQ8itX7C
>>386 GetObjectって、DLL OCXを指定するんじゃなくて、
オブジェクトに読み込むファイルを指定するものじゃないんですか?
例えばExcelのブックインスタンスを作るのに
CreateObject("Excel.Application")
.Workbooks.Open("〜\Book1.xls")
とやらずに、
GetObject("〜\Book1.xls", "Excel.Sheet")
で直接インスタンスを作るとか。
一応dllを指定してみたけど、結果はエラーでした。
GetObject("〜\AutoItX.dll", "AutoItX.Control")
> エラー:ActiveX コンポーネントはオブジェクトを作成できません。: 'GetObject'
ちなみに登録してあれば「 GetObject("", "AutoItX.Control") 」で正常に使えます。
「(Set OR var) GetObject dll」でググってもみましたが、GetObjectの引数に
dllを指定しているものは見つかりませんでした。
GetObjectで本当に登録していないActiveXを使えるなら
vbsでもjsでもいいのでサンプル書いていただけないでしょうか?
これが不可能なら引き続き情報を待ちます。よろしくお願いします。
レジストリ登録は検索のためだけだよねえ。 Path通すとかw
389 :
383 :2006/02/04(土) 09:23:14 ID:uzdOns+A
>>388 Path通すこと自体レジストリを使うのでNGですが
自機で試したところ、Path通してもダメでした。
390 :
タスケテクン :2006/02/05(日) 00:27:04 ID:TQ5ur8kx
すまん。 BATなんだが、XPで ・ダブルクリックすると正しく実行できない ・CMD.EXEから呼べば正しく動く ・デスクトップに置くと正しく実行できない という状況。正しく実行とは、1〜4までカウントすること。 正しく実行できないとは、実行するといきなりPAUSEで終わる。 おまいらの環境でどうよ!? ーーーーーー怪BAT------------------------- @ECHO OFF GOTO _MAIN 1 2 3 4 5 :_MAIN FOR /F "skip=2" %%I IN (%0) DO CALL :_TEST %%I GOTO _END :_TEST IF %1==5 EXIT ECHO %1 :_END PAUSE ーーーーーーーーーーーーーーーー-------------------
391 :
名無し~3.EXE :2006/02/05(日) 00:31:13 ID:wqX987LJ
スルー
392 :
タスケテクン :2006/02/05(日) 00:34:03 ID:TQ5ur8kx
スルー嫌。
スレタイもう一度見て帰れ
みなそんなに毛嫌いしなくても…。確かにスレ違いだが。
>>390 ダブルクリックだと %0 がダブルクォーテーションで囲まれ、ファイル名
でなく文字列として扱われる。
かといって %~0 などとクォートをはずすと空白入りのパスでNGだから
usebackq を組み合わせて使う。
あとは FOR のヘルプ見て勉強。
395 :
タスケテクン :2006/02/06(月) 22:59:39 ID:9FwmQsVW
>394 ありがとう
396 :
タスケテクン :2006/02/06(月) 23:05:56 ID:9FwmQsVW
>394 %~fs で動作確認OKでした。感謝!
ーと-が混ってるのが何とも
398 :
名無し~3.EXE :2006/02/06(月) 23:33:31 ID:PAMxrxZu
日本人にありがちなこと
399 :
名無し~3.EXE :2006/02/09(木) 23:59:06 ID:/4sGmEAj
"(ダブルクウォーテーション) を変数に文字列として格納したいんですけど、 特殊文字を特殊文字として扱わずに変数に格納する方法はありますか? やりたいことは以下のような感じです。 --- dim objshell dim work_day dim exec_script work_day = mid(date,3,2) & mid(date,6,2) & mid(date,9,2) exec_script = "cmd.exe /c test.vbs" & work_day set objshell = createobject("wscript.shell") objshell.run(exec_script) -- objshell.run で指定する流したいスクリプトを格納する際ダブルクウォーテーションがないとエラーになってしまいます。 しかし、ダブルクウォーテーションがどうしても格納できません。 >objshell.run("cmd.exe /c test.vbs 060209") のようにすべて固定でダブルクウォーテーションをいれるとうまく処理は動きます。 初歩的な質問ですが、ググっても答えが出ませんでしたので、ご教授願いたいと思います。
400 :
名無し~3.EXE :2006/02/10(金) 00:31:05 ID:C1LgYiKy
えすけーぷ
401 :
名無し~3.EXE :2006/02/10(金) 00:33:07 ID:9XqNJ9mu
"cmd.exe /c test.vbs" & work_day だとwork_dayが060210の場合に、 "cmd.exe /c test.vbs060210" となるからエラーになんじゃない? "cmd.exe /c test.vbs " & work_day じゃだめ?
cmd通す必要あるの? 普通cscript.exeじゃない?
chr(&h22)
"""
405 :
345 :2006/02/10(金) 18:52:00 ID:QMvupBI6
test.vbs をクリップボードに格納された文字列を処理するように作り変えるとか。
dim objshell dim work_day dim exec_script work_day = mid(date,3,2) & mid(date,6,2) & mid(date,9,2) exec_script = "cmd.exe /c test.vbs " & chr(34) & work_day & chr(34) set objshell = createobject("wscript.shell") objshell.run(exec_script)
exec_script = "cmd.exe /c test.vbs """ & work_day & """" でもいける。 文字列中の"" は " に展開されるから。 "を1文字だけ指定したいときは """" になる。なんかマヌケだ。
sakura時計みたいにntpサーバに同期させる事をしたい wshからcmd起動させて net time /setsntp:ntpサーバ名 net stop w32time net start w32time とか試してみたけどあんまり関係ないコマンドだった・・・
409 :
408 :2006/02/12(日) 05:40:07 ID:k/4DAaDb
無理そうだったら諦めて tcsntp.exe /silent
410 :
399 :2006/02/12(日) 09:40:21 ID:6O3LbXj4
解決しました。 一番手っ取り早いのが chr(&h22) でした。 各種回答助かりました。 >""" わらた >クリップボード 処理煩雑杉・・・
え?
413 :
名無し~3.EXE :2006/02/12(日) 14:35:12 ID:r0XwcI1i
え?って言う
え?って言う。と言う
eval(print("ほしゅ");function print(s){Wscript.Echo(s+"\r\n!");});
>>416 行:1
文字:18
エラー:')' がありません。
コード:800A03EE
ソース: Microsoft JScript コンパイル エラー
418 :
名無し~3.EXE :2006/02/15(水) 19:47:29 ID:uuweQD+M
>>417 実行したんかい!
eval の中は文字列じゃないといけないので恐らく
eval("print(\"ほしゅ\");function print(s){WScript.Echo(s+\"\r\n!\");}");
>>418 200字ぐらいのマジレスを書いたが長すぎるのでやめにして、「それが青春だからさ!」
\r\nはそれぞれエスケープが必要だな。 そうじゃないと WScript.Echo(s+" "); なんてコードになる。
print("ほしゅ");function print(s){WScript.Echo(s+"\r\n!");}
文字列の末尾に書く場合なら3つだが、(先頭に一つあるので) これだけを書く場合だと4つ書かなくちゃダメだね。 404にはそういう説明も無いし。
"""この表記はなんとかならんのか?"""
"\"そうは言っても一般化してるとはいえこの書き方も煩わしい\""
WScript.Echo('"JScriptならこう書いたり"、' + "'こう書いたりできる'。");
ちょっと質問です。 JScriptにはVBのInputBoxみたいなのないんですか? prompt()って、jsファイル直では使えないみたいなんですが?
無いな。 wsfにして呼び出すとか。
>>428 そうですか・・・。
ちなみにwsfって何?のレベルなんで、ちょっとググってきます。
最近wshの便利さを知ってハマッたばっかりなもんで。
430 :
名無し~3.EXE :2006/02/17(金) 23:38:37 ID:cU6dEXQu
評価文字列が半角数値かどうかのチェックをする関数を作りたいと思ってます。 仕様はこんな感じで・・・ <input> 評価する文字列を指定 <return code> 引数値が空またはnullまたは未設定の場合 = -1 引数値が半角数字のみの場合 = 0 引数値が半角数字と符号を含む場合 = 1 引数値が半角数字と小数点を含む場合 = 2 引数値が半角数字と符号と小数点を含む = 3 引数値が半角数字と符号であるが符号位置誤り = 98 引数値が半角数字・符号以外を含む場合 = 99 これに、カンマ付き数値かどうかを判定する機能をつけたいんです。 もち、カンマの位置が正しいかどうかもチェックしまつ。 次レスでソースうpしますね。
431 :
430 :2006/02/17(金) 23:45:08 ID:cU6dEXQu
Public Function NumChk(sMoji) Const NUM_DEF = "0123456789" Const SIGN_DEF = "+-" Const POINT_DEF = "." Dim numCount : numCount = 0 Dim signCount : signCount = 0 Dim pointCount : pointCount = 0 Dim i, sumCount, strLength strLength = Len(sMoji) If IsNull(sMoji) or IsEmpty(sMoji) or strLength = 0 Then NumChk = -1 Exit Function End If If Not IsNumeric(sMoji) Then NumChk = 99 Exit Function End If (続く)
432 :
430 :2006/02/17(金) 23:47:54 ID:cU6dEXQu
(続き) For i = 1 To strLength If InStr(NUM_DEF, Mid(sMoji, i, 1)) > 0 Then ' 数値の数をカウントする numCount = numCount + 1 ElseIf InStr(SIGN_DEF, Mid(sMoji, i, 1)) > 0 Then ' 符号の数をカウントする signCount = signCount + 1 ElseIf InStr(POINT_DEF, Mid(sMoji, i, 1)) > 0 Then ' 小数点の数をカウントする pointCount = pointCount + 1 End If Next sumCount = numCount + signCount + pointCount ' 数値、符号、小数点以外がある If sumCount <> strLength Then NumChk = 99 Exit Function End If (続く)
433 :
430 :2006/02/17(金) 23:49:38 ID:cU6dEXQu
(続き) ' 記号が複数ある If (signCount > 1) or (pointCount > 1) Then NumChk = 98 Exit Function End If ' 符号の位置不正 If (signCount > 0) and (InStr(SIGN_DEF, Mid(sMoji, 1, 1)) = 0) Then NumChk = 98 Exit Function End If If (signCount > 0) and (pointCount > 0) Then NumChk = 3 ElseIf signCount > 0 Then NumChk = 1 ElseIf pointCount > 0 Then NumChk = 2 Else NumChk = 0 End If End Function
正規表現使ったほうが簡単にできそう。
435 :
430 :2006/02/17(金) 23:51:38 ID:cU6dEXQu
長くなってスマソ カンマの位置とか、うまいロジックが思い浮かばなくて困ってます。 誰かいい方法を教えてください。
正規表現だと、 function numchk(n) { var m = n.match(/^([+-])?\d{1,3}(?:(?:,\d{3})*|\d*)(\.\d+)?$/); var r = -1; if (m) { r = 0; if (m[1]) r |= 1; if (m[2]) r |= 2; } return r; } こんな感じ。カンマ位置も見てる。 エラーの理由は面倒だなあ。
437 :
430 :2006/02/18(土) 01:37:06 ID:EkFtphQu
>>436 おおっ、なんかすっきりしてていいですね。
エラーの詳細まではわからなくても、エラーかどうかがわかればいいので、
これに引数が空かどうかの判定を加えれば十分です。
どうもありがとうございました。
正規表現テラツヨス
Msxml2.XMLHTTP→Adodb.Stream使ってHTMLを読み込んで タグでやIDの子要素とか取得したいんですが Microsoft.XMLDOM使ったDOMみたいな操作はできないんでしょうか?
>>441 マターク意味がわからん
日本語で言ってくれ
>>441 documentfragmentを使うとか。
var idoc = new ActiveXObject("htmlfile"); idoc.write(html); idoc.close(); WScript.Echo(idoc.all.length);
日本語おかしかったですね。
× タグでや
○ タグで
>>443-444 そんな構文合ったなんて知らなかった・・ちょっと調べてみます。
ありがとうございます!
構文ではないだろう
VBSで既存のテキストファイルから 「最後の行から2番目の行だけ」を読み出したいのでが上手くいきません。 最後の行だけなら Do Until objTS.AtEndOfLine strLine =objTS.ReadLine Loop で読み出せたのですが、この先がどうしてもわかりません。 VBSでテキストファイルからn行目だけを読み出すことは可能でしょうか? 初歩的な質問で申し訳ないのですが、どなたかご解答願います。
そんなに大きいファイルでないのなら、各行を配列に読み込んでおくとか。 //VBScript だと毎回ReDimする必要があるのか? ならScripting.Dictionaryの方がいいかも。 最後から、じゃなくて先頭から、なら必要な行までReadLineで空読みするだけなんだが。
strLine = objTS.ReadLine Do Until objTS.AtEndOfLine LastLine = strLine strLine = objTS.ReadLine Loop LastLine ← 最後から二行目が保存されている 細かいところは適当だスマソ
JScriptでnlinesを変えれば何行でも ... var nlines = 2; var line = new Array(nlines); while (! tf.AtEndOfStream) { line.shift(); line.push(tf.ReadLine()); } while (line.length) { var t = line.shift(); if (t) WScript.StdOut.WriteLine(t); } ...
>>449 1行目の strLine = objTS.ReadLine がコボラーっぽくね?
>>448 さん
>>449 さん
>>450 さん
ご親切に回答ありがとうございます。
>>449 さんの具体例を元に試してみたのですが、
やはり上手くいきませんでした。
もう少し自分なりに試行錯誤してみます。
453 :
449 :2006/02/23(木) 23:27:10 ID:P7swjMDc
>>452 動いたけど・・・
Set fso = CreateObject("Scripting.FileSystemObject")
Set objTS = fso.OpenTextFile("C:\\hogehoge.txt")
LastLine = ""
strLine = objTS.ReadLine
Do Until objTS.AtEndOfLine
LastLine = strLine
strLine = objTS.ReadLine
Loop
WScript.echo "LastLine = '" & LastLine & "'"
>>451 コボラーって cobol?
10年ぐらい前に仕事でちょっとやらされたけど
全然覚えてないッス・・・
>>451 の言いたいことがよく分からん。
とりあえず普通のハンガリー記法だと思うけど。
>>453 無事きちんと動きました。
本当にありがとうございます。
458 :
名無し~3.EXE :2006/02/24(金) 17:03:32 ID:WHZ2ZN+b
COBOLer m9(^Д^)プギャー
459 :
名無し~3.EXE :2006/02/28(火) 07:26:35 ID:Qcq45Rbh
質問です DateLastModified の結果と date-15 など n 日前の結果を比べ、 より古ければ削除の処理をしたいのですが、 数値でなく日付の比較でノ処理は可能でしょうか? こんな感じで、 OldDay = date-15 FileLastUpdate = objFile.DateLastModified If FileLastUpdate > OldDay then objFS.DeleteFile FileName 因みにこれでは出来ませんでした。
>>459 >数値でなく日付の比較でノ処理は可能でしょうか?
これが意味分からんが、例えば今日から15日前よりも古ければ削除、という処理なら
こんな感じでどうか
// 比較対象日時を作成
var today, OldDay;
today = new Date();
OldDay = new Date(today - 15 * 24 * 60 * 60 * 1000); // 15日前(ミリ秒単位)
// 最終更新日時を比較
FileLastUpdate = objFile.DateLastModified
If(FileLastUpdate > OldDay){
// 比較対象日時より古いので削除処理
objFS.DeleteFile FileName;
}
WSHで非アクティブウィンドウにキー入力を送ることって出来ますか? 出来なければ何を使えば出来るでしょうか?
DynaCallとか使えば送ることはできる(AutoItXでもできるかな) 修飾キーは無理な気がするけど
Set WshShell = CreateObject("WScript.Shell") WshShell.AppActivate タイトルバーの文字列 でアクティブにしてからSendKey ってことじゃないの?
>>464 あぁすみません、あいまいでした。
非アクティブを維持したままってことです。
466 :
名無し~3.EXE :2006/02/28(火) 22:53:06 ID:7+dX3SXD
それじゃあ アクティブにしてSendKeyして別の窓をアクティブにする ってのはアウアウか
非アクティブ維持のままキーを送る…方法があれば是非知りたいな。 ところで初心者にちょっと教えて欲しいのですが、MsgBox を出したまま 平行して別の処理(例えば SendKeys)を行う事は可能ですか?イメージは、 ある作業を行いつつ、作業の経過を MsgBox に表示し、かつ MsgBox の ボタンを押すと作業を一時停止または終了させられるというものなですが。。
> 非アクティブ維持のままキーを送る…方法があれば是非知りたいな。 (wshに)そういう機能は無いが、(COMなどを使えば)方法はある。 MsgBoxも然り。 組み込みの"MsgBox"をmodelessで呼び出す方法(引数など)は無いが、 modelessなダイアログなんていくらでも作りようがあるし、IEなどを使うって手もある。 wshではどう利用するかより何を利用するかだ。 用意されてる機能は限定的なものなので、「MsgBoxを」と変にMsgBox関数に拘らず、 やりたいこと(modelessなダイアログを表示)から、何を使うかを考えればいい。 ちなみに実際にやりたいことはプログレスバー+処理の中断だね。 まあ、COMの作り方に関して解らないことは、利用する言語のスレで聞こうな。 IEを使ったプログレスバーのサンプルとかもどっかにあったし。
469 :
467 :2006/03/03(金) 09:51:16 ID:GZffQiR7
>>468 非常に参考になります・・・。本当にありがとうございました!
実際にやりたい事はご指摘の通りです。勉強してきます!!
>>467 HTAを使えばWSHでもできるよ。
HTMLが書けるなら、こっちの方が簡単だと思う。
スタイルシートのwidthの値をいじることで、擬似プログレスバーも作れるし。
471 :
467 :2006/03/04(土) 14:16:26 ID:60Ws1S/g
>>470 おお… html/css/perl はいつも使っているのでそこそこ書けます。
重要なキーワードを教えて頂き有難うございます!!早速調べます。
472 :
名無し~3.EXE :2006/03/05(日) 10:11:55 ID:qEaOH4F6
現在 日付表記の形式が M/d/yyyy のシステムがあるのですが、 この形式から yyyy/mm/dd の値を取得したいのですが。 例)3月5日 → M/d/yyyy⇒3/5/2006 yyyy/mm/dd⇒2006/03/05 FormatDateTime では M/d が MM/dd になりませんでした。 If 〜 then で何十行かかけばできないことは無いのですがスマートにできる方法はないでしょうか? 外部プログラムの追加及びシステム変更は行えないシステムです。
>>472 俺JavaScriptしか出来ねえ
str = "3/5/2006";
spl = str.split("/");
rs = spl.pop();
for(i=0;i<2;i++){
rs += "/";
if(Number(spl[i])<10){
rs += "0";
}
rs += spl[i];
}
//alert(rs);
WScript.Echo(rs);
474 :
472 :2006/03/05(日) 10:22:51 ID:qEaOH4F6
早いレス有難う、しかし自分 VBS しかできねぇ・・・ Split も試してみたんだが、駄目でした。
駄目でしたってどう駄目だったかは書こうぜ。 Dim d d = "1/23/2006" Dim dates, ymd, i dates = Split(d, "/") For i = 0 To 1 If Len(dates(i)) = 1 Then dates(i) = "0" & dates(i) End If Next ymd = dates(2) & "/" & dates(0) & "/" & dates(1) WScript.Echo(ymd)
476 :
473 :2006/03/05(日) 10:59:16 ID:g2SuFG/v
ymdが「山田」に見えた俺は異常
d = CDate("3/5/2006") msgbox Year(d) & "/" & Right(Month(d)+100,2) & "/" & Right(Day(d)+100,2)
MsgBox FormatDateTime("3/5/2006", 2) FormatDateTime関数は「地域のプロパティ(地域のオプション)」に依存するが、 うちの環境では上記で2006/03/05が返ってくるよ。
479 :
名無し~3.EXE :2006/03/05(日) 11:42:48 ID:qEaOH4F6
>475 >477 共に出来ました。あがとう御座いました。 CDate 関数は知りませんでした。勉強になります。 >478 >FormatDateTime関数は「地域のプロパティ(地域のオプション)」に依存するが、 これが一番の問題なんですね、今回は。
JScriptでDOMを扱おうと思いいきなりつまずきました。アドバイスお願いします 以下のスクリプトでhello.xmlが読み込めないようなのですが原因が分かりません。 var xmldoc = WScript.CreateObject("MSXML2.DOMDocument"); xmldoc.async = false; rtn = xmldoc.load("hello.xml"); WScript.echo(rtn.xml); WScript.Quit(0); ----------hello.xmlの中身--------- <?xml version="1.0" ?> <document> <hello>hello!</hello> </document> ----------hello.xmlの中身---------
WScript.echo(xmldoc.xml);
>>481 ありがとうございます・・・恥ずかしい・・・
っておいおい それでいいのかよ?
484 :
名無し~3.EXE :2006/03/09(木) 18:03:38 ID:Qc7Gncbs
色々ググッたのですが分からないのでお聞きします いま、あるツールで作成したデータをFDなとに 書き込んでいるのですが、書き込み終了を取得したいのです windowsXPでメディアに書き込み中かどうか 取得する方法はないでしょうか? ツール自体がいじれないので、wshで監視したいのです wmiとかでできるでしょうか? 検索ワードでも良いので、ヒントをお願いします
>>484 ツールはデータを書き込んだ後終了するの?
486 :
484 :2006/03/09(木) 18:42:10 ID:Qc7Gncbs
>>485 自分で作ったものではないので、
内部は何をしているかわからませんが、
データ作成→書き込み処理→返答待ち→最初に戻る
な流れです。
この返答待ち状態の時も書き込み続けているのですが
返答を返すと書き込みを中断し次の処理にはいってしまい
正常に書き込みができないのです。
まぁアクセスランプ眺めてろって言われたらそれまでなんですが
var fso = WScript.CreateObject( "Scripting.FileSystemObject"); var fdd = fso.GetDrive("a:"); で一定間隔ごとにfdd.IsReadyを調べるってのはだめかね?
書き込み処理 で書き込まれるファイルは一ファイルだけ? ファイル名は固定?
489 :
484 :2006/03/09(木) 19:12:09 ID:Qc7Gncbs
>>487 やってみましたがダメでした
FDが挿入されていればtrueを返すみたいです
490 :
484 :2006/03/09(木) 19:24:03 ID:Qc7Gncbs
>>488 ファイル名は固定です
ただ、条件分岐(内部処理)で作られるファイル数は
固定ではありません
最高で30ぐらいかと思います
一番最後に書き込まれるファイルが固定だったら それを排他モードでオープンしてみてエラーだったら まだ書き込み中、とか・・・ ツールが共有モードでオープンしてたらだめか WMIで該当のプロセスがどのファイルをオープンしてるかって 分からないんだっけ?
レジストリを自動で削除するスクリプトを作りたいんだけど、アクセス拒否になってる項目が 削除できん 自動で許可に設定する事できんのかな
何のためのアクセス拒否だ
>>492 管理者権限がないユーザーから消したいなら、runasコマンドの類を使って一時的に管理者として動かしてやるしかない。
もちろんIDとパスワードは必要。
アクセス権を変えるのが目的なら、WSHからはレジストリのアクセス権を変更できないみたいだから、
レジストリのアクセス権を変えるならリソースキットの中にあるツールを使うか何かしなきゃダメ。
フリーウェアで↓こんなのもある。結構使いやすい。
http://homepages.cae.wisc.edu/~micro/regperm/ ただしレジストリのアクセス権を変えるのにも、もちろん管理者権限が要るからね。
>>484 ちょっとトロくさい方法だけど、こんなのはどうか。
1. FDの空き容量を調べて、変数に入れておく
2. 少し時間を空けてループ。
3. 空き容量が減り始めたら、書き込みの開始とみなす。
4. 一定時間、空き容量が変わらなければ終了とみなす。
直接的じゃないけど、これでできないかな?
暇だったから書いてみた Set objFso = CreateObject("Scripting.FileSystemObject") Set WshShell = Wscript.CreateObject("Wscript.Shell") Do Until MsgBox objFso.GetDrive("A:").IsReady MsgBox "FD入れろやゴルァ!" Loop x = objFso.GetDrive("A:").FreeSpace Set objExec = WshShell.Exec "ツールのパス" Do While x = objFso.GetDrive("A:").FreeSpace WScript.Sleep 500 Loop y = objFso.GetDrive("A:").FreeSpace Do Until y = objFso.GetDrive("A:").FreeSpace WScript.Sleep 500 Loop objExec.Terminate MsgBox "おい終わったぞ" WScript.Quit ツールの速度にあわせてSleepの時間を調整すれば、使えなくはないと思う。
ごめん4行目に意味不明のMsgBoxが入ってる 我ながらワケカワラン 消しといて
FD入れろやゴルァ!
FD入れろやゴルァ! FD持ってなかったよヽ(`Д´)ノウワァァン!! これもゆとり教育の弊害か・・・
ゆとり教育直前世代なのにカタカナまで間違ってる俺ってorz
おい終わったぞ
("A:")
あ、そうだ、俺も聞きたいことがあったんだ。 スクリプトセンターとかでたまにみる、ADSIってのがわからない。 ユーザーアカウントいじるのに使えるのはわかった。 スクリプトセンターのサンプルをいじって適当に使うことぐらいはできた。 でもそこから先がわからない。 ADSIについて、っていうかWinNT:なんとかかんとか、みたいな書式について、 何かいい参考書みたいなのないですかね。 少しぐらい高くてもいいので、俺みたいなアホでもわかるような本があれば嬉しいんだけど。 「この本はよかった」みたいな情報があれば教えてください。
>>499 FD持ってなくてそのメッセージが出たら、ひたすらループ?
>>506 ひたすらループ
プロセスを殺すしかない
1時間ぐらいのタイムアウトを仕込んだら?
勝手にループ10回までにしてみた Set objFso = CreateObject("Scripting.FileSystemObject") Set WshShell = Wscript.CreateObject("Wscript.Shell") i=0 Do Until objFso.GetDrive("A:").IsReady MsgBox "まことにお手数ではございますが、FDを挿入してはいただけないでしょうか" i = i + 1 If i = 10 Then Exit Do End If Loop x = objFso.GetDrive("A:").FreeSpace Set objExec = WshShell.Exec("ツールのパス") i = 0 Do While x = objFso.GetDrive("A:").FreeSpace WScript.Sleep 500 i = i + 1 If i = 10 Then Exit Do End If Loop i = 0 y = objFso.GetDrive("A:").FreeSpace Do Until y = objFso.GetDrive("A:").FreeSpace WScript.Sleep 500 i = i + 1 If i = 10 Then Exit Do End If Loop objExec.Terminate MsgBox "大変お待たせして申し訳ございませんでした、作業完了いたしました" WScript.Quit
FD挿入でExit Doだと次でエラーになっちゃうか。 WScript.Quitにすればよかったかな。
まことにお手数ではございますが、FDを挿入してはいただけないでしょうか
だから持ってねーっつってんだろがよヽ(`Д´)ノウワァァン!!
MsgBox "もうダメッ!ウンチ出るっ、ウンチ出ますうっ!ビッ、ブリュッ、ブリュブリュブリュゥゥーーッッ!"
514 :
505 :2006/03/13(月) 19:12:53 ID:3pfppWbE
ごめん、ふざけすぎた。 誰かADSIのいい本しらない? MSDN検索してもよくわからないし、本屋で聞いたらADSLの本を案内されたよ。
516 :
505 :2006/03/13(月) 19:41:09 ID:3pfppWbE
>>515 ありがとう。
MSDNは2週間ぐらい前から彷徨ってるんだけど、基礎知識が足りないらしく理解できない。
でもActive Directoryを家に用意できるほどの金はないし、何の知識が足りないのか自分でもよくわからないんだ。
何か本があれば、そこから足りない知識を調べる手がかりが掴めるかもしれないと思った。
同じ理由で、ADSI Scriptomaticも色々操作してみたけどよくわからないんだ。
勉強する方向を見失っちゃって。
本屋で聞いたのは確かに失敗でした。w
丁寧にADSLの本の紹介をしてくれたので、断るのが申し訳なくて1冊買ってしまった。
イラネェ…
日本人ってんは大変んだね
518 :
505 :2006/03/13(月) 23:30:00 ID:3pfppWbE
日本人っつうか、俺個人だけどね。 俺自身が技術系・・・とはいってもサービス業みたいな仕事してるもんだから、 サービスには対価を払うべきだと考えている。
ADSI の記事見たけどのっけからユーザー1000人追加するとか、 趣味用途には無縁ぽいな。管理者なの?
520 :
484 :2006/03/14(火) 01:24:29 ID:r5bTu56z
おぁっ一生懸命Win32_FloppyDriveとかWin32_FloppyControllerのプロパティを調べているうちにサンプルがっ ID:D2skE9jTさん、ID:5XPvRHrnさんありがとうございます。 参考にして、自分仕様でHTA作ってみました。スレ違いぽいですけど貼っておきますね HTAにしたらsleepが使えないので、コードがむちゃくちゃになった気がしまくりなんでご容赦を。 <html><head><title>test</title> <script language="vbscript"> resizeTo 300,200 Dim fso,driA,TimeID set fso=createobject("scripting.filesystemobject") set driA=fso.getdrive("A:") sub a timerArea.innerText=now() if Not chkval.innerText then Window.ClearInterval(TimeID) Capa.innerHtml="": timerArea.innerText="" exit sub end if if Not driA.IsReady then Capa.innerHtml="" Info.innerHtml="<font color=#ff0000>入ってなくね?フロッピ-が。</font>" exit sub end if if Capa.innerText="" then Capa.innerHtml=driA.FreeSpace Info.innerHtml="" else
'
>>520 続き
if Capa.innerText <> cstr(driA.FreeSpace) then
Capa.innerHtml=driA.FreeSpace
Info.innerHtml="<font color=#0000ff>更新してるっぽくね?</font>"
elseif Info.innerText <> "" then
Info.innerHtml="<font color=#000000>処理終わったぽくね?</font>"
replay=msgbox("FD監視続けちゃう?",4)
if replay=7 then
Window.ClearInterval(TimeID)
msgbox "またのご利用をスタッフ一同"& vbNewLine & "心よりお待ち申し上げております"
set fso=nothing: set driA=nothing: Close
else
Info.innerHtml=""
end if
end if
end if
end sub
sub DownMouse
chkval.innerText=Not chkVal.innerText
if chkval.innerText then TimeID=window.setInterval("a",1000)
end sub
</Script>
<body onload="">
<input type="button" onMouseDown="DownMouse" value="chk">
<div>更新チェック:<span id="chkval">False</span></div>
<div>現在時刻:<span id="timerArea"></span></div>
<div>空き容量:<span id="Capa"></span>KB</div>
<div>更新情報:<span id="Info"></span></div>
<div>チェック速度:<span id="Speed">1秒</span></div>
</body></html>
522 :
484 :2006/03/14(火) 02:57:43 ID:r5bTu56z
なんどもすいません。。。 これでイケル思ったら、FreeSpaceはファイルがひとつの場合は 書き込み完了前に残量を返すので駄目でしたorz 複数ある場合はちょっとずつ渡すみたいで、イケルと勘違いしました。 500kのzipファイルで試したら、一瞬にしてFreeSpaceが残700とか返しやがるですよ。。。 もちろん書き込みは全然終わっていません。 なんで上のコードは全く役に立ちません(しかもKBじゃなくてbyteじゃん。。。) ろくに検証もせずにコード書いてしまってスレ汚しすんません。 勉強して出直してきます(´・ω・`)
523 :
505 :2006/03/14(火) 20:33:58 ID:RSgpFfEu
>>519 管理者ではありません。
でもローカルのPCの情報取得にも使えるようですし…。
実際にやりたいのは任意のユーザーアカウントが存在するかどうかの確認なんですが、
WMIにやらせるとドメインに接続したPCで動かしたときに異常に遅いのが難点。
そこでADSIを使えば多少マシな動きをさせられるのではないかと考えたんです。
524 :
505 :2006/03/14(火) 20:44:46 ID:RSgpFfEu
>>484 でかいファイルができることもあるってことですか…
なんだか小さいファイルをたくさんっていうイメージがあったので、Sleepの値で調整できるかと思ってました。
お役に立てなくて申し訳ない。
526 :
505 :2006/03/15(水) 22:09:30 ID:VCd+QO3t
>>525 ありがとうございます!
TechNetの方は今のところ私のスマート&コンパクトな頭脳には理解できませんが、
ちょっとじっくり格闘してみようと思います。
ご紹介頂いた書籍は在庫なしなんですね…。
まずは古本漁りかな。
スマート?
528 :
505 :2006/03/16(木) 01:02:21 ID:l35lbKrC
〔時にけなして〕ずるい、なまいきな、思い上がった
.vbcという拡張子をcscriptに関連付けただけじゃ動かないんですが この拡張子をスクリプトエンジンに登録するにはどうすればいいでしょうか? もし既にcscriptに関連付けられた拡張子があったら教えてください。 また、それがあったとしても登録方法も知りたいので 手順等がまとまっているサイトがあったら教えてください。
フォルダオプションで該当拡張子の引数に //e:vbscript を追加する
> //E:engine スクリプト実行時にエンジンを使用する さくっとスルーしてました・・・orz ありがとうございます。
昨日からvbsで使い始めたけど 手足を縛られた状態で泳ぐような変な面白さがあるなw
UNIXのシェルスクリプトも変態だけどVBSもまた違った変態文法だよな。 Active PythonかRuby使うのが一番楽。
JScript使えば
VBは読む気がしないのでサンプルとかがVBSで書かれていると参る どうせならJScriptで書こうよ
やなこった。
JScriptもウンコだろ
excelマクロから入った俺はJScriptが読めなくて困ってる。
PerlScriptの拡張子 .plsがWinampに取られて困る
awk と sed があれば十分
>>540 iTunesとかな。
ってかPealScriptはマルチバイト文字があるとエラーになるから使いものにならない
ピールになっちまった
VisualStudio2005面白い
無料で遊んでたけど、結局買ってしまった
>>542 Peal?
JapanScript は、WORD やEXCELなどのコンポーネントを使おうとすると日本語で書かれた史料がないのでつらいな。
そうだな
つ……つられないぞ
548 :
533 :2006/03/22(水) 06:56:36 ID:ltWAvhie
vbsでCOMをいじるとき複数の返り値はどうやってうけとるんでしょうか? もしかして出来ない? typelibはこうなってるんだけど virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Execute2( /* [in] */ int flags, /* [in] */ int codePage, /* [in] */ BSTR command, /* [out] */ int __RPC_FAR *pErrorCode, /* [out] */ BSTR __RPC_FAR *errorMsg, /* [out] */ BSTR __RPC_FAR *history, /* [out] */ BSTR __RPC_FAR *results) = 0; Obj.Execute2(0, 0, "command", 0, 0, 0, 0) は動いてるけど 後の4つの0を変数に置き換えると実行時に型が違うとおこられてしまった swapとかの例題でbyrefの使い方はいくつか見たんだけどどうもわからない
"戻り値"は必ず一つ。 それ以上の値を受け取りたい時は、複数のメンバを持つオブジェクトを返すとか 変数を参照渡しで渡して、それを書き換えさせるとかの方法があるけど、それは後者の方だね。 ただ、VBSには宣言時の変数型が無いから、VBSから使うことを考慮されていないCOMだと VBSからは使えない可能性もある。参照渡しの場合に渡す変数型は、全く同じ型か言語仕様として 互換性のある型じゃないとダメだからね。値渡しなら仕様として非互換でも内容に互換性があれば渡せるけど。 まあ、自分でVBSから使えるようにCOM作るのが手っ取り早いよ。
550 :
533 :2006/03/22(水) 07:27:54 ID:ltWAvhie
ありがとう、やっぱりそうか 起動はwshじゃなくちゃならない + 既製品のCOMを使う、っていう状況なので VBとかC#でラップするよ
どっちの雰囲気が好きかって事で。 個人的にはム板でスクリプトの質問(雑談ならまあいい)はダサいと思う
どっちも成立してるのか ならこっちでいいや。
NICデバイスの有効/無効をバッチファイルかcscriptからやりたい。 WMIで調べてたんだけどできないとMSに書いてあった。 IoSetDeviceInterfaceState() を使うしかなさそうなんだけど、 cscriptってperlみたいにCのヘッダ食ったり、API呼び出したりできるの? あと、使用できるCOMコンポーネントってどうやって調べたらいいの? MSDNみても一覧とかないし、そもそも調べ方がわかんないんだけど。
>>554 > cscriptってperlみたいにCのヘッダ食ったり、API呼び出したりできるの?
API 呼び出すなら
>>1-10 のどっかにある COM 使う
がしかし、ActivePerl 入れてるのなら PerlScript 使うのが楽かも
> あと、使用できるCOMコンポーネントってどうやって調べたらいいの?
> MSDNみても一覧とかないし、そもそも調べ方がわかんないんだけど。
これも
>>1-10 に紹介がある
557 :
名無し~3.EXE :2006/03/24(金) 14:05:21 ID:E7xRdLnR
指定したファイルまたはフォルダを削除するスクリプトを教えていただけませんか。 WSHの知識はほとんどないため、当初コマンドラインで挑戦しましたが ファイルとフォルダを判別する方法がわからず断念しました。 またファイラから呼び出したいので複数指定したいです。
残念ながらここはスクリプトを書いてもらうスレじゃないんだ。 理解する気があるなら助言はするけど。
@echooff rmdir *.*
複数指定・・・WScript.Arguments ファイルオブジェクトを取得・・・FileSystemObject.GetFile() フォルダオブジェクトを取得・・・FileSystemObject.GetFolder() ファイル又はフォルダを削除・・・FileSystemObject.Delete() これぐらいでいけるかな
561 :
名無し~3.EXE :2006/03/24(金) 22:22:39 ID:QJhNhdCP
>>561 oMsg.TextBody = "C:\cmd\xxxx1.txt" & vbCrLf & _
"C:\cmd\xxxx2.txt" & vbCrLf & _
・・・・・・
じゃね?
563 :
名無し~3.EXE :2006/03/24(金) 22:53:58 ID:QJhNhdCP
ありがとうございます。あと初心者的な質問すみません。 これをmail.vbsとして mail.vbs "C:\cmd\xxxx1.txt" "C:\cmd\xxxx2.txt" ...... と複数したい場合,どのように引数定義したらよいでしょうか?
vbs ファイルに引数定義もなかろ。 引数は WScript.Arguments で配列と同様に扱える。
565 :
名無し~3.EXE :2006/03/24(金) 23:03:37 ID:QJhNhdCP
???
具体的にどのように定義すればよいですか?
>>564
>>565 コマンドスイッチはWScript.Argumentsの中に配列と同じような形で入ってる
1つ目ならWScript.Arguments(0)
2つ目ならWScript.Arguments(1)
数を数えたいならWScript.Arguments.Count
ひとつずつ取り出したいならFor Eachで文字列値として取り出せる
568 :
557 :2006/03/25(土) 01:18:17 ID:Bj2eKhQF
>>558 そうですね、挑戦してみます。
>>559 それだと引数にフォルダしか指定できませんので。
>>560 はい、それらの情報はウェブサイトから見つけたのですが、
使い方がわからなかったのでその時は断念しました。
Set arg = WScript.Arguments
Set fso = CreateObject("Scripting.FileSystemObject")
Set src = fso.GetFolder(arg)
For Each FileName In src.Files
WScript.Echo FileName
Next
For Each FolderName In src.Subfolders
WScript.Echo FolderName
Next
こんな風にして引数指定したファイルまたはフォルダを列記するスクリプトを書いてみましたが
早速3行目でエラーが出てしまいます。また、
Set src = FileSystemObject.GetFolder(arg)
も受け付けてもらえません。
>>568 GetFolderにはフォルダのパスの文字列を渡してやらなくちゃいかん。
しかるにWScript.Argumentsはコマンドスイッチが0個以上入ったオブジェクトだ。
オブジェクトの中から文字列を取り出して渡してやらなくては意味がない。
エラーの内容を書かないと意味無いぜ。 すぐ上にも出てるが、WScript.Arguments は配列的なものだ。 FileSystemObject の GetFolder が引数に要求するのは文字列なので、型が合っていない。
571 :
557 :2006/03/25(土) 01:26:34 ID:Bj2eKhQF
>>569 ,570
助言ありがとうございます。
なるほど、少しわかってきました。
また挑戦して戻ってきます。
>>568 ちょっとだけ直せば動くよ
arg を舐めるfor文を入れてみれ
Explorerのすべてのファイルを表示すると隠しファイルを表示しないを一発で切り替えるスクリプトってどうやって書けばいいですか?
ファイル・フォルダ混じりで複数指定だと、 ファイルとフォルダの判別もしてやらなきゃいけないな。 Shell.Applicationで判別してFileSystemObjectで消すのが綺麗かな。
>>573 普通にはできない。
再起動が入っていいならレジストリ操作でできる。
再起動なしなら不確実だがSendKeysで操作してやるしかないだろうね。
576 :
557 :2006/03/25(土) 11:11:33 ID:UhIsyIYx
>>572 引数を順に表示させようと思ってやってみましたが、うまくいきません。
Set arg = WScript.Arguments
For EachObj in arg
Wscript.Echo EachObj
Next
仕事の前後で調べながらやっているのですが、なかなか難しいですね。。。
577 :
557 :2006/03/25(土) 11:13:04 ID:UhIsyIYx
>>574 はい、私もそう思っています。
ただShell.Applicationのところにたどり着くのにまだだいぶかかりそうです。
>>576 Set arg = WScript.Arguments
For Each str in arg
Wscript.Echo str
Next
だな。
strの中に一つずつ文字列が取り出される。
だから、strはオブジェクトじゃないぞ。
それからShell.Applicationを使わなくてもFileSystemObjectで判別はできる。 objFs.FolderExists("パス文字列") がTrueならフォルダ、Falseならフォルダ以外か存在しない。 objFs.FileExists("パス文字列") がTrueならファイル、Falseならファイル以外か存在しない。 だからこれをifでつないでやれば、フォルダの場合・ファイルの場合・パスが存在しない場合に分けることができる。 そこまでできれば消すのは簡単だね。
581 :
557 :2006/03/25(土) 11:53:00 ID:UhIsyIYx
Set arg = WScript.Arguments Set fso = CreateObject("Scripting.FileSystemObject") For Each str in arg if fso.FolderExists(str) then set del = fso.GetFolder(str) Wscript.Echo "folder:" + del elseif fso.FileExists(str) then set del = fso.GetFile(str) Wscript.Echo "file:" + del end if Next ここまで出来ました。 引数がファイルかフォルダかを判別するところまで来ました。 Wscript.Echo...の代わりにfso.delete(del)としましたがうまく働きません。 もう少しがんばってみます。
582 :
557 :2006/03/25(土) 11:55:45 ID:UhIsyIYx
Set arg = WScript.Arguments Set fso = CreateObject("Scripting.FileSystemObject") For Each str in arg if fso.FolderExists(str) then set del = fso.GetFolder(str) del.delete elseif fso.FileExists(str) then set del = fso.GetFile(str) del.delete end if Next まだ野暮ったいですが、なんとなく出来てきました。 皆さんのおかげです。もう少しがんばってみます。
ここまでできればもう教えてあげても勉強の邪魔にはならんだろう。 Set objFso = CreateObject("Scripting.FileSystemObject") If Not WScript.Arguments.Count = 0 Then For Each strArgument In WScript.Arguments If objFso.FolderExists(strArgument) Then objFso.DeleteFolder strArgument ElseIf objFso.FileExists(strArgument) Then objFso.DeleteFile strArgument Else WScript.Echo "無効な引数です" End If Next Else WScript.Echo "引数がありません" End If 俺ならこう書く。
584 :
557 :2006/03/25(土) 12:19:09 ID:UhIsyIYx
>>583 先生、皆さん、ありがとうございました。
昨日までWSHの知識は全くありませんでしたが(ほぼ一文字も理解できなかった)、
おかげさまでほぼ目的の動作が出来るようになりました。
またWSH(VBScript?)の仕組みが少しわかりました。
後は削除確認のダイアログボックスを出す処理をつけたいですが、
これは必須でないので少し自分で調べてみます。
また行き詰ったら助言をいただければ幸いです。
本当にありがとうございました。
585 :
557 :2006/03/25(土) 14:10:23 ID:UhIsyIYx
>>1 に完成品を投稿するようあったので、出してみます。
私の場合、スクリプトの引数としてファイラからファイルもしくはフォルダが必ず渡されるので
引数なし、引数無効のエラー処理は省かせていただきました。
Set fso = CreateObject("Scripting.FileSystemObject")
Set arg = WScript.Arguments
num = arg.Count
If num = 1 Then msg = "this object"
If num > 1 Then msg = "these " & num & " objects"
If MsgBox("Delete " & msg & "?", 259, "Delete") = 6 Then
For Each str In arg
If fso.FolderExists(str) Then fso.DeleteFolder str
If fso.FileExists(str) Then fso.DeleteFile str
Next
End If
改善点があればまたご指導ください。
586 :
名無し~3.EXE :2006/03/25(土) 14:36:30 ID:kuZMN6OL
587 :
557 :2006/03/25(土) 14:57:43 ID:UhIsyIYx
>>586 ハードコーディングを知らなかったので検索しました。
msgboxの259のことですね、すいません。
これはvbYesNoCancel + vbDefaultButton2、だったのですが、
これだとエディタで改行して見にくかったので数値にしてしまいました。
確かにわかりにくいですね、以後気をつけます。
588 :
557 :2006/03/25(土) 15:00:29 ID:UhIsyIYx
If MsgBox("Delete " & msg & "?", vbYesNoCancel + vbDefaultButton3, "Delete") = vbYes Then でした。
>>557 さん
蛇足だけど、ソースが横に長くなるのが嫌なら
改行の前に"_"をつければソースを改行できるよ。
例えば、
>>588 の部分だったら↓こんな感じで。
If MsgBox("Delete " & msg & "?", _
vbYesNoCancel + vbDefaultButton3, _
"Delete") = vbYes Then
590 :
557 :2006/03/25(土) 15:39:40 ID:UhIsyIYx
>>589 ありがとうございます。全く知りませんでした。。。
ところで、引数をたくさん指定しますと以下のようなエラーが出ます。
Windows cannot access the specified device, path, or file.
You may not have the appropriate permissions to access the item.
もしかすると処理できる引数(あるいはその文字列長)に限界があるのかもと思っていますが、
本当のところはどうなんでしょうか。
今日は出っぱなしで申し訳ありません。
スペースがパスに含まれてるのに""でくくってないんじゃない? ってそれはないか。 そのファイルがある場所って普通のフォルダ?
592 :
557 :2006/03/25(土) 16:14:43 ID:UhIsyIYx
>>591 ロングファイルネームをダブルクォーテーションで囲った場合も
8.3形式ファイル名で指定した場合も、大量に指定するとどちらもエラーが出ます。
フォルダは通常のフォルダです。
今はD:\aというフォルダに大量のファイルを入れて削除を試みましたが、
90個くらい指定すると先ほどのエラーが出てきます。
ファイラ側は引数を渡せているはずで、というのも同じ量のファイルに対し
FFCというコピーツールは正常に作動しているからです。
引数の数と引数の長さの両方に制約があったはず。
594 :
名無し~3.EXE :2006/03/25(土) 16:56:55 ID:Pb7zZW1W
>>592 wshの一部として使ったことがないからどう扱うのかよくわからないが
>>585 をtest.vbsで適当な所に保存してファイルを適当にDDしたら
「実行できません。引数一覧が長すぎます。」のダイアログでるから
[引数の長さの合計]+[引数の個数(null)]が1024位までの限界があるのでは
>>592 実験方法も正しいし、結論も正しい。
引数が長すぎるとエラーになる。
これはWindowsの持つ欠点の一つだね。
スクリプトじゃな普通のアプリケーションでもエラーになる。
これはどうしようもない。
だからWindowsで沢山のファイルをドロップするようなソフトは、
アイコンにドロップではなくウィンドウにドロップするように作られる。
他のOSから見ると奇妙に見えるけど、仕方ない。
コマンド自体を受け取りきれないので、スクリプトの書き方で回避はできない。
コマンドスイッチの書き方も含めて短くなるよう工夫(カレントディレクトリを活用するなど)するか、
フォルダの中を検索させて条件にあったものを探すなどさせるか、
スイッチ部分をテキストに書き出しておいて読み込ませるか…などといった回避方法があるね。
597 :
557 :2006/03/25(土) 23:41:37 ID:muSr8OSZ
>>593-596 ありがとうございました。
次は回避方法を考えないといけないですね。。。
確かにスクリプト実行前のエラーのようなのでスクリプト側では対処できないようです。
しかしWSHとFFC(コピーツール)で引数制限に違いがあるのも不思議です。
FFCってMS純正品?
>>597 FFCを知らないんで外してるかもしれないけど、
スクリプトに引数を与えるって事は、実際は
wscript.exe スクリプト名 コマンドスイッチ
という形になるはずなので、wscript.exeの分だけ文字数が違ってるのかもしれないね。
601 :
557 :2006/03/26(日) 05:05:02 ID:S8QYjY1T
602 :
名無し~3.EXE :2006/03/26(日) 22:29:24 ID:0Qul3ith
本文に添付を展開したいのですが。。
>>562 それだと,"C:\cmd\xxxx1.txt"の文字が入るだけです。
CDO.Messageで添付を展開するのは無理なんですかね?
FileSystemObject 使って読み出せばいいだろ。
>>602 馬鹿なこと言っちゃいけない
本文にどんな文字を書くか指定する命令で、いちいちファイルの中が表示されてたら
本文にパスを書きたいときはどうすりゃいいんだよ
ちゃんとファイルの中を読む命令を作ってやって、その中身を渡さなきゃダメだ
根本的に考え方がおかしい
質問です いま、あるHTMLから正規表現で<body>〜</body>の間を抜くパターンを regEx.Pattern = "\<BODY(.*\n)*.*\</BODY\>" としているのですが、間にあるscriptタグが邪魔なので除外したいのですが パターンの定義が色々試したのですが分かりません。 今は泥臭いですが、最初にscriptタグの範囲を取得してreplaceで置き換え その後にbodyを取得しています 一発で、scriptタグを除外しつつbodyタグを抜く正規表現のパターンは どうしたら良いのでしょうか?
素直に二段階でやっとけ。正規表現こねくり回すよりよほど応用が利く。
proxスレかと思t
608 :
605 :2006/03/27(月) 02:47:35 ID:U9eV57vQ
610 :
名無し~3.EXE :2006/03/27(月) 09:47:05 ID:EyFFFSmz
確かにそうですね
>>604 で
Set oTs1 = Fs.OpenTextFile(WScript.Arguments(0),ForReading)
としてみたのですが,
エラーとなりました。
こういうことは出来ないのでしょうか?
何度も言ってるような気がするが、 エラーの内容を書け。
612 :
名無し~3.EXE :2006/03/27(月) 10:13:51 ID:EyFFFSmz
プロシージャの呼び出し,または引数が不正です。 です。
613 :
名無し~3.EXE :2006/03/27(月) 10:28:03 ID:EyFFFSmz
済みません。解決しました。m(__)m
どうやって解決したのか書かないの
自分のファイルパスを取得したいのですが。マルチですが
こういう感じの単純なソフト操作をスクリプトにしてD&Dで 一括処理させようと思ってるんですが、D&D処理の仕方を 教えていただけませんでしょうか? <job id="IncludeExample"> <script language="JScript"> var WShell = WScript.CreateObject("WScript.Shell"); var file = WScript.Arguments.Unnamed.Item(0); var oExec = WShell.Exec("ソフトウェア");//ソフトウェアを起動 var oExec = WShell.Exec( "ソフトウェア" + " \"" + file + "\"" ); while(oExec.Status == 0) WScript.Sleep(100); //読み込み待機 WShell.Sendkeys("^E");//キーを送る WScript.Sleep(1000); WShell.Sendkeys("{ENTER}");//キーを送る WScript.Sleep(9000); //処理待機 WShell.AppActivate("ソフトウェア" + " \"" + file + "\""); WShell.Sendkeys("%F+X");//キーを送る </script> </job>
>>618 var file = WScript.Arguments.Item(0);
ごめん寝ぼけてた スルーして
621 :
618 :2006/03/28(火) 14:37:33 ID:MOZlBCjA
いえいえ。お気になさらず助言いただければ幸いです。 ソフトウェアを起動して、”Alt+X"で終了させるところまで1括りにしたいんです。 それを、D&Dしたファイル全部に対して同じ処理を施すといような形です。 スクリプトもプログラムも理解しきれてないのですが、 サンプルを組み合わせてここまで形にしたのですが・・・。 教えてくださる方がいらっしゃいましたら、引き続きお願いいたします。
JScriptわからん For Eachは使えるんかな ちょっとリファレンス読んでくる
for...in だが、まあまともには使えないな 配列に対してくらいか。コレクションオブジェクトには使えない ほとんどのオブジェクトに対して、そのプロパティを列挙するって働きになる
627 :
名無し~3.EXE :2006/03/28(火) 20:39:39 ID:aancQ8Kb
Set oTs1 = Fs.OpenTextFile(WScript.Arguments(0))
で解決しました。
>>614
ただ単に定数をそのまま記述していたってヲチですか
まぁ初心者はコピペから始めるものだから、そういうこともあるだろう。
Constを使って定数を定義する云々は教えてあげなくてもいいですか?
直接数字ぶっこんでも特に問題はないしねえ。
それに、そもそも自分の書いてる命令の意味を理解してない段階で、
細かいことを教えても混乱させるだけになりはしないかな。
もうちょっと細かいところに興味を持ち始めた段階で教えてあげた方がいいと俺は思う。
興味を持たない人に無理に教えて、ウザがられるのもやだし。
>>627 さんが興味があるなら教えてあげよう、ぐらいでいいんじゃない?
632 :
618 :2006/03/28(火) 21:39:15 ID:MOZlBCjA
>>622 似たような質問をされた方がいらっしゃったんですね。
しかしながら、WScript.Arguments.Unnamed.Itemを、
どう利用すればいいのかも全く解らないのです。。。
ちょっと自分で調べてみます。。。
色々調べてやってみようと思ったんですが、垣根がまだ高かったですかね・・・・
>>618 いやその前にこのスレ読めよ。
直前に同じ事で引っかかった人がいて、説明したばっかりなんだ。
まだ1週間も経ってない。
それでまた説明を書くのって何かおかしいだろ?
掲示板なんだから、読めばいいだけのことなんだからさ。
634 :
618 :2006/03/29(水) 00:52:29 ID:5Em6VaBu
>>633 ごめんなさい。読んでも根本的なところを理解できてないので、
全く理解できなかったんです。スミマセンデシタ。
ActiveScriptRubyでどのオブジェクトにもぶら下がってない関数 InputBox, MsgBoxはどう呼べばいいんですか? これはVBS固有の機能でしょうか。
VBS 固有の関数なら固有だな。Ruby に実装されてるかどうかは知らん。 InputBox は代替物がなかなか無いが、MsgBox なら WshShell の Popup でほぼ代用できる。 あとは wsf にする手もあると思うが、それで Ruby から他の言語で定義した関数をどう呼ぶのかは知らん。
表示はPopupで出来ました。 ありがとうございます。 InputBoxの代替はなさそうですね。 Win32APIにあれば呼べるんですが、それもなさそうな感じです。 exe作るしかないのかな・・・
普通にVBS使えばいいだけなのでは…? exeでもいいんだろうけど、スクリプトの使い分けで十分なような。
639 :
名無し~3.EXE :2006/03/31(金) 00:48:31 ID:VEkmjKaO
..636 これじゃ駄目なん? (ActiveScriptRubyが無いのでJScriptですまんが…。) <!-- test.wsf --> <package><job> <script language="VBScript"> Function vb_input(prompt, title, default) vb_input = InputBox(prompt, title, default) End Function </script> <script language="JScript"> var strIn = vb_input("Information", "Title", "Default String"); WScript.Echo(strIn); </script> </job></package> <!-- End of test.wsf -->
もちろんJScriptならそれでいいが、RubyにはRubyなりの事情もあろう。 暗黙に宣言されたオブジェクトとかが作られるんかね?
<!-- ちらしの裏 人事異動で必死で考えて楽をさせてもらったスクリプトが意味を無くしたな。 後任はプもわからん一般事務員でサポートしたくないから、引き渡さんけど ちらしの裏 -->
プって何だろう 後任に能力を超えたツールを与えるとサポートに呼ばれる スクリプトといえどもそれは同じ 確かにやめておいた方がいいかもしれん
>> 642 「プ」と書いて 「プログラムの「プ」の字」 と読めば意味が通りそうだよ。
いつからここは、プログラムが解る奴が偉そうにするスレに変わったんだ?
645 :
名無し~3.EXE :2006/03/32(土) 05:56:15 ID:jNOwyvPq
どなたか
>>383 もお願いします。
とりあえず以下の方法はNGです。
・wscript.exe.manifestで定義 → システムディレクトリを弄らなければならない
・Pathを通す → 通してもダメだし、レジストリ使うので
・GetObject → 使い方が悪いのかもしれないけど、目的の用途に使えないっぽい
とにかく、システムディレクトリやレジストリを弄らずに実現できる方法を探してます。
宜しくお願いします。
>>644 プログラムに限ったことではないけど、わからない側の人間が偉そうにするのは異常ですよ。
>>641-643 について言っているのなら、それは偉そうにしてるというのとは違う。
勉強する気のない人間を中途半端に助けると、何度でも助けてもらおうとするから時間の無駄になる。
だから見捨てる方がよい、と言っているだけ。
>勉強する気のない人間を中途半端に助けると、何度でも助けてもらおうとする
>>646 は、どうやらロクでもない人間関係しか築いてこなかった人物らしいな
利用されまくり乙であります!が、全部が全部そういう人間じゃないと思われ
疑心暗鬼になるのは判るけどなー
助け合い頼りあいは大事だけど、それは相互にされなきゃ意味ないからな…
見ず知らずの人が尋ねる掲示板での質問に見返りを求めるってのはちょっと・・・
>645 ActiveX.dllやocxをdeclare宣言だけで呼び出したいってなら 標準モジュールに関数、*.defにエクスポート定義書いて コンパイル後、リンカオプションに /DEF:エクスポート定義ファイル を付けてDLLを作る
レジストリ等を使わずに呼び出せるdllの作り方ではなく、 レジストリ等を使わずに既存のActiveX.dllを呼び出す方法じゃないの?
教えもしないで一言二言多い奴がいるっぽいな
MSのやつと名前が紛らわしいね。 ファイルに書き出して実行するって書いてあるけど ノートン先生対策になるのかな?
ならないだろう。書き出した時点でチェック入るはず。 // そうでなきゃそのアンチウィルスソフトはゴミ。 まあそもそも MS のエンコーダでいいじゃんと思うけど。
>>654 そのexeを叩いた時に、”ファイルを一時的にどこかに書き出して実行する”仕様みたいだね。
だからD&Dのような処理だと、exeにD&Dした瞬間に吐き出されたファイル自体へ
取得したデータを渡すようにしないとダメだろうね。
>>647 友人や仲間が相手ならいいんだけどね。
自分でやろうともしないで面倒を押し付けてくる奴と、友好関係を築く必要は感じないな。
他人でも、努力している人なら無償で助けてあげようって気になることもあるけどね。
>>649 それは最初っから掲示板についての話じゃないよ。
掲示板でなら、勝手な要求をする人がいても無視されるだけのことで、問題にはならないんじゃないかな。
勝手な憶測であれこれ書くぐらいだったら無視すればいいんじゃないの?
662 :
名無し~3.EXE :2006/04/08(土) 10:09:44 ID:JepkcL+y
VBSのSendKeyでCtrl+Alt+Delを送出したいのですがこれはどうすればいいのでしょうか? 過去ログをさかのぼってみたのですが同時送出のやりかたが乗ってなかったのでどなたか教えてください。
そりゃ過去ログには載ってないだろうな。 WSH(VBS)のヘルプ(リファレンス)のSendKeysの項目にばっちり載ってるようなことを わざわざ聞くようなバカは居ないから。 それともSendKeysではなく本当にSendKeyだったりするのか? 俺はSendKeyの方は知らないけど。 つーか、キーを送ることに拘らず、キーを送った結果起こることをVBSで実行すればいいじゃん。 例えばXPの標準環境ではCtrl+Alt+Delでタスクマネージャが起動するが、 これでいいならRunでタスクマネージャを実行してやるだけでいい。 Ctrl+Alt+Delで他のことが起こるにしても、それを直接行えばいいだけ。
余計な一言を書く奴がどうも多いよな・・・見てて不愉快になる。
>>662 Ctrl+Alt+Delでタスクマネージャー出したいんだったら、
Ctrl+Alt+Escでも出せるよ。
Win2Kだったら後者がお勧め
>>663 は言葉悪いかもしれないけど、普通にググっても出てくる範囲は
さすがに調べる気あるのか?と思われても仕方ない面はあるよ。
聞く前にある程度調べてなさそうな奴の発言が多いから、見ていても
不愉快な煽りが増えるんだよ。
頼むからググって調べられる事は調べてね。
666 :
名無し~3.EXE :2006/04/08(土) 16:05:15 ID:74D2C8dA
>>663 タスクマネージャーを起動するだけじゃ駄目なんですよ。
RDPの終了後にスクリーンセーバーも起動せずにマウス入力やキーボード入力も無視する、
ブラック画面状態になります。これから復帰するのがCtrl+Alt+Delしか無いのでして・・・
SendKeyでもSendKeysでもいいので教えてもらえないでしょうか?
WShell.Sendkeys("^%{Del}")
こう書いてもXPでCtrl+Alt+Delを押したときの画面が表示されないので。。。
ちょっとやってみた。 ある特定のアプリケーションに下のコードで Ctrl+Shift+Del は送れるんだけど、 何にもないところで Ctrl+Alt+Del でタスクマネージャって言うふうには行かないみたいですね^^; WS.SendKeys "^+{DELETE}" WSHのヘルプファイルに書いてあった () で囲むのもやってみたけどだめでした。 ブラック画面状態から戻る方法、ほかにはないんですか? ダミーで何か適当なアプリ起動するとか、スクリーンセーバー起動するとか。
668 :
名無し~3.EXE :2006/04/09(日) 00:43:53 ID:ebqchdRt
Set xh = CreateObject("MSXML2.XMLHTTP") On Error Resume Next If Err <> 0 Then Err.Clear Set xh = CreateObject("Microsoft.XMLHTTP") End If xh.Open "GET", Url, False xh.Send If Err <> 0 Then Exit Function 上記Scriptでxh.Sendを実行してから次のステップに進むまで4秒くらい(URLはyahooやInfoseekなどどのサイトでも) かかりますがみなさんもそのくらい、時間がかかりますか? OSはWinXPです。
つい Date 型の format メソッドを延々定義してしまっていた。
>>668 まず 1 秒未満だな。
670 :
668 :2006/04/09(日) 14:50:45 ID:MZ+WzGSq
自己レス IEでPROXYの設定がしてあると遅く、PROXYの設定をはずすと1秒以内に処理が終わることが分かりました。 串はとあるUSサイトのものを設定しています。 そこでパケットッモニタで調べたが、実際はPROXY経由の通信はしていないようです。 MSXML2.XMLHTTPの仕様なんでしょうか?
proxy 経由してるはずだけど……。 OS が多少限定されるけど MSXML2.ServerXMLHTTP 使うとか。
672 :
668 :2006/04/09(日) 15:41:55 ID:MZ+WzGSq
>>671 勘違いしてたようで、PROXY経由でした。スイマセン
MSXML2.ServerXMLHTTPだと直接接続になるんですか?
c:\foo.txt にアーカイブフラグが立っていたら何かを処理してフラグをクリアするという処理はどう書けばいいんでしょうか?
>>673 ○Fileオブジェクトを取得
Set filespec = "c:\foo.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(filespec)
○アーカイブフラグを取得
f.attributes and 32
○アーカイブフラグをセット
f.attributes = f.attributes + 32;
○アーカイブフラグをリセット
f.attributes = f.attributes - 32;
FileSystemObject の File オブジェクトの Attributes プロパティ使えばよかろ
○アーカイブフラグをセット f.Attributes = f.Attributes Or 32 ○アーカイブフラグをリセット f.Attributes = f.Attributes And (Not 32) ではあるまいか
同じだよ
取得した後、分岐するんじゃねぇかな? どうでもいいけど
680 :
名無し~3.EXE :2006/04/11(火) 17:42:48 ID:4kcYmlhd
VBSで現在の日付を”20060501”のような形式で得る方法がありましたら教えてください。
Replace(FormatDateTime(Now, 2), "/", "") こんなのどうだろ
Function Hizuke() d = Now Hizuke = Year(d) & Right("0" & Month(d),2) & Right("0" & Day(d),2) End Function
・VBSの正規表現を使ってファイル名から3桁の数字列を取り出したい ・3桁以外の数字列にはマッチさせたくない ・ファイル名に規則性はない 正規表現 (^|\D+)(\d{3})(\D+|$) だと dkfja0721-dy095-081.txt の場合 081 がマッチしません ここ数日調べてますが詰まってしまって、どう記述していいやらわかりません どなたか解決法教えていただけないでしょうか
(?:^|\D)(\d{3})(?=\D|$)
monadマダー?
>>685 ありがとうございました
肯定先読みっていうのを使うんですね
勉強不足でした
教えてください。 CreateMHTMLBodyで作ったmhtmファイルと、IEの「名前をつけて保存」で作った同ファイルに容量の違いがあります。 この差というのはなんなのでしょうか?
>>688 容量に関わってくる部分はフィルターフラグとエンコードかな。
画像を埋め込めるmhtmlにおいて、画像を取り込まない設定を使えば
当然容量は減るし、他にもいろんなフラグがある。
エンコードが違えば容量が変わってくるのは言わずもがな。
あとはリファレンス見ればわかるはずなので自分で調べましょう。
691 :
名無し~3.EXE :2006/04/17(月) 20:23:49 ID:o+Bf6AmH
wsh で JScript を実行する時に使われる実行エンジンと IEで JScript を実行する時に使われる実行エンジンは 同じものですか?またそうであれば両者でできることについての制約は同じですか?
WScript オブジェクトが暗黙に宣言されてるかどうかって違いはあるな
WshShell.Run "cmd.exeどうこう で、ウィンドウを最小化するにはどう書けばいいわけ? ぐぐってもstart /minしかでてこない。
MSDN の WshShell.Run の項目では解決しない?
長い時間ループしているVBSの処理を何かのキー入力で中断させたいのですが、 うまい方法がありますでしょうか。 今は別のVBSを同時に走らせてMsgBoxのボタンを 押してOSのユーザー環境変数を変更し、それをフラッグに使って本体の処理を中断 できるようにしています。 とても不細工みたいなので良い方法をご教示ください。
>>695 そういう操作が出来ない(無理矢理やろうとすると不細工で面倒)かわりに
手軽に使えるのがwshというものだが。
キーイベントを使いたいならそういうことが出来るまともな開発言語に移行してくれ。
それがイヤなら不格好でも我慢しな。まぁ俺なら不格好にやるにしても
MsgBoxなんて使わずにAutoHotkeyでも使ってグローバルホットキーを割り当ててやるがな。
>>696 レス有難うございます。AutoHotkeyですかorz まともな開発言語を覚える暇がないので、wshでなんとか
やっている状態なんです。 不恰好でも何とか動いているので我慢することにします。
HTAにすりゃHTMLを使って簡単に中止ボタンとかGUI実装出来るよ。 俺も無限ループ持たせたスクリプト常用してるけど、 バッチファイルで任意のタイミングで中止出来るようにしている。 type nul > wshflag.txt みたいなバッチファイルで、スクリプトの方には if (fso.FileExists("wshflag.txt")) { fso.DeleteFile("wshflag.txt"); WScript.Quit(); } みたいなコードをループ内に組み込んでいる。これはこれで不細工だけどね。
699 :
695 :2006/04/20(木) 20:59:17 ID:X6lWO4wR
>>698 皆さん苦労してるんですね。 ファイルをフラッグに使うと何だかHDDを傷めるような気がして
メモリで済まそうと環境変数を使っているんですが、どうなんでしょう? スピードも
環境変数の方が速いと勝手に思って使っていますが、 ディスクキャッシュとのからみも
あっってわけ若布の状態です。 HTAは使ったことありませんが、 WSHが何とか使える程度の
能力で簡単に覚えられるのでしょうか? 簡単に乗り換えられるのならトライしてみようかな?
>ファイルをフラッグに使うと何だかHDDを傷めるような気がして そういう下らないことは考えなくていい
完全な排他制御は理論上無理だからね
クリップボードに特定の文字列を入れたら終了とか、 wscript.exeのプロセスが2個以上になったら終了とか、 ある名前のウィンドウが開いたら終了とか、 色々考えられるね。
プロセス終了でいいやんけ 中断後さらに何かやりたければメインプログラムからループだけするプロセスを起動するとか。
explorer.exe のプロセスを終了する良い方法ないでそうか? taskkill 使うとログオフ扱いで「終了オプション」 wmi で Process.terminate だと終了するも即再起動しちゃいます やりたいことはindex.datの削除なんだけど・・
同じなわけねぇじゃん。
>>130 の、INIFileObject.js使ってみたよ
作者の耳たぶを甘噛みしちゃいたいくらい、すっげー便利だった。
でさ、INIFileObject.readFromFile(file) の
「line = file.ReadLine();」は,
「line = file.ReadLine().replace(/;.*$/mig, "");」
とするとコメントアウトされたセクション・キー名を
拾わなくなるんで、ちょっとだけ使い勝手が向上するかな
とか思った。
708 :
連投ゴメン :2006/04/23(日) 04:01:07 ID:dT6brCX/
>>695 SeraphyScriptDialog ってコンポ-ネントの DLL(scrdlg.dll)を
どこかに放り込んで、コマンドラインから「regsvr32 DLLのパス」
と登録しておけば、任意のキーが押下状態かどうかを返す
「GetASyncKeyState(n)」が使える筈だよ
709 :
695 :2006/04/23(日) 10:49:38 ID:LNVmHWno
>>708 おおお! 出来ました! こんなOBJECTあるとは知りませんでした。
他にも色々便利に使えそうで、WSHの能力大幅アップ。 有難うございました
710 :
704 :2006/04/23(日) 11:12:34 ID:asA1TsHJ
/F
712 :
名無し~3.EXE :2006/04/23(日) 22:29:59 ID:rpt1yEwh
xyzzy使ってたほうがましだな
>>713 xyzzyでPerlScript, Python, RubyScriptのマクロを書く方法を教えて
>>714 xyzzyを起動し、キーボードを打ってPerlScript, Python, RubyScriptのマクロを書く
実行できないと意味ねー
臭い爺は全然リンク先の意味わかってないだろw
xyzzy=「くさいじじい」=「臭い爺」
719 :
通りすがりの名無しさん ◆NNS/AVDM5A :2006/04/24(月) 21:21:42 ID:Cj9M/K0x
hta でインターフェイスつくって処理しているんですが、 チェックボックス3つで、どのチェックが付いているかIFで判別してるのですが、 思った結果にならず、理解に苦しんでいます。 以上<script language=VBScript>から始まる序文 -- If A_Check.checked = true Then If B_Check.checked = true Then If C_Check.checked = true Then CheckNo = "0"'A_/B_/C_ Else CheckNo = "1"'A_/B_ End if Else If C_Check.checked = true Then CheckNo = "2"'A_/C_ Else CheckNo = "3"'A_ End if End if Else
If B_Check.checked = true Then If C_Check.checked = true Then CheckNo = "4"'B_/C_ Else CheckNo = "5"'B_ End if Else If C_Check.checked = true Then CheckNo = "6"'C_ Else CheckNo = "7"'Error End if End if End if -- 以下 html CheckNo 0 〜 3 は想定通りなんですが、 4 〜 7 が思ったとおりにならず、全部チェックがなない場合は 7 になると思ったのですが、 全部チェックが無いと 6 に、C のチェックが逆になったように動作します。 ならば逆に書けばいいだけなのですが、理解出来ない動作も問題ですので。 これは動作的に正しいのでしょうか?
いや、試した限り期待通りなようだが? て言うかなんつー泥臭いコーディングを。 Const a = 1 Const b = 2 Const c = 4 Dim CheckNo : CheckNo = 0 If A_Check.checked Then CheckNo = CheckNo Or a If B_Check.checked Then CheckNo = CheckNo Or b If C_Check.checked Then CheckNo = CheckNo Or c これで。 チェック済みなのはむしろ 1 にすべきだろう。
>>721 回答有難うございます。
>いや、試した限り期待通りなようだが?
→ 原本のコードだとなぜかNoチェックで6が返ってきて考えあぐねいているんですがね。
もっかい見直して見る価値ありかもです。
で、頂いたコードですが、なるほど。
>CheckNo Or a
いかんせん素人丸出しですが、この構文は知らなかったです。
結果も無問題、有難う御座いました。
デスクトップの何も無いところや、エクスプローラのウィンドウのファイルの無いところ、 スタートメニューのプログラムの中の何も無いところやタスクバーの何も無いところ このあたりって右クリックメニューを呼び出す方法ないですよね? アイコンを名前順に並び替えたりとかしたいんだけど、どうにも方法が見つからないんです。 なかなかうまくいかないなぁ・・・。
> このあたりって右クリックメニューを呼び出す方法ないですよね? いいえ。 > アイコンを名前順に並び替えたりとかしたいんだけど、どうにも方法が見つからないんです。 見つかったよ。 > なかなかうまくいかないなぁ・・・。 うちではうまくいったけど。 「ないですよね?」という確認と、「見つからないんです。」という報告と、 「なかなかうまくいかないなぁ・・・。」という愚痴だけで、 質問では無いようなので具体的なやり方は書かないでおく。 例え質問だとしても、ここは丸投げ上等のスレじゃないし。
726 :
723 :2006/04/27(木) 01:09:06 ID:KCQopRU6
>>724 失礼しました。
かなり長い間調べていたので、諦め半分だったもので…。
Shell.Applicationでデスクトップを指定してもダメですし、色々指定してみたりはしたのですが。
レジストリ操作でできるのは知っているのですが、WSHでもできるのならもうちょっと調べてみます。
ありがとうございました。
727 :
723 :2006/04/27(木) 03:20:22 ID:KCQopRU6
WSHでQuickTime つかいたいんだけど 誰かおしえてちょんまげ
>>728 勝手に使えばいいじゃん。誰も止めたりはしないからさ。
あ、QuickTimeの使い方がわからないとか言うなよ。
んなのはwshとは全く関係ない話だからさ。
QuickTime ActiveX コントロールの使い方も向こう参照ね。
>>3 みたいにwsh始め、ActiveXが扱える言語から使うことを
主要としたもの(というかそれ以外に使い道が無い物)ならまだしも
主として別のインターフェイスを持ち、おまけ程度でActiveX化されたり、
ActiveX版が付属するようなものの使い方はスレ違いと言わざるを得ないから。
あくまでも使いたいソフトの使い方は熟知(最低でもやりたいことは出来るというレベル)した上で
wsh的な質問があるなら具体的に書いてくれ。
733 :
名無し~3.EXE :2006/05/02(火) 05:51:46 ID:J33gtCID
キー入力を待って受け取ったものを返すような関数のあるActiveXありますか?
もしかして、俺が作ったアレのこと? いや、公開してないからこれは除外か。 俺は見つからなかったから作ったんだが、他にもあるのかねぇ?
ありますか?って聞いてるんだから、既存の物を知ってるわけじゃないんじゃない?
「ありますか?」=「よこせゴルァ」
CreateMHTMLBodyでmhtファイルを作る際にエンコード(quoted - printable等)の指定は可能でしょうか? 不可能な場合、他の方法で、なにかありますでしょうか?
739 :
名無し~3.EXE :2006/05/07(日) 14:16:28 ID:vSHBjUrs
WScript.Arguments[0]じゃなくて WScript.Arguments(0)を使うって何なの? 気持ち悪い
>>726 > レジストリ操作でできるのは知っているのですが、WSHでもできるのならもうちょっと調べてみます。
723さん!僕は逆にレジストリ操作でアイコンの整列を
する方法を教えてほしいです。
>>739 WScript.Arguments配列
WScript.Argumentsメソッド
WScript.Arguments.item(0)は
WScript.Argumentsオブジェクトのitemメソッド
Set fso1 = CreateObject("Scripting.FileSystemObject") Set obc = fso1.CreateFolder("C:\w") Set fso1 = Nothing: Set obc = Nothing を実行すると、800A004Cエラーになります。なにがいけないのか?間違ってないと思うんだけど
743 :
742 :2006/05/07(日) 18:53:34 ID:N83ueXlk
できた。("C:\w.w.w")のように . が入ったとき 800A004Cエラーになる。 TEMPフォルダ内のファイルを消したんだけどやはりエラーになる
WScript.Argumentsは配列でもあるのかと思って調べちゃったじゃないか。
745 :
名無し~3.EXE :2006/05/07(日) 20:31:06 ID:vSHBjUrs
>>741 WScript.Argumentsが配列じゃないのが直感的じゃないと思う。
なんでメソッドなのか分からない
COM オブジェクトだからさ。
747 :
741 :2006/05/07(日) 22:43:09 ID:H/iICkSL
WScript.Arguments(0)は WScript.Arguments.item(0)の省略 WScript.Arguments[0]は件のメソッドから作った配列 だと勝手に思ってる ところでWScript.Arguments.lengthってのもあるな
WScript.Arguments[0]は未定義でしょ?
749 :
742 :2006/05/08(月) 01:16:36 ID:W3C5Qf7g
あの・・
>>750 それとはエラーコードが違う。
せっかく質問者がエラーコード書いてるんだから、ちゃんと読もうね。
Path not found 実はCドライブがなかったりして (゚∀゚)アヒャ
エラーコードがどんなエラーか調べる義務はないから適当な回答でも文句言えない
エラーメッセージを省略する方が悪い
>>752 どうやったらそんなエラー出るんだと思ったが
たしかにx:\とかだと出るね
754 :
742 :2006/05/10(水) 19:29:15 ID:DKFPOkOL
ののしってください。"C:\a\w.w.w"の\aを先に作ったらできた
氏ね屑
ブタ野郎
つまりなにか、
>>742 は
上位ディレクトリ("a")が存在しないうちに下位ディレクトリ("w")を作成しようとしていたからこそ
吐かれたエラーなのに、コードから肝心の"\a"の部分を削った上で助言を求めに来ていた、と、そういうわけか?
そういうわけなのか? アァン?
761 :
742 :2006/05/12(金) 00:26:51 ID:bs+ewIev
>>740 HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Bags\1\Desktop\ItemPos(解像度ごとに複数)
のバイナリ値がアイコンの位置の記録なので、これを消すだけです。
それから、同じキーにあるFFlagsのDWORD値が、アイコン整列の方法を表しています。
ちょっと今、手元にメモが無いのでうろ覚えだけど、たしかアイコンの自動整列のフラグが4、等間隔に整列が2だったと思います。
ただしこれは即反映はされないし、ログオフ時に書き戻されるので面倒なんですよね。
手っ取り早いのはexplorer.exeを落とすことだけど…。
デスクトップのアイコンの並びあたりのメニューって、リストビューですよね。
VB.NETとかからなら簡単にできるのはわかったんだけど、WSHでリストビューを弄る方法がみつからないです。
Shell.ApplicationからだとフォルダとしてしかVerbの出し方が判りません。
他にもタスクバーの固定やスタートメニューのプログラムを名前順に並び替えなんかの機能も
レジストリをいじらずに操作する方法があればいいなと思い、Verbでできないか調べています。
実際にできている方もいらっしゃるそうですし、私は何か根本的なことを見落としてるんでしょうか。
何かヒントをいただけませんか?
763 :
名無し~3.EXE :2006/05/12(金) 23:25:47 ID:5AdKiPwI
おっ?意外といいソフトだぞ。
リストビューって何?
手首がもの凄い勢いで飛んでいってしまう奇病
>>768 マジンガーは肘から先だからチョト違うけど
感じは似ているね
>>769 ボインミサイルの方が感じは似てないかな。
>>762 要するにデスクトップの何もないとこを右クリック→アイコンの整列→アイコンの自動整列
をwshからチェックしたいってことか?できるかどうか俺はわからんな。
リストビューじゃなくて単なるネストしたメニューじゃない?
772 :
740 :2006/05/13(土) 02:48:38 ID:1CoHAT8E
>>762 情報ありがとうございます!
でもログオフで書き戻されちゃうんですね。
explorer.exe を落とすのもまた荒技ですしw、難しいですね。
僕も Verb を使った方法を調べたことがありますが結局見つからず、
キーシーケンスのエミュレートで妥協した覚えがあります。
>>771 ネストしたメニューからリストビューを弄ってるって事みたいです。
VB.NETの方で調べてたら、そのリストビューを直接弄る形で操作できました。
HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Bags
以下のキーと値を全て消してexplorer.exeを落とすと、正体を見ることができます。
(設定を戻しにくいので、試すときは実験用のアカウントを作るとかして下さい)
WSHからリストビューを弄れなかったので、メニューを弄る方法を探すようになったんです。
MSDNでShellのAPIを見たら役に立ちそうなのもあったんですが、スクリプトからは呼び出せないようなんですよ。
やっぱり無理なのかな…
dynacallは?
vbsで必死こいてテキストファイルをいじってたけどひょんなことからSEDやAWKを知った 適材適所でSED,AWKを使った方がラクなこともあるな お前らは他のスクリプト言語も使ってますか?
とりあえずスクリプト言語はWSHで使えるものだけで大抵事足りてる
>>5 事足りなければ他スクリプトの使用を考慮する前に
COMを自作してどうにかしてしまう。
マクロ言語は使うソフトに合わせにゃならんので、
DMonkeyだのPPAだの独自言語だのいろいろ覚えにゃならんがな。
778 :
762 :2006/05/14(日) 23:45:50 ID:1rwczZGC
>>740 explorer落とすと他にも影響出ますからねぇ。
レジストリのRunOnceに登録して、explorerが起動する前に動かしてしまうという方法もあります。
>>775 dynacallって、スクリプトからAPI叩けるってやつですよね。
それも考えて、どんな感じか見ようと探したんですが、DLのURLが変わってるのか入手できませんでした。
でもまあ、API使うのならVB.NETでもいいかな?と思ってます。
とりあえずAPIの解説書とか買ってみたんですが、素人には難しいですね。
理解するには時間がかかりそうです。
皆さんどうもありがとうございます。
もし何か情報があれば、何かのついででも結構ですので教えていただけるとうれしいです。
>>776 テキストを大量にいじる時なんかは、Perlを使うことがあります。
Active Perlをインストールしなきゃいけないので、余程じゃなきゃ使わないですけど、
VBScriptよりテキストがいじり易いです。
Perlの文字列処理の強さは異常
jcode.plとか参考にして、vbs版作ったりできないかな vbsだけでできると便利そう
大抵は ADODB.Stream で事足りると思うが
XMLHTTPで取得したバイナリをADODB.Streamを使わないで保存するよい方法ないですか?
それじゃ何のためのADODB.Streamか解らなくなる
>783 なんでADODB.Streamだとだめなの?
Win98でMS06-014を適用すると使えなくなるから。
そのへんが通用しなさそうだから慌てているのですよ…
少なくとも二種類提示されているが、どの辺が通用しないんだ
MS06-014当ててもレジストリでADODB.Streamを無効にしてるわけではなさそうだということ。 実際の環境は明日会社に行かないとないのでこの辺で。
教えてもらったURLも見ないっていうのはどうなんだろう。 既に出来ないものと思い込んでるのかな?
compatibility flagを0にしても効果ねえよ。カスめ。 結局Win98用のMDAC2.8用の修正プログラムの問題だな。 MDAC2.8SP1とそれ用のパッチ当てれば問題なし。 ほんと使えない連中ですね。もういいです。
>>793 それを回避する方法がURL先にあるんだが…
>>90-100 に貼ってあるURLの先にそれがあるってか?
読んでも俺が試してだめだったことしか書いてねえんだよ。
WSHからバイナリをいじりたかったら素直にBASP21入れとけ。 BinaryReadやBinaryWrite、BinaryConcat、MidBなどなど、いじり放題。 よくぞフリーで提供してくれてるもんだ。
>>796 >>96 に書いてあるレジストリを弄らない方法はダメだったのかどうなのか
そこを報告しなきゃ次の意見が出てこないのは当たり前だろ
普通に会話を進めるように進めればいいだけなのに、何キレてるんだ?
セキュリティパッチでブラウザで使えなくするのと、 WSHでも使えないのは別の話な気もする。
キレてるのはご指南が的外れだからだよ。
>>799 全くそのとおり。
結局 Windows9x-MDAC28RTM-KB911562-x86.exe に入っているmsdart.dllがwin9xのkernel32.dllと
互換性ないのが原因だった。このファイルをパッチ当てる前のものに戻しただけで直ったよ。
801 :
名無し~3.EXE :2006/05/16(火) 19:37:03 ID:/94mq9Ds
へー
おまいらPowerShellってどうよ
>>800 君の説明が悪かったせいで、みんなの説明が的外れになってるんだ。
自分の脳内でわかってても、ちゃんと伝えなきゃダメだよ。
相手は超能力者じゃないんだから。
いまだにWindows98を現役で使ってる人は、もう多くないんだよ。
どのスレでも時代遅れの猿は厄介だな。 MSの延長フェーズが後一月半を切ったOSに しがみついていなければならないとは哀れw
いや、Win98じゃないと動かない開発環境とかあるし 新しい開発環境を導入するほど需要はないけど 古い製品のメンテで必要だから切るに切れない・・・みたいな状況はある。
>>802 Perl風ってことらしいけど、情報が少ないし、現時点で使うメリットなさそう。
もうちょっと情報が出てきて使えそうなら使うけど、今のところはスルーかな。
何か別の言語にない強力な機能とかってあるのかな?
標準搭載されるようになったら、多分いじってみる。
わざわざインストールして使うのなら、それなりに情報のあるPerlを選ぶよ。
808 :
名無し~3.EXE :2006/05/17(水) 19:54:04 ID:bjnpSFQr
>>800 パッチ適用前のmsdart.dllください。
>>808 mdac_typ.exe /c /t:<展開先のパス>
展開先から拾う
810 :
名無し~3.EXE :2006/05/20(土) 23:49:42 ID:p7S0H+QV
vbsで全角半角変換ってどうやればできるんでしょうか?
Basp21 使うとか 英数カナくらいなら力業でも良いか まあちょっと検索すればすでに存在してそうだけど
変換テーブル作ればいいんじゃね?
>>811 wshにもvbsにも全半角変換関数は無いので
BASP21とかを導入してそいつにやらすか、
変換関数を自分で書くかだな。
俺は自分でCOM作ってやってるけど。
>>814 COMってどうつくるんでしょうか?
もしくはうpしてください
クレクレ君キタ━━━━━━(゜∀゜)━━━━━━ !!
どうせCOM使うならBASP21でいいじゃん?
JScriptで全半角変換関数を作ったことある
BASP21でできるのにCOM作る意味もわからんが、 それを欲しがる奴はもっとわからんな。 作る方は自分好みの実装にするって意味もあるかも知れんが 貰う側にメリットはないだろ
わからんといいながら、 自分で作る理由いっちゃいましたよ? ↓ > 作る方は自分好みの実装にするって意味もあるかも知れんが
>>815 開発環境でActiveX DLLを作る。
823 :
820 :2006/05/22(月) 23:18:41 ID:EGrS542n
>>821 やっぱり理由ってそれしかないのかねぇ?
別にBASP21の実装は使いにくくないと思うんだけどな。
他に理由があるかもしれないから、わざわざわからんと断ってるんだ。
まあ、君がわざわざ2chで馬鹿晒す意味すら俺にはわからんしな。
書く方は自分がいいところに気がついたと思ったって意味もあるかも知れんが。
すまんが、COMって何?
825 :
820 :2006/05/22(月) 23:23:27 ID:EGrS542n
次にお前は「ネタにマジレス…」と言う
「会社の方針でフリーウエアは使っちゃダメといわれました」 なんじゃないの?
Pro 版買ってもらうチャンス!
>>826 それで、どこの誰とも知らん相手に貰うかな?
余計に怒られるような気がするけど。
貰った後で自分が作ったと言い張るつもりだった…とか?
管理者がアホだとフリーウェアでさえなければOKっていうところもあるのかなあ。
わかったような、わからんような。
>828 簡単なチェックリストがあって、それに違反してなければ 無料有料問わず違法コピー以外はOKって会社なら知ってる。 チェックOKのソフトウェアが一覧表になっていて、 一覧表にないソフトをインストールする場合は自分でチェックして表に追加しておく。 ・・・WinMXとWinnyがOKになってた時点で実態については察してくれって感じだが。
弊社の意味分かってる?
>>831 「お前の会社の話なんだろ?」という意味で言ってるんだろう。
2ch初心者か?
2ch初心者! 出た!2ch初心者出た!得意技! 2ch初心者出た!2ch初心者! これ!2ch初心者出たよ〜〜!」
2chで、しかもネタの会話で正しい言葉遣いを求められたのは初めてだよw
「それウチの会社の話じゃん!」ってネタで言ってるんだろ。 文盲なんだな。
836 :
830 :2006/05/24(水) 23:32:02 ID:Zf9wuTCp
ま、ネタだから別に通じなくても困らないんだけどな。 国語の勉強はそれぞれ自分でやるとして、WSHの話でもしようぜ。
ま、某M社から下請け各社に回ってるメールも大概だが。 ・"Winny.exe"でHDD内を検索してください。 ・"Winny2b71exe"でHDD内を検索してください。 ・"btdownloadgui.exe"で(以下延々と続く 該当の実行ファイルが検出された場合は、対象ファイルを削除した上で 情報漏洩が無かったか自社の責任で調査すること。
必死でネタにしたがってる830に糞ワラタwww 弊社ってお前の会社って意味なんだwww ヤバスギ
へいしゃ 1 【弊社】 自分の会社をへりくだっていう語。 三省堂提供「大辞林 第二版」より
841 :
830 :2006/05/25(木) 19:23:11 ID:Uixyh3Sv
>>832 は多分、
>>829 にとっての弊社って意味に深読みしたんだろう。
そういう意図は無かったが、まあネタだから別にそれでもいい。
当初の意図は
>>835 が読み取ってくれたようだね。
IDと名前で別の人と区別できるように気を遣ってたんだが、
>>838 にはわからなかったようだね。
ネタでもないのに、それなんて○○?なんて書き方は普通しないでしょ。
2ch以外で使う奴も普通いないし。
しかしまあ、弊社なんていう知っててあたりまえの単語で、そこまで得意になれるってのは羨ましいよ。
簡単に幸福になれる方が長生きできそうだしな。
842 :
名無し~3.EXE :2006/05/25(木) 19:25:02 ID:s8bo8TbL
age
何れにせよ面白くも何とも無いネタである事は確か。
妙なツッコミ入れるからだろ 分からなきゃスルーしてればいいんだよ
さあ、いい具合に荒れてまいりました。
>>832 がバカなのは間違いないけど
えらい伸びてると思ったらこのザマかw
847 :
名無し~3.EXE :2006/05/27(土) 19:59:54 ID:02AXE8Od
まあ、wsh 知らなくても生きていけるし。
まあ、wsh 知らなくても生きていけるし。
>>832 がバカなのは間違いないけど
そうみたいだけど PowerShellがそこまでってときになんでこんな連載?
WScript.Echo "WSHマスターに俺はなる!" ちょwwwww
謝礼はいくらぐらいもらえるのかな。
バッチとは違うのだよ!バッチとは! 次スレの1に追加したいw
855 :
名無し~3.EXE :2006/06/06(火) 18:21:07 ID:GETR6u8/
文字列を右クリックしてtxtファイルに並び順を変えて 追記したいのですが上手くいかなくて困っています A B C D→を右クリックで範囲選択してtxtファイルにB,A,D,Cと言った具合に追記していく 骨格だけでもご教授願えませんでしょうか
骨格は君自身が示してるな どこが巧く行かないんだ?
Ctrl+Cをsendkey IEをインスタンス化 about:blankにナビゲート ビジーが終わるまで待つ クリップボードから文字列取得 順番入れ換え テキストファイルを開いて追記 テキストファイル閉じる IE破棄
> 文字列を右クリックして 何処で右クリックするのかくらい書けよ。
>>858 中指だろ。そんなこといちいち聞くなよ。
中指(・∀・)イイ!!
WSHでチェックボックスなウィンドウって無理ですか? 窓の手みたいなレジストリ設定を切替えるするスクリプトを作りたいんですけど。 ex) Registry Customize ---------------------------------------------- NTFS LastAccessUpdate ○ Diable ◎ Enable NoDriveAutoRun ○ Diable ◎ Enable ... ----------------------------------------------
つ HTA
862ってチェックボックスじゃないよな
和田ラジヲ
866 :
名無し~3.EXE :2006/06/13(火) 09:15:35 ID:OwcI+uu3
あげ
867 :
名無し~3.EXE :2006/06/15(木) 05:50:25 ID:51bGC6fT
変数に格納されている文字列を元にした名前を持つグローバル関数を定義したいのですが WSH ではグローバル変数・関数が集まっているオブジェクトって存在するのでしょうか? (ブラウザでのJavaScript実行環境における window にあたるオブジェクト) 具体的には InternetExplorer のイベントを監視する為に function observe(s, f) { window["InternetExplorer_On" + s] = f; } のようなコードを書きたいのです。 Global オブジェクトかな、とも思ったのですが、うちの環境(Windows XP sp2)では 参照しようとするとエラーがでてしまいます。なんで…(´・ω・) eval を使う手も考えましたが、実行されるのが関数の中なのでグローバルにできません…。
壁紙変更のためにレジストリを変更した場合 それを再起動やログオフなしに反映させる方法はあるでしょうか? WSHだけでできないなら、反映をシステムに通知する1行コマンドツールのようなものはないでしょうか
>>868 RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters
870 :
867 :2006/06/18(日) 19:45:37 ID:33rS1xM2
>>867 の質問は、改めてプログラム板のWSHスレッドでしたいと思いますので、
こちらでは中止とさせて頂きます。ありがとうございました。
871 :
868 :2006/06/19(月) 22:47:39 ID:+Cvb6y1r
壁紙は反映されますが、背景色は反映されないですね、、むむむ
873 :
869 :2006/06/20(火) 00:17:21 ID:75jg4yfP
一々実況しなくていいよ。
>>872 >>869 じゃ一部の反映しかされないんだよね。背景色はAPI Call使うアプリを呼び出す必要があると思う
簡単に1行コマンドではできないんじゃないかな(俺はしらないスマソ)
実際、画面のプロパティで変更して適用押した時も、壁紙だけだと即時反映なのに
背景色変えると「お待ちください」ウィンドウが表示されてちょっと待たされる。
>>873 普通に質問だろ、一々反応しなくていいよ。
>>867 perl使いがよくこういうのやりたがるよな
evalとかExecuteでやるとローカルになっちゃうのが限界なんだろうな
hosyu
わっしゅ
878 :
名無し~3.EXE :2006/06/26(月) 17:47:42 ID:VBWAtc8c
当方 WindowsMe, WSH5.6 MSHTA.EXEって、渡されるHTAファイルのパスの解釈がおかしくね? パス中にURLエンコードと解される文字列(*1)があったら勝手にデコードしやがる。 ((*1) 正規表現で "%[0-9A-Fa-f]{2}"。) URI的には"%68%6F%67%65"と"hoge"とは等価だが(RFC 3986)、Windows上のパスとしては別物だぞ。 例えば、C:\HTA\%30\内にある <script> window.alert("hello, world"); </script> という内容のファイル"TEST.HTA"を起動しても、ウィンドウが開くだけで何もしない。 "C:\HTA\0\TEST.HTA"などというファイルは存在しないからだ。 ちなみに拡張子を"HTM"に替えれば期待通りに動く(アラートダイアログが出る)。 C:\HTA\内のHTAファイル"SUB%2F1.HTA"や"SUB%5C1.HTA"を起動しても 実際に実行されるのは"C:\HTA\SUB\1.HTA"という別のファイルだ(あればだが)。 これってかなりマズい仕様だと思うんだけど。
URLデコードするだけじゃなくドットセグメントの解決も勝手に行っちゃうみたい。 "..%5CTEST.HTA"という名(普通こんな名前付けないけど)のHTAファイルを起動すると 実行されるのは親ディレクトリにあるTEST.HTAだわ(あれば)。 要するに、受け取ったパスをそのままの文字列として扱わず、URI正規化を行っている。 なんだかね。
D:\desktop>echo %30%30.txt %30%30.txt D:\desktop>set 30=null D:\desktop>echo %30%30.txt null30.txt
ΩΩ Ω な、なんだって〜!!
882 :
名無し~3.EXE :2006/06/27(火) 16:50:28 ID:7znpOhej
D:\desktop>echo %path% とか知らんのか? バッチファイルで、%1 とか使わないのか?
ごめん勘違い
エンコードされた「%」(=25)をさらに延々とエンコードし続けて252525・・・・・・・ってなります リネームしたらFilesコレクションに追加されてまた変換対象になってる感じのようですが 何かミスってるんでしょうか? set fso = WScript.CreateObject("Scripting.FileSystemObject") set sc = WScript.CreateObject("ScriptControl") sc.Language = "JScript" set js = sc.CodeObject path = "○○○" set TargetFolder = fso.GetFolder(path) for each f in TargetFolder.Files newname = js.encodeURI(f.name) if f.name <> newname then f.name = newname end if next
886 :
884 :2006/06/28(水) 23:32:28 ID:+WhutmJU
変換対象って言い方も変ですね(´・ω・`) ループ制御の処理対象とかそんな感じで脳内変換お願いします
(;´Д`)間違えた・・
いったん配列にファイル名を全部コピーしておけばいいじゃない
>>885 そのコードで c:\test\%%.txt が c:\test\%25%25.txt になる。
そのコード自体をループで呼び出してない?
どうあれ、フォルダやファイル名に%は含めない方が無難っぽいな
ファイルのタイムスタンプを修正するにはどうしたらよいでしょうか?
風の息づかいを感じるんだ
ファイルのタイムスタンプを修正出来るCOM使えば良いだけでは? FSOもWMIも確か読みとりしか出来ないからな。
「これが、Dsofile がッ非常に便利なツールとなっている理由です。」 誰かぬるぽでもしたのか?
897 :
名無し~3.EXE :2006/07/03(月) 15:18:11 ID:W/nBSL5P
>>895 サンクス!勉強になった。
だが、しかしちょっと惜しい。
>>896 ほんとにあった。自分は検索で見つけたけど、896さんよく見つけたね。
WSHでウィザード形式のアプリは作れますか? たとえば画面1で名前を入力して「次へ」 画面2でラジオボタンからオプションを選択して「次へ」みたいな 設定ファイルを対話形式で生成するスクリプトが簡単に作れればと思ったのですが
むりぽ
GUI作れるCOM(ScriptFormとか)を使うか、 GUI作れるインターフェイス(HTAとか)使う。 COM使うなら、そのCOMの解説を読めばいいし HTA使うなら、html勉強して、どうしてもわからなければ htmlスレやHTAスレに行けばいい。 またはInputBoxのみで強引にやるとかな。 「名前を入力」はそのままInputBoxで出来るし、 ラジオボタンみたいな選択的な部分は Do blnLoop = False Select Case InputBox(Join(Array("1 選択A", "2 選択B", "3 選択C"), vbCrLf)) Case "1" strResult = "選択A" Case "2" strResult = "選択B" Case "3" strResult = "選択B" Case Else blnLoop = True End Select Loop While blnLoop MsgBox strResult こんな感じにするとかな。あとは2回目以降は、入力値が不正であったことをタイトルに表示するとか、 キャンセルが押されたら処理を中断するとか、いろいろ工夫すればいいし。
俺の場合は、そういうことするときは、cscriptで実行して標準入力使ってる。
(間違って書き込んでしまった。) If InStr(LCase(WScript.FullName), "wscript") Then WScript.CreateObject("WScript.Shell").Run "cscript //nologo """ & WScript.ScriptFullName & """" WScript.Quit End If スクリプトの書き出しは こんな感じ。 進捗状況を確認するメッセージを出しながら進められるので、割と気に入ってる。
ADODBでグループに所属するメンバー一覧を取得するスクリプト書いてるんだけどさ、
1000人以上いるグループのメンバー一覧が取得できないんだ。
dsquery, dsgetでも1000人以上のメンバーを取得できないんだが、これはバグなんだろうか・・・。
ttp://www.mcse.ms/archive44-2004-8-996279.html これを見つけてSize Limitを10000とかにしたけどダメだった。。。
誰か分かる人いたら教えてくれると助かる。おまいらに託す。
905 :
名無し~3.EXE :2006/07/04(火) 21:26:05 ID:AJWvxpJv
WScript.ScriptFullName:スクリプトのフルパス WScript.ScriptName :スクリプトのファイル名 WScript.FullName :exeのフルパス WScript.Name :「Windows Script Host」(←なんでexeのファイル名じゃないの・・)
899です 素の状態で使えるのが魅力だったので htaに行ってみようかと思います 返答ありがとうございました
Dim x x = "ただの人間に興味はありません。" MsgBox x
InputBox("ハルヒ?")
ゴゴゴゴゴ このスレにはエスパーいませんか? APIってのを使いたいんです>< 自分のAPIのイメージ→どっかからDLしてくるもしくは初めからついてる何かにこの町で Cでインクルードってのやった気がするからたぶんそんなのを書く え・・・? 本当に教えてください
肝心なことを書き忘れましたが DeleteUrlCacheEntry というのw使いたかったんですYO(;;) Option Explicit Const ssfINTERNETCACHE = 32'shell:Cache Dim ie Dim sFolder Dim FolderItem Dim I Dim WSHShell Set WSHShell = WScript.CreateObject("WScript.Shell") Set ie=CreateObject("InternetExplorer.Application") ie.Navigate2 ssfINTERNETCACHE Do While ie.Busy Or ie.ReadyState<>4 WScript.Sleep 100 Loop Do While InStr(ie.StatusText,"個のオブジェクト")=0 WScript.Sleep 100 Loop Set sFolder=ie.Document.Folder For Each FolderItem In sFolder.Items FolderItem.InvokeVerb("削除(&D)") Next ie.Quit
ここまで書いた −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
他の言語で単機能exeつくるのが一番簡単。
915 :
名無し~3.EXE :2006/07/07(金) 03:06:35 ID:+/g7KikI
916 :
名無し~3.EXE :2006/07/07(金) 03:07:06 ID:+/g7KikI
/´〉,、 | ̄|rヘ l、 ̄ ̄了〈_ノ<_/(^ーヵ L__」L/ ∧ /~7 /) 二コ ,| r三'_」 r--、 (/ /二~|/_/∠/ /__」 _,,,ニコ〈 〈〉 / ̄ 」 /^ヽ、 /〉 '´ (__,,,-ー'' ~~ ̄ ャー-、フ /´く//> `ー-、__,| '' ,イ / | ,r‐、λノ ゙i、_,、ノゝ ゙l ゙、_ .j´ ヽ('A`)ノ (. { ( ) / ) ノ | ,l~
918 :
910 :2006/07/07(金) 08:22:53 ID:+lpOSGdr
>>913 ie.ReadyState<>4?
>>914 短小エクゼ
>>917 はマジでエスパー
>>910 書くときにそのAA探しまくったけど しかみつからなかtrた
___
./ \
.| ^ ^ |
| .>ノ(、_, )ヽ、.| <あまり私を怒らせない方がいい
__! ! -=ニ=- ノ!___ ので困ってた
/´ ̄ ̄ .|\`ニニ´/ `ヽ
{ .|__  ̄ ̄ヾ }
i;;',,, r---イ /|,、_,, ,',;:',i
.l;';',;,, } /;\ / ヽ / ,;,;;',;l
.|;;',;, } ./;;;,, \ / ;;;;;;ヽ ,,;;','i
i;',, / /;;,',';; ノ--, ',',;;::',',゙i ,,';';i
i;,'; /./,',',';;" / \ ',',',;;,'i ,;',i
/ / i 、 / ヽ ',;::'、| \
ヽヽヽヾ丿 〈 ヽ'' {////
```` ト, i | 、 i´´´
|',',;; } ! ',',;;i
|,','、 / ヽ',',','|
!;;', / !,',;,;'|
919 :
911 :2006/07/07(金) 10:23:53 ID:+lpOSGdr
すみません DeleteUrlCacheEntry ってのを使うやり方を教えてください これがないとクキー右クリックで消してるんです /´〉,、 | ̄|rヘ l、 ̄ ̄了〈_ノ<_/(^ーヵ L__」L/ ∧ /~7 /) 二コ ,| r三'_」 r--、 (/ /二~|/_/∠/ /__」 _,,,ニコ〈 〈〉 / ̄ 」 /^ヽ、 /〉 '´ (__,,,-ー'' ~~ ̄ ャー-、フ /´く//> `ー-、__,| '' ,イ / | ,r‐、λノ ゙i、_,、ノゝ ゙l ゙、_ .j´ ヽ('A`)ノ (. { ( ) / ) ノ | ,l~
>>919 [DllImport( "wininet.dll" )]
private static extern bool DeleteUrlCacheEntry( IntPtr lpszUrlName );
922 :
名無し~3.EXE :2006/07/08(土) 19:09:29 ID:beyK7iQE
>>921 ただただありがとう
゙l 感謝玉 ゙、_
.j´ ヽ('A`)ノ (.
{ ( ) /
) ノ | ,l~
Win2000を使っているのですが、ADODBは普通に使えます。 しかし、アップデートすると使えなくなる、とかいう話を見掛けたのですが、本当でしょうか? Server2003やXPでは普通に使えるのでしょうか?
使えなくはならない。単に使用を禁止する設定がデフォになるだけ。 そのままでは使えないが、許可してやれば普通に使える。 詳しくは過去ログおよびGoogle参照。
IEで使えないフラグがレジストリに立つんじゃなかったか
926 :
923 :2006/07/09(日) 10:03:08 ID:qeI/sQrQ
>>924 >>925 どうも有り難うございます。
一応調べたんですが、実際に確かめることができない事もあり、完全にはわかりませんでした。
2003やXPでは「IEではオブジェクトの生成失敗ダイアログが出るけど、WSHでは全く問題なく使える」という事になっているのではないかと想像するのですが、そういう事でよろしいでしょうか?
>>4 の参考書籍、絶版になっている物が多いですね。
皆さん、勉強や調べ物はオンラインヘルプなどで済ませる事が多いのでしょうか?
でもVBScriptの本とJScriptの本は比較的新しくて評価もいい物があるみたいですね。
>>899 HTAでHTMLのvisibleを変更しながら動くようにすればできる
CSSとかの知識も少しは要るけど、そんなに難しくない
>>927 初心者から始めるのなら、VBScriptハッカーズプログラミングとかいうのがわかりやすいよ
あまり広い範囲はカバーされてないけど、この本を読んでから別の本を読むと読みやすい
最終的にJScript使うつもりでも概念をつかみやすいから一読の価値はある
でも付録のCDは役に立たないので古本で十分
931 :
930 :2006/07/15(土) 00:01:37 ID:JzpMQFPj
すまん。正規表現使って何とかできそうだ。
PerlならともかくJavaScriptじゃ正規表現でネスト付き括弧の対応は表せないはず
933 :
930 :2006/07/15(土) 00:31:20 ID:DEK42adf
934 :
930 :2006/07/15(土) 00:53:37 ID:DEK42adf
何か要望あったら言ってくれるとありがたい。
>>933 うちの環境だと、
js> var n = 10;
js> if (n == 10) {
Exception: '}' がありません。
となるけど、これで正しい動作?
936 :
935 :2006/07/15(土) 01:28:11 ID:wr84mff/
あっと、ごめ、勘違いでした。
937 :
930 :2006/07/15(土) 01:35:32 ID:DEK42adf
>>935 びっくりさせないで〜。
for文に対応させました。
具体的には
---
for( ) <Enter>
としても評価されないようになりました。
938 :
930 :2006/07/15(土) 01:39:46 ID:DEK42adf
あごめん これダメだわ。
一応つっこんでおくと print("{"); で isComplete が false になるのはまずいかも。 あと、こっちも・・・まあ、こんなの書く方が悪いけど一応。 var n = 10; /* { */ var m = 20; // {
938は気にしないで
>>939 そうか・・・そういえばそうだ。
うーん。考えてみます。
指摘ありがとうございます。
941 :
名無し~3.EXE :2006/07/15(土) 01:46:17 ID:8XrEvf+s
>>941 インタラクティブにJScriptが使えます。
rhinoとかSpiderMonkeyとか使ったことある人向け。
943 :
930 :2006/07/15(土) 03:47:27 ID:DEK42adf
わからん。
944 :
939 :2006/07/15(土) 06:57:03 ID:wr84mff/
>>943 つっこんだままじゃ悪いので、括弧の対応を調べるクラスを作ってみましたよ。
http://www.dotup.org/uploda/www.dotup.org4100.txt.html judgeBracket 関数を、このクラスを使うように書き換えてみたら、とりあえず動きましたのでどぞ。
一応、状態遷移でやってて
>>939 で書いたようなのでも、ちゃんと調べられます。各種括弧に対応。
あと nestCount メソッドで、現在のネストの深さが調べられるので、上手くすれば
"--- " っていう表示を "1-- " みたいにネストの深さ付きで表示できるかも。
ところで、入力内容の eval をメソッドのスコープの中でやっちゃうと var で変数を宣言しても使えないような。
var は癖になってるので、トップレベルのスコープで評価するようにしてもらえるとありがたいかも。かも。
945 :
939 :2006/07/15(土) 09:55:48 ID:wr84mff/
946 :
930 :2006/07/15(土) 10:08:03 ID:DEK42adf
>>944-945 うおおおおおおおおおおおおお。
マジありがとうございます。
ここで聞いてよかった。
色々コメントまでつけてもらって本当にありがとうございます。
でも、ちょっといま眠いのですぐには対応できんです。今日中にはするので〜。
よかったらブログにコメント残していってくださいな。
本当にありがとうございました。
947 :
930 :2006/07/15(土) 11:06:45 ID:DEK42adf
>>929 927です。レスありがとうございました。
949 :
930 :2006/07/17(月) 17:39:19 ID:QIEMxz0K
950 :
名無し~3.EXE :2006/07/17(月) 21:14:00 ID:qAyKly+7
インタラクティブって何?
951 :
930 :2006/07/17(月) 21:17:39 ID:QIEMxz0K
対話的に・・・。うーんいちいちエディタで書いて保存して実行しなくてもいいみたいな感じ?
952 :
名無し~3.EXE :2006/07/17(月) 21:21:14 ID:06s9r265
初参加だわな 数日前にYAHOOの新バージョンになったがメールが送れない YAHOOに確認したらノートンのセキュリティーが邪魔しているから ノートンに確認しろだって ふざけんじゃないぞー YAHOO BB はあらゆる角度から検証してバージョンアップして いるんじゃないんじゃ!! 勝手にバージョンアップして あげくの果てPCが古いからとか、セキュリティーに問題ありだと 勝手にホザイテ あらゆるサイトに書き込みしてヤルゾー
953 :
名無し~3.EXE :2006/07/17(月) 21:45:22 ID:qAyKly+7
>>949 > cscript.exe imjs.js
1回実行するだけでいいですか?
PC起動のたびに毎回ですか?
>>955 thx
さっそくhello worldやってみます
昨年かな HDD → 外付USB HDDへのバックアップ を簡単なcscriptで作った するとバックアップ先のファイルが時々消える コピーの最中に、コピー先のフォルダが見えなくなることがある でもコピーはし続けている USB HDDの会社のサポートは、CSCRIPTなんてサポート対象外、添付のバックアップソフトかマウスでドラッグしろとしか言わない 他社のUSB HDDでも同様な事が起きた cscriptでファイルのコピーしちゃいけないんですか?
cscript.exeにファイルをコピーするメソッドなんて有ったか? 普通はscrrun.dll(FileSystemObject)とか使うんじゃないの? まあFSOの場合は普通なら、「FSOでコピーしちゃいけない」なんてことは無いが USBみたいに不安定な接続使ってるなら避けた方が無難かも。
>>958 あ、それそれ、FileSystemObjectと言うのを確か使った
MSのサイト見ながら作ったんだけどFileSystemObjectってCSCRIPTじゃないのか?
cscript.exe はスクリプトを解釈して実行するだけ 実際にファイルを操作しているのは ActiveX/COM という仕様に従ってインターフェイスを公開している DLL
>957 ファイルが消えるってのは画面上から一時的に? それともコピーしたはずのファイルがコピーされてない?
>cscriptで作った >FileSystemObjectってCSCRIPTじゃないのか このへんの表現からして、ものすごい勘違いをしていると思んだがね
963 :
930 :2006/07/18(火) 07:55:28 ID:ZrS7lcyE
tabで予約語補完なんてできるとうれすい
やっべインタプリタ楽しいなこれ
HTA がいいよ。
967 :
930 :2006/07/18(火) 20:27:42 ID:ZrS7lcyE
>>964 ムズイ。つーか俺には無理。
bashのreadline使って実現するのが現実的だけどそれもムズイと思う。
rlwrapっていうソフトも一応あるけどアレは予約語補完はしてくれないし。
>>965 でしょでしょ。
>>966 HTAでインタープリタか〜。できるかも。
969 :
930 :2006/07/18(火) 20:54:12 ID:ZrS7lcyE
>>966 HTAよくわからなす。ていうかHTMLも実はよくわからなす。
一応作ったけどとても使いづらいものができた。orz
HTAわかるひとだれか作って。
WScript.StdIn.ReadLine
WScript.StdOut.Write[Line]
あたりを書き換えたら動きはした。あと気のせいかHTAにするとWSH使えなくね?
970 :
964 :2006/07/18(火) 21:05:00 ID:MFA7CkwB
xyzzyのshell-modeでごにょごにょして補完します。(´・ω・`)
> あと気のせいかHTAにするとWSH使えなくね? WSHってかWScriptオブジェクトを使えない。 Sleep()メソッドやEcho()メソッドが使えなくなる。 WScript.Shellとかなら大丈夫だけどね。ルートオブジェクトは無理。
2chの過去ログの最終書き込み日を取得する方法を教えてください。
やりたいことは、過去ログの勢い(総レス数」/日)を知りたいのですが、
その為には、スレ立て日時、最終書き込み日時、総レス数の3つの情報が必要です。
鯖URI(
http://pc8.2ch.net/ )、板名( win )、スレ番号( 1100489339 )
を指定して、スレ立て日を計算し、総レス数を取得するところまでは出来たのですが
最終書き込み日時を取得する方法がどうしてもわかりません。
2chブラウザでdatを落として解析すれば解らないこともないのですが、JScriptのみで完結させたいのと、
ログを取得する前に勢いを調べたいので、2chブラウザなどを使ってdatを落とすのはNG。
●は持ってるので、JScriptで●ログインして、last-Modifiedを調べればとかも思いましたが
その方法自体解らないし、現行スレと違って、過去ログの場合last-Modified=最終書き込み日時とも限らないような気もするし。
とりあえずJScriptで●ログインする方法だけでもいいし、他の方法でもいいので
何かご存じの方が居りましたらどうか宜しくご教示ください。
質問です。
http://tomari.org/main/wsh/wsh.htmlの '単一フォルダの名前変更
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.MoveFolder "C:\FSO\Samples" , "C:\FSO\Scripts"
これを応用してフォルダ名のリネームスクリプトを作りたいのですが、
objFSO.MoveFolderの第2引数の生成でつまずいています。
第2に引数はフォルダ名を除いたパス名+整形フォルダ名で渡せばよいと思うのですが
このパス名はどうやれば取得可能でしょうか?
>>974 その親となるパスを変数にしておけばよくない?
第一引数を利用するなら
objFSO.GetFolder("C:\FSO\Samples").ParentFolder.Path
objFSO.GetFolder("C:\FSO\Samples").Name = "Scripts" とか。
ムダ口ばっか
979 :
名無し~3.EXE :2006/07/29(土) 14:11:41 ID:6ay/4b0E
あるドメインユーザのログオンスクリプトを明示的に実行したいのですが 何かよい方法はないでしょうか。 ADSIでそのユーザを検索し、scriptPathからログオンスクリプトのパスを取得し スクリプトファイルを直接実行するぐらいしか思いつかないんですが、 これでは真似ているだけで、本質的にログオンスクリプトを実行しているとは言えず、 もっとスマートな方法(たとえばRunLogonScriptメソッドがあるとか)とかないでしょうか。
980 :
930 :2006/07/29(土) 14:48:58 ID:d9wPSh9Y
>>970 それ何気にすごくね?
>>971 サンクス。そうかWScriptオブジェクトが使えないのか。
というわけで一応
WScript.CreateObject
を
new ActiveXObject
に変更しておきました。
981 :
名無し~3.EXE :2006/07/30(日) 00:50:26 ID:Bg6jNaXI
ファイルの更新日時をWshで変更する方法ってある? windows shellのModifyDateやFileSystemObjectでは読み取れても設定できないみたいだけど。
次スレ立ったら誘導よろ。
次スレまだー?
>981 バイナリストリームに読み出してそのまま上書きで保存するとか。 ファイルサイズが大きいと無駄に時間がかかるが。
それじゃ実行時のタイムスタンプにしか変更出来ないじゃん
WScript.CreateObject("WScript.Shell").Run("touch.exe " + filename)
'touch' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
つ Cygwin
このスレまだ落ちないのか
まだだ、まだ落ちんよ!
CInt(True) = ? CInt(False) = ?
^
^
^
^
^
^
^
^
1000なら最高!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。