ありゃ失敗。
to:Palさん
さっきのURLといっしょにこっちも
http://support.microsoft.com/default.aspx?scid=kb;JA;q251390
ちょっとはずしてるとは思うんですがなんかできそうかも、ってことで。
to:あきらさん
6行目の"D:a.txt"にファイルAのパスを指定してください。
自明だとは思いますが最後の2行がひっくり返ってます。<あちゃ(^_^;)
失礼しました。
to:PALさん
こんなページ見つけましたが
http://cwashington.netreach.net/depo/default.asp?topic=adsifaq
参考になりますか?
#こんなことできたんですね。うまく行ったらまた是非書込みしてください。
to:あきらさん
なんのひねりもないコードゴリゴリと書いてみました。
ただもし取得データであるBを先に読み込むことができれば
少々簡単になるかと思い、配列ArrayBに先にファイルBを
読み込んでおいて
Const ForReading = 1
Dim fso, MyFile, i, ReadLineTextFile
Set fso = CreateObject("Scripting.FileSystemObject")
'Set MyFile = fso.OpenTextFile("c:ファイルB", ForReading)
Set MyFile = fso.OpenTextFile("D:a.txt", ForReading)
Do While MyFile.AtEndOfStream <> True
ReadLineTextFile = MyFile.ReadLine
For i = 0 To UBound(ArrayB) - 1
If ReadLineTextFile = ArrayB(i) Then
Exit For
End If
Next
If i > UBound(ArrayB) - 1 Then
WScript.Echo ReadLineTextFile & " is NG"
Else
WScript.Echo ReadLineTextFile & " is OK"
End If
Loop
こんな感じでどうでしょう?
MyFile.Close
こんにちわ。
VBスクリプトなんですけど、取得した値と、配列の値を比較したいのですが
うまくできずにどなたかのお知恵をお借りしたく投稿しました。
あるデータの入ったファイルから値を一つずつ取得します。
そして、チェック用ファイルには必要な値がすべて入っており、先程取得した
データがちゃんとこのチェック用データに入っているものかどうかを確認する
ようにしたいのですが。。。
例えば、
ファイルA(確認用ファイル):
(中身)
A
B
C
ファイルB(取得データ):
(中身)
A
B
だったとします。
この場合ですと、本来ファイルAのようになっていなければならないのに
データを取ると、ファイルBのようにデータが足りないことが判明します。
で、出力方法としては、「AはOK、BはOK、CはNG」のように、正しいデータに
基づいて、実際のデータはどうであるかを出力させたいのです。
だいぶ解りづらい説明になってしまいましたが、どなたかお知恵をお貸しくださいませ。
宜しくお願いいたします。
お初にお目にかかります。
PALと申します。
ドメインのユーザ情報を取得するスクリプトを作ってみたのですが
・ドメイン内にアカウントが1万件を超えているため、
遠隔地からユーザ情報を全て取得するのに1時間以上かかる。
・1,000件毎に取得するなど、取得件数を絞りたい
など、GetObjectで取得してFor Each で回すのに限界を感じ、
ADOで取得することで、各オブジェクトがレコード扱いになり、
制限がすくなくなるのではないかと思ってちょっと試してみました。
************************************************************
strADsPath = "LDAP://dc=xx,dc=xxx"
Const adOpenStatic = 3
Const adOpenForwardOnly = 0
'指定ドメインのグループからNameとADsPathプロパティを取得
strCommandText = "<" & strADsPath & _
">;(objectClass=Group);Name,ADsPath;SubTree"
'ADSI Provider
strConnection = "Provider=ADSDSOObject"
Set RS = CreateObject("ADODB.Recordset")
RS.CursorType = adOpenStatic
RS.Open strCommandText, strConnection
For I=0 To RS.RecordCount -1
WScript.Echo RS.Fields.Item("ADsPath").Value
RS.MoveNext
Next
Set RS = Nothing
************************************************************
#strCommandText = "Select Name, ADsPath From '" & _
# strADsPath & "' Where objectClass='Group'"
#も使用可能。
Active Directoryの場合はOKなんですが(テスト環境)
しかし、WinNT: プロバイダで同様のことをしようとしたときに
やり方がちょっと判らず、困ってしまいました。
取得したいのはNT4.0ドメインであるためWinNT:で動かないと
意味がないのです。
http://www.microsoft.com/japan/developer/library/ado260/mdrefadsprovspec.htm
>Microsoft Active Directory Service Interfaces (ADSI) Provider を
>利用すると、ADO から、ADSI を通して異種ディレクトリ サービスに
>接続できます。このため、ADO アプリケーションで、Microsoft Windows NTR 4.0 および Microsoft Windows 2000 のディレクトリ サービス、LDAP 規格のすべてのディレクトリ サービス、および Novell Directory Services に対する読み取り専用のアクセスが可能に
>なります。
とあるので、やり方はあるはずだとは思ったのですが。
#微妙にできないという情報も見かけた気も。。。
http://www.agnisoft.com/adsi/Conf2000/3132.htm
>At this point, only the LDAP and the NDS providers support searching using ADO.
>You cannot use ADO to search for user in a Windows NT (Or 2000) domain.
ちなみに。
上記の ソースで strADsPath = 〜〜 の部分をWinNT:〜〜にしても
動作しないで以下のエラーが返ってきます。
Provider: テーブルは存在しません。
strConnection か strCommandText に 値が足りないのかとも思ったのですが、
何を入れるべきかよくわからず。。。
きて早々の質問で申し訳ないですが、上記判りましたらご教授
戴きたいと思います。
なお、うまくいったら、そのままHTAに実装しようかと思ってます。
以上よろしくお願いいたします。
to:こんどうさん
解決して何よりです。お疲れ様でした。
今後ともひとつこの板ご贔屓のほどよろしくお願いします。
<って管理人じゃないですけど。
訂正します。
直前の投稿文の中において、
IUSER → IUSR
の間違いでした。
でわ。
解決しました。
IWAM_サーバー名 と IUSER_サーバー名
の両方のユーザにユーザ管理ツールから[所属するグループ]に
[Administrators]を追加すると、うまく行きました。
ただ、設定を上記のように行って成功した後に
再度設定を元に戻してもうまくいくので、
その辺の原因はいまもって不明ですが、CScriptの呼び出し部分は
通るようになりました。(毎度IISAdminサービスの再起動を行っています。)
上記設定をすることによりうまく行くことを3つの環境で試したので、
原因部分としては正しいようです。
ありがとうございました。
To:neoはん
>この休日僕は”中古アウトレットの店”というのを発見しました。
>外観があまりにみすぼらしかったので入って確認はしなかったのですが、
>なんか中古でアウトレットってどうよ?とおもいました。
そうそう、ヤフオクなんかでも”オークションで手に入れた品です。”
って堂々と書いてはるからね。 これも どうよ?って感じやね。
ところで、アウトレットって、Outlet で、Out(外に)let(しとく)で
放出品のことでっけど、Basic言語には、let 命令ってのがおました。
例えば、let a=a+1 は、”aをa+1にしときなはれ”やけど、
a=a+1
と普通、略して書くことが多うて、あんまり知名度がおまへん。
VBSやと、オフィッシャルマニュアルには let ステートメントって
項目はあっても、let a=a+1 みたいな書き方はでけんようになっとりま。
ただ、名残りで残っとおるのが、Property Let。
やっとる事はプロパティ変数への代入なんやけど、キーワードの"Let"
は略せまへん。
・・・と、WSH率向上ってことで委員会?
to:あいざわさん
ご指摘ありがとうございます。
CScript内の先頭行にテキストを出すように記述していたのですが、
それもログに出ていません。
CScriptが起動していないということのようです。
なので、CScriptそのもの呼び出しのエラーということになります。
ログから判断するに、IISの設定などによるアクセス権が問題なのかと
判断しているのですが、IIS4.0とIIS5.0で
アクセス権やセキュリティに関して、
大幅に変更した点等あるのでしょうか?
(IIS4.0では起動し、IIS5.0では起動しない)
また、ちょっとしたことでもいいので、宜しくお願いします。
でわ。。
to:こんどうさん
いらぬ突込みかもしれませんが...
>CScript エラー: 設定の読み込みに失敗しました。 (アクセスが拒否されま
>した。)
自分が意図していたのは、上記のエラーがCScriptそのもの呼び出しのエラーな
のかそれともCScriptに渡しているスクリプトのパスもしくはスクリプト内部か
らおきているのか判断つかなかったため、それを切り分けてみてはと言うこと
だったんですが、もしそれもすでに把握済みでしたら失礼しました。
to:あいざわさん
色々なご指摘ありがとうございます。
その辺は試しており、最初の質問の最後の方に記載してあります。
IISのバージョン間の差異としてとらえている理由としては
まったく同じソース同じ設定で、IIS4.0では発生しておらず、
IIS5.0でのみ発生しているからなのですが、未だ原因が不明です。。
それでは引き続き原因追求に当たりたいと思います。
それでわ。。
to:こんどうさん
なるほどわかりました。
あらためて質問を読んでみたんですが、何がエラーを起こしているのか
切り分けしてみたらいかがでしょう。
テキストファイルへの出力は行えるようなので、CScriptを単独で実行して
wshShell.Run "CSCRIPT >>d:\log.txt"
wshShell.Run "cmd /C ""CSCRIPT """ >>d:\log.txt"
など実行してみるとか。これで特にエラーが出ないようならVBスクリプト内に
問題があるかと。<それともすでに確認済み?
それとすでにIISのバージョン間の差異として認識されているようですが、自分の
理解した範囲では必ずしもそうとは限らないと思うんです。もしよければ根拠を
おしえてください。
to:あいざわさん
今週はいつもになく忙しい週末みたいでしたね。
それだけ頼りにされているということですね。
To 筑集眺餅 さん
この休日僕は”中古アウトレットの店”というのを発見しました。
外観があまりにみすぼらしかったので入って確認はしなかったのですが、
なんか中古でアウトレットってどうよ?とおもいました。
何が売ってんのやろ。気になるはぁ。今度見に行ってこよかなぁ。
to:あいざわさん
おっしゃる通り、その辺があやしいと考えまして
IISの設定で、ユーザに実行権限は与えています。
スクリプトソースアクセスのチェックもいれてますし、
実行アクセス権は「スクリプト及び実行可能ファイル」に
設定しています。
ユーザも色々試してみたのですが、うまく行きません。。
また何か有りましたら宜しくお願いします。
to:こんどうさん
今確認できる環境がないのでかなりあいまいなレスですが
ログオンしているユーザーに実行権限がない、とかゆうこ
とはありませんか。<多分こんなこと当然しているとは思
うんですけど念のため。
あとIISの設定でローカルに対する実行を許可する、のよう
な設定があった気がするんですが、サービスマネージャの
設定の確認をされましたか?
質問の内容からとりあえず思い浮かんだことだけ。
こんなんで参考になるかわかりませんが、また気づいたら
レスします。
保守。
回答してくれるレギュラーメンバーの方々、いつもありがとうございます。
それでも未解決問題たまってきてるなぁ。
そろそろ爆撃の準備を…。
暑い…。
まだ文字化けた・・・ごめんなさいm(__)m
文字化けしたところは
システム障害は何故おこったか みずほの教訓
で御座います。
どうも失礼致しました。
あいざわさんへ
>自分の場合はひたすらコード書いてなれることと、
>書いたコードを恥じも外聞も投げ捨てて人目にさらすことでしょうか(笑)
なるほどφ(..)厶厶
私も書いたコードをどんどん人目に晒して上達したいと思います。
追伸
▲轡好謄狆祿欧呂覆宍C海辰燭ォ みずほの教訓C箸いλ椶鮑Dd甜屬涼罎覇匹鵑任泙靴拭」
これは結構教訓になること書いてありますし、面白いです。ではでは
初めまして。こんどうといいます。
今回初めて投稿します。
かなり困っています。そして緊急事態です。。。
宜しくお願いします。
以下に質問の内容をまとめましたので、ご存知の方が
いらっしゃったらぜひアドバイスを頂きたいです。
--------------------------------------------------------------
▼概要
Webサーバ上で、ASP(.asp)からVBスクリプト(.vbs)を非同期の別プロセス
(cscript.exe)で実行させる処理を実装したところ、WindowsNT4.0Server上の
IISでは、VBスクリプトが問題なく動作したのですが、同じASPファイルを
Windows2000Server上のIIS上で実行させたところ、VBスクリプトが実行されない
状況です。
▼質問
IIS4.0とは違って、IIS5.0上でASPからcscript.exeを起動してVBスクリプトを実
行させるには、何か特別な設定等が必要でしょうか。
▼詳細
ASP側では、ボタンを押すと、以下のように内部で固定のVBスクリプトのパスを
パラメータを指定してcscript.exeを起動しています。
Set wshShell = Server.CreateObject("WScript.Shell")
wshShell.Run "CSCRIPT " & sVBSPath & " " & sParamPath
VBスクリプト側では、以下の処理を行っています。
- ASP側からパラメータファイルのフルパスを引数で受け取る。
- ASP側が作成したパラメータファイルを読み込む。
- パラメータで指定された必要なファイルを1ファイルに圧縮する。
- ログファイルを作成する。
- 処理結果を表示させるためのHTMLファイルを作成する。
このような処理をIIS4.0上でASPを実行させると、特に変わった設定も必要なく
VBスクリプトが動作しましたが、IIS5.0上ではVBスクリプトが処理を開始できて
いない状況です。この時、エラー等は特に発生しておりません。
そこで、
wshShell.Run "cmd /C ""CSCRIPT " & sVBSPath & " " & sParamPath & """ >d:\log.txt"
とASPで記述してIIS5.0で実行させたところ、log.txt には、
CScript エラー: 設定の読み込みに失敗しました。 (アクセスが拒否されま
した。)
と出ました。
msdn online Library の WindowsScriptingHostのエラーメッセージには、
http://www.microsoft.com/japan/developer/library/script56/wserrloadingyoursettingsfailed.htm
このメッセージは通常、システム アクセス権限の問題を意味します。
このエラーを解決するには
ネットワークまたはセキュリティの問題について管理者に問い合わせます。
と記述されていました。
以上、よろしくお願い致します。
さざなみです。
VBScriptで
LoadPictureの以下以外の使い道がわかりません。
できれば、縦、横幅を取得したいのですが、、、、
Set myimg = LoadPicture("D:\index1.jpg")
MsgBox(TypeName(myimg))
よろしくお願いいたします。
to:夏茶さん
あ、そうそう上達の秘訣でしたっけ。
自分の場合はひたすらコード書いてなれることと、
書いたコードを恥じも外聞も投げ捨てて人目にさらすことでしょうか(笑)
#さらすたび自爆してるが...
to:夏茶さん
気になったので自分でも確認しました。
なーるほどMRUってこんな風に管理されてたのね。
また自分の無知さかげんが暴露されてしまった(笑)。
こちらこそごみレスしちゃって失礼しました。
あいざわさんへ
おはようございます、只今出社したところです。
今日も暑いですね。
>もし\MRUList\aでaから始まるものすべてを対象としようとしているのなら
aから始まるもの全てではなく
\MRUList\aというキーがありましてそれを削除するだけなのです^^;
ご心配お掛けして済みませんでしたm(__)m
今後とも宜しくお願い申し上げます。
to:夏茶さん
みんなの熟睡中にご苦労様でした...って、ちょとまって。
このスクリプトほんとに動くんですか?
自分の使ってるのはWin2000でして、同じキーがないから想像するしかない
んですがレスされたスクリプトからだとキーの末尾が(ちょっと不正確な表現だ)
\MRUList\a (もしくは\MRULista?)
\MRUList\b (もしくは\MRUListb?)
(以下同)
と言うキーが対象になるようですがこれってあってますか?
もし\MRUList\aでaから始まるものすべてを対象としようとしているのなら
うまく動かないんじゃ?
ちょっと危険な気がするんで実行する前に十分テストされたほうが良いのでは?
それ以前にまずこの書き込み見てくれることを祈る...
To:夏茶はん
>済みません、なんだか文字化けが解消しません(T_T)
>もう一度投稿してみますがまた文字化けしたらごめんなさいm(__)m
掲示板の注意書きを見なはれ。
”★半角カナは絶対使わないでくださいね。文字化けしますので…。”
メールを書くときにも頭に入れときなはれ。
”ポスティング・スタッフ”
例によって、郵便箱に入っているアヤしいチラシ。(ウレしいチラシ?)
女の子の写真の入っていない Side-B に
「ポスティング・スタッフ大募集」
・・・ビラ配り, is it?
今度は成功しました\(^o^)/
最後にプログラミング上達の秘訣てあるのでしょうか?
宜しかったら教えて下さい。宜しくお願い致しますm(__)m
済みません、なんだか文字化けが解消しません(T_T)
もう一度投稿してみますがまた文字化けしたらごめんなさいm(__)m
ファイルやフォルダ検索に表示されるファイル名の順番を保持したレジストリーキーを読み込んで変数"strFiles"に代入します。
また文字化けしてしまいましたm(__)m
文字化けした個所は以下の通りで御座います。
REM ▲侫.ぅ襪筌侫D襯寸検索に表示されるファイル名の順番を保持したレジストリーキーを読み込んで変数"strFiles"に代入します。
あいざわさんへ
おはようございます。4時に目が覚めてしまった夏茶です。
アドバイス有り難う御座いましたm(__)m
あいざわさんのご指摘を頼りに目的としているスクリプトが完成しました♪
(初心者の私にはこんな簡単なスクリプトを書くのも難事業です(笑))
WindowsNT 4.0マシンで、ファイル名の検索を行った際、今まで検索したファイルがプルダウンリストの中に蓄積されてしまうのですがその今まで検索したファイルのリストを全て削除するスクリプトを書きました。
後輩のMさんがどこを消せばいいのですか?というのがこのスクリプトに取り組んだ理由です、こんなスクリプト簡単簡単、休日明けには出来てるさ〜はははっ(汗)と
言った手前・・・ぎりぎりで出来て良かった(ほっ)
(とりあえず動くのですがまだ十分なテストしてないから不安です・・・)
宜しければこのスクリプトお使い下さい(汗)
-----------------------スクリプト全文掲載-----------------------
REM ////////////////////////////////////////////////////////////////////////////
REM スクリプト名:DelFileSearch.vbs
REM 作成日:2002/07/1x
REM 更新日:
REM
REM ////////////////////////////////////////////////////////////////////////////
Option Explicit
Dim objWshShell
Dim strFiles,strFiles01
Dim Lists
Dim regkey,mainkey,i
Lists = Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
mainkey="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Doc Find Spec MRU\"
REM WshShellオブジェクトを生成する。
Set objWshShell = WScript.CreateObject("WScript.Shell")
REM ▲侫.ぅ襪筌侫D襯寸検索に表示されるファイル名の順番を保持したレジストリーキーを読み込んで変数"strFiles"に代入します。
strFiles =objWshShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Doc Find Spec MRU\MRUList")
For i = 1 to Len(strFiles) Step 1
regkey = mainkey & Lists(i-1)
objWshShell.RegDelete(regkey)
WScript.Echo regkey & "の値を削除しました。"
Next
WScript.Echo "最後に" & mainkey & "MRUListの値を削除します。"
objWshShell.RegDelete(mainkey & "MRUList")
to:夏茶さん
私が間違って理解していたら訂正してください。
"でくくるとただの文字列になってしまいますから
おっしゃるような処理をするなら
sKey = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Doc Find Spec MRU\"
strFiles01 = objWshShell.RegRead(sKey & "a")
strFiles02 = objWshShell.RegRead(sKey & "b")
strFiles03 = objWshShell.RegRead(sKey & "c")
でよろしいかと思います。
済みません、一部文字化けしてしまいましたm(__)m
文字化けしたところは、レジストリーキーで御座います。
宜しくお願い致します。
はじめまして、夏茶と申します。GoogleでWSHで検索したところこちらのサイトが
引っかかりました。最近WSHを勉強したところです。(他のプログラミング知識もあまり無いです(汗))
技術的な質問が御座います。どなたかご存知の方がいらっしゃいましたら御教授願います。
現在あるレジストリーの値を読み込むスクリプトを書いているのですが途中で上手く行かず立ち往生しております。
例えばkeyw01という変数を宣言して
strFiles01 = objWshShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Doc Find Spec MRU\keyw01")のように書きkeyw01の値をaからcまで動かして
以下の3つのレジストリーの値を取得したいのですが
▲譽献好肇蝓璽@シ ("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Doc Find Spec MRU\keyw01"を開いて読み取ることが出来ませんというエラーが
返ってきてしまいます。
どのようにすれば変数keyw01の値を展開できるのでしょうか?
教えて下さい、よろしくお願いします。
(1)HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Doc Find Spec MRU\a
(2)
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Doc Find Spec MRU\b
(3)
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Doc Find Spec MRU\c
To:あいざわはん
>ところで小枝ちゅうと幹はどの辺になるんでっしゃろ<と軽くつっこむ
>#さあどんなぼけがかえってくるか、ってそんなもんあおってどうする!
うぃ。
http://meso.3nopage.com/doumei/kowaza.html
・・・なんやこれ。
to:MAYUMIさん
補足。
まず先ほどのレスの1行目のアドレスは意味なし!忘れてください。
それからお聞きになりたい内容ですが、もしMAYUMIさんの書き込みで言うところの
"X"をどう変えたらいいのか、と言うことでしたら先ほどレスしたページにリンク
している以下のページのチュートリアル
http://webtool.rte.microsoft.com/?tutor/default.htm
の最初のほうにある「Using the WAS sample script」に操作法等が書かれてます。
で、確かにVBScript(VBではない)でカスタマイズできるようですね。
このスクリプトの内容についてお聞きになりたいのならやはり、サンプルかご自
身でかかれたコードがないと使ったことがない私には手も足も出ないっす。
to:MAYUMIさん
http://www.microsoft.com/japan/msdn/columns/server/server092799.asp
んー思いっきり場違いかも(笑)。
ていうか何を知りたいのかまったくわからないのですが。
Web Application Stress Toolって私はまったく使ったことはないんで悪しからず。
もし使い方を、というのでしたらざっとGoogleでさらったところで以下の
MSのページなんかわかりやすいんじゃないでしょうか。
http://www.microsoft.com/japan/msdn/columns/server/server092799.asp
そんなことは知っている、そういうことじゃない!というのでしたら
具体的な内容を書き込んでください。内容によっては答えられるかも。
たとえば既にVBでコードかかれていてここがどうもわからないからしりたい、
とか...
はじめまして。MAYUMIといいます。
最近、マイクロソフトさんのWebApplicationStresstoolを使って
いますが、これってVBで追加機能を作れるみたいなのです。
何をやりたいかというと、
クライアントとサーバ間で2回やりとりがあるときに
2回目は1回目の応答に含まれてる変数を追加して
要求を出したいんです。
@1度目は新規の要求URL「A」にアクセスして、
サーバから応答画面URL「A’」を受け取ります。
A2度目は1度目の応答「A'」の中にあるパラメータ「X」を
要求に付加して要求URL「B」にアクセスし、
応答画面URL「B'」を受け取ります。
図にすると、
ストレスツール サーバ
要求「A」 −−−−−−−−−−−−>
応答「A'」(Xが含まれる)<−−−−−
要求「B」(Xを付加)−−−−−−−−−>
応答「B'」(Xが含まれる)<−−−−−
となるでしょうか。
重要な点は、パラメータ「X」はアクセスするたびに変わるのです。
同じ要求「A」を投げても「X」は毎回変わるわけです。
ところがストレスツールを使っても毎回Xが同じになってしまうのです。
そこでVBで作ろう!という話になったのですが、
ところが私はVB初心者でして・・・
パワーユーザの方に助けを求めることにしたのです。
この掲示板が場違いだったらごめんなさい(泣)
もしヒントでもあれば教えてくださると大変助かります。
to:筑集眺餅さん
はあ、おおきに。
ぼくもneoさんに聞かんとつかえるかよおわかりまへん。
ところで小枝ちゅうと幹はどの辺になるんでっしゃろ<と軽くつっこむ
#さあどんなぼけがかえってくるか、ってそんなもんあおってどうする!
もともとはそうなんでしょうが最近アウトレットと聞くと
ただの安売りにしか読めません。
#あったらこわい「ほんまもんのソフトウェアアウトレット」
To:あいざわはん、neoはん
なんぼほどあるか、前もって数のわからんものを入れるのには、
大きさの変えれる動的配列が便利でんなぁ。
で、ちょっとした小枝でっけど、適当な区切りを入れて文字列で
ズルズルつなげといて、Split関数でドッカンと配列に戻す、
って手もアリやと思いま。
(ここの話で使えるか・・・は確かめてまへん。)
プラプラ町中を車で走っていると、中古車センターの前に
垂れ幕”アウトレットフェア開催中”。
・・・アウトレットて、たしか作りそこないの
ワケあり品のことのはず・・・
え、中古車でアウトレットぉ?!
ちょっとヤバいんちゃう?
To:あいざわさん
なるほど。有難うございました。
がんばって勉強します。
to:neoさん
もっとコメントいれときゃ良かったですね。(^_^;)
m_sFileName()はフォルダAのファイル名をすべて入れるための
動的配列です。
m_iIndexMaxは上記の動的配列の配列数の上限値です。
33行目で動的配列の大きさをファイルの数だけ増やして
34行目以降でその増やした部分にファイル名を追加してく
という処理をしてます。
ご指導なんてそんな私ごとき...
過去ログ掘り起こすたんびにおなじく自分の力なさに
泣けてくる日々...
To:あいざわさん
きちんと処理できました。有難うございます。
ソースで1箇所わからないところがあります。
教えて頂けないでしょうか?
31行目から38行目までの処理がわかりません。
>i = m_iIndexMax
>m_iIndexMax = m_iIndexMax + objSourceFolder.Files.Count
>ReDim Preserve m_sFileName(m_iIndexMax)
>For Each objIter In objSourceFolder.Files
>m_sFileName(i) = objIter.Name
>WScript.Echo objIter.Name
>i = i + 1
>Next
よろしくご指導ください。
P.S 僕が数日悩んでいたのにこんなに早く返答頂けてうれしいのですが、
すごく自分の理解のなさに泣けてきました。(>_<)
To:あいざわさん
有難うございます。
早速検証してみます。
to:Nomuさん
まだ試してないけどいいかもしんない。
実はこの手の類の作ろうかと思ってました。
もうお気に入りのスクリプトのアドレスなんか爆発寸前で...
to:neoさん
あんましきれいじゃないけど一応動くもの作ってみました。なげ-な。
同名のファイルが複数あったときなんかどうするかわかんないんで
適当に手を入れてみてください。
Option Explicit
Dim fso, m_objSourceFolder
Const m_sBaseFolderPath = "D:\A" 'コピー元
Const m_sTargetFolderPath = "D:\B" 'コピー元
Const m_sDestFolderRootPath = "D:\C\" 'コピー先
Dim m_sFileName(), m_iIndexMax
Set fso = CreateObject("Scripting.FileSystemObject")
Set m_objSourceFolder = fso.GetFolder(m_sBaseFolderPath)
ScanAllFile m_objSourceFolder
WScript.Echo "copy..."
Set m_objSourceFolder = fso.GetFolder(m_sTargetFolderPath)
CopySameNameFile m_objSourceFolder
Set fso = Nothing
Set m_objSourceFolder = Nothing
'***** End Of Execution *****
Sub ScanAllFile(objSourceFolder)
Dim objIter, objIterFile, i
If objSourceFolder.SubFolders.Count > 0 Then
For Each objIter In objSourceFolder.SubFolders
'サブフォルダがあれば再帰的にスキャンする
ScanAllFile objIter
Next
End If
WScript.Echo "path : " & objSourceFolder.Path
i = m_iIndexMax
m_iIndexMax = m_iIndexMax + objSourceFolder.Files.Count
ReDim Preserve m_sFileName(m_iIndexMax)
For Each objIter In objSourceFolder.Files
m_sFileName(i) = objIter.Name
WScript.Echo objIter.Name
i = i + 1
Next
End Sub
Sub CopySameNameFile(objSourceFolder)
Dim objIter, objIterFile, i
If objSourceFolder.SubFolders.Count > 0 Then
For Each objIter In objSourceFolder.SubFolders
'サブフォルダがあれば再帰的にスキャンする
CopySameNameFile objIter
Next
End If
For Each objIterFile In objSourceFolder.Files
For i = 0 To UBound(m_sFileName) - 1
If m_sFileName(i) = objIterFile.Name Then
'fso.CopyFile objIterFile.Path, m_sDestFolderRootPath 'このコメントを取る
WScript.Echo objIterFile.Path & "->" & m_sDestFolderRootPath
Exit For
End If
Next
Next
End Sub
みなさんは、プログラム上のちょっとしたTipsとか、ノウハウとか
サンプルコードとかをどうやって管理してますか。
http://www.hamarch.com/wsworth/
私は上記URLのWordsWorthというフリーウェアを愛用しています。
HTML出力できたり、用語相互にリンクが貼れたり、
とっても便利です。是非お試しあれ!
To:あいざわさん
おはようございます。
>ScanFolder フォルダA
>ScanFolder フォルダB
>ScanFolder フォルダC
という具合に処理を実行しているのですが、
一番最初の処理(ScanFolder フォルダA)が
他の処理を引っ張って?全てのフォルダをScanFolder しているみたいです。
ですのでその後の処理はとばされてFunctionを終了しています。
処理的にはまず、
1 フォルダAをScanFolder する。
2 フォルダAにあるファイル名と同じファイルがあるかフォルダBをScanFolder する。
3同じファイルが存在した場合だけフォルダCにコピーする。
という感じで処理を行います。
Functionを使用しているのですが処理の仕方がおかしいのでしょうか?
to:neoさん
>以前教えて頂いたScanFolderですが、
>複数ScanFolderをする際、(それぞれ違うフォルダです)
>うまくいかず以前のエラーが出るみたいです。
>フォルダAの結果によって
>フォルダB、フォルダCもScanFolderしなくてはいけない場合
>何か良い方法はありますか?
ひょっとして最初AのルートにScanFolderサブルーチンを実行して
その中でまたフォルダBに対してScanFolderを実行するってことでしょうか。
フォルダAをスキャンしたどんな結果によってフォルダBやCをスキャンするの
か、を説明していただかないと正確に答えられませんが
ScanFolder フォルダA
ScanFolder フォルダB
ScanFolder フォルダC
というのではうまくいきませんか。
To 筑集眺餅 さん
有難うございます。解決しました。
To:あいざわはん
以前教えて頂いたScanFolderですが、
複数ScanFolderをする際、(それぞれ違うフォルダです)
うまくいかず以前のエラーが出るみたいです。
フォルダAの結果によって
フォルダB、フォルダCもScanFolderしなくてはいけない場合
何か良い方法はありますか?
To:SIGNAL9はん
>とんでもないです。筑集眺餅さんのような良質の書き込みだと反応するのも
>ラクですし、成果もあるのでありがたいです。
良質やなんて、照れーまんにやわ。
まぁ、教えてもらいたい事がある時には、なるべく要領ように書くように
心がけとりま。
自分のやりたい事が何で、どこまでやって、どこがアカンようで止まってて、
自分としてはこう思うけど、この辺判る方おられませんでしょうか?みたいに
なるべく整理しとおります。
そうすれば、たぶん、似たような事でのたうち回った事のある方がおられたら
方向づけなどして頂けようか、と淡い期待で書き込んでおりま。
>#筑集眺餅 さんは素直にデスクトップさんって読んでました(笑)
はぁ、すなおに。
To:neoはん
>MoveFile メソッドを使用して、ファイルが移動できたかどうか
>戻り値をみてその結果でログを出力しようとしているのですが、
>うまくいきません。
MoveFileメソッドって、FileSystemObjectの、でっかな?
FileSystemObject.MoveFile メソッドには戻り値おまへんな。
うまいこといかへんかったらエラーを起こすようになっておりま。
On Error Resume Next を使って Err オブジェクトを使う手も
ありまっけど、ワテはその辺、あまり書いた事がないよってに、
ワテが書くなら、回りくどおまっけど、
・MoveFile 実行前に行先にファイルがないのを FileExistsで確認
・MoveFile
・行先にファイルがあるのを FileExistsで確認、元のファイルが
無くなったことを FileExistsで確認
とか、しまっけどな。
To 筑集眺餅 さん
なるほど。韓国も大変ですね。ブラジルとかは数回優勝とかしているから
そんなに浮かれることはないけど中途半端に4強になるとこうもねえ、、、
MoveFile メソッドを使用して、ファイルが移動できたかどうか
戻り値をみてその結果でログを出力しようとしているのですが、うまくいきません。
>筑集眺餅 さん
>おぉ、いつぞやは babaqはんのところでお世話になりました。<遅い
とんでもないです。筑集眺餅さんのような良質の書き込みだと反応するのも
ラクですし、成果もあるのでありがたいです。
>けど、その内に 9X環境はなくなりまっさかいに、もうしばらくの
>辛抱でっせ。
別に9X差別してるわけぢゃないのですが、金がないんでいろいろ環境を
そろえるわけにもいかず(^^;)
#筑集眺餅 さんは素直にデスクトップさんって読んでました(笑)