• ベストアンサー

なぜAドライブが起動するのでしょうか

こんにちは。 あるフォルダに含まれるすべてのファイルを表示するというスクリプトを検討していたら以下のスクリプトを見つけました。 このスクリプトをコピーして自分の端末で実行してみたところ、処理は問題なく動くのですが、実行途中でなぜかAドライブを見に行ってしまいます。(見に行った結果エラーになるわけではありません) 出来ればAドライブのチェックは必要ないので、しないように出来たら嬉しいです。 よろしくお願い致します。 【スクリプト情報】 http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/feb05/hey0218.mspx ※同様の内容で一度質問をしましたが、スクリプトの内容が違っていました。すいませんでした。

質問者が選んだベストアンサー

  • ベストアンサー
  • MidKnight
  • ベストアンサー率57% (20/35)
回答No.1

このスクリプト、すべてのパスの中から必要なフォルダをクエリで取り出していますね。 全てのパスを確認する過程で、Aドライブも見に行ってるんじゃないでしょうか。 ファイル一覧を作るだけが目的なら、ファイルシステムオブジェクトで十分です。 WMIなんて必要ない。 Set objFso = CreateObject("Scripting.FileSystemobject") strPath = "C:\test" If objFso.FolderExists(strPath) = True Then Call ListUp(strPath) Else WScript.Echo "指定されたパスはフォルダではありません" End If Sub ListUp(strPath) Set objFolder = objFso.GetFolder(strPath) For Each objFile In objFolder.Files WScript.Echo objFile.Name '名前だけ表示させる場合 WScript.Echo objFile.Path 'パスを表示させる場合 Next For Each objSubFolder In objFolder.Subfolders ListUp(objSubFolder.Path) Next End Sub この方がずっと簡単でしょう。

Gami7
質問者

お礼

おおー、すばらしいです。 元々はVBスクリプトで作成出来ない情報を探していたのですが、またまた見つけたのがWMIだったので質問してみた次第です。 プログラムがこんなにスッキリと出来るなんで感動ものです。 処理も速いし、完璧だと思います。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.4

もう一例、WWWをあさって試しました。WMIスッキリ版。 ----- strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") strFolderName = "c:\test" GetSubFolders strFolderName Sub GetSubFolders(strFolderName) Wscript.Echo strFolderName Set colFiles = objWMIService.ExecQuery _ ("ASSOCIATORS OF {Win32_Directory.Name='" & strFolderName & "'} Where " _ & "ResultClass = CIM_DataFile") For Each objFile in colFiles Wscript.Echo objFile.Name Next Set colSubfolders2 = objWMIService.ExecQuery _ ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _ & "Where AssocClass = Win32_Subdirectory " _ & "ResultRole = PartComponent") For Each objFolder2 in colSubfolders2 GetSubFolders objFolder2.Name Next End Sub -----

Gami7
質問者

お礼

こんなにシンプルに出来るもんなんですね。 ただただ感動です。 ありがとうございます。大変参考になりました。

全文を見る
すると、全ての回答が全文表示されます。
  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.3

MSのサンプルは ANo.1 MidKnightさんが言われているようにドライブの指定が抜けていますね。例えば a:\test\xxx.txt などが存在するとそれも表示されてしまいます。 WMIにこだわるならばDrive指定を追加して下記でいけます。Windows XP Pro SP2で確認しました。 ----- strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") strFolderName = "c:\test" Set colSubfolders = objWMIService.ExecQuery _ ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _ & "Where AssocClass = Win32_Subdirectory " _ & "ResultRole = PartComponent") Wscript.Echo strFolderName arrFolderPath = Split(strFolderName, "\") strNewPath = "" For i = 1 to Ubound(arrFolderPath) strNewPath = strNewPath & "\\" & arrFolderPath(i) Next strPath = strNewPath & "\\" Set colFiles = objWMIService.ExecQuery _ ("Select * from CIM_DataFile where Drive = '" & arrFolderPath(0) & "'" & _ " and Path = '" & strPath & "'") For Each objFile in colFiles Wscript.Echo objFile.Name Next For Each objFolder in colSubfolders GetSubFolders strFolderName Next Sub GetSubFolders(strFolderName) Set colSubfolders2 = objWMIService.ExecQuery _ ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _ & "Where AssocClass = Win32_Subdirectory " _ & "ResultRole = PartComponent") For Each objFolder2 in colSubfolders2 strFolderName = objFolder2.Name 'Wscript.Echo 'WScriptだと空の表示が気持ち悪いので削除 Wscript.Echo objFolder2.Name arrFolderPath = Split(strFolderName, "\") strNewPath = "" For i = 1 to Ubound(arrFolderPath) strNewPath = strNewPath & "\\" & arrFolderPath(i) Next strPath = strNewPath & "\\" Set colFiles = objWMIService.ExecQuery _ ("Select * from CIM_DataFile where Drive = '" & arrFolderPath(0) & "'" & _ " and Path = '" & strPath & "'") For Each objFile in colFiles Wscript.Echo objFile.Name Next GetSubFolders strFolderName Next End Sub -----

Gami7
質問者

お礼

なるほど、ドライブ指定の設定が抜けていた訳で、 Drive = '" & arrFolderPath(0) の設定をすることによりいちいちAドライブを見に行くのを解消出来るとは。勉強になりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

何をしているかもわからないスクリプトを実行してしまう貴方の度胸がスゴイです。

Gami7
質問者

お礼

お褒めのお言葉、恐縮です。 何せ、常にチャレンジャーなもんで。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • スクリプトの拡張子を教えてください

    http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/feb08/hey0201.mspx 「サウンドをサウンド イベントにランダムに割り当てる方法はありますか」MSN SCriputing Guy!より 上のスクリプトを作成したいのですが、メモ帳で作成していいのでしょうか? その場合は保存の拡張子は何になりますか? あるいは、サイトにあるソフトでダウンロードしてスクリプトを作成するべきでしょうか? http://www.microsoft.com/japan/technet/scriptcenter/tools/default.mspx このサイトにはいくつかソフトがありますが、どれでもいいのでしょうか? スクリプトは初心者なので、見当がつきません。 教えてください。

  • ローカルグループにドメインユーザを追加する方法

    お世話になっております。 下記のページを参考に ローカルアドミンにてログオンしている際に、 VBSにてローカルグループにドメインユーザを追加したいのですが、うまくいきません。 Hey Scripting Guys http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/oct04/hey1008.mspx VBS実行時に「ネットワークパスが見つかりません」とエラーが表示されます。 以上、よろしくお願いいたします。

  • Windows7でWMIのWin32_DiskDriveToDiskPartitionが使えない?

    http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/may05/hey0523.mspx の記事を参考に、ローカルPCのドライブのパーティションを調べてドライブ文字を表示するプログラムで、Windows7(Beta)で動作するか確認したところ、動かなかったのでどこがおかしいのか調べたところWin32_DiskDriveToDiskPartitionが影響して、パーティションのリストが取得できてない様子なんです。 もともと、上の記事を参考にプログラムしたので、あまりWMIに詳しくないので、勘違いかもしれませんが、WMIに詳しい方がおられたら何かヒントでも教えていただけると助かります。

  • IE8 アドレスバーに表示される URLの一覧をクリアする方法はありますか

    Win7 IE8 を使用しています。 XPやVistaではレジストリキー:TypedURLs を操作して簡単に実現できていたのですが、Win7ではレジストリに存在しないです。 どのようにして標題の件を実現できるのか、ご存知のかたはアドバイスお願いいたします。 なお、XP、Vistaでの実例は、下記マイクロソフトのサイトに説明があります。 この説明にあるレジストリキー HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs が見当たらないのです。 ---Internet Explorer のアドレス バーに表示される URL の一覧をクリアする方法はありますか http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/may06/hey0509.mspx

  • 【VB.NET】 パワポ操作を非表示で

     質問させていただきます. どうぞよろしくお願いいたします.  PowerPointの操作をするコードを作成して使っております. 毎回立ち上がるパワポのウィンドウを非表示にしたいのですが, myAPP.Visible = True状態でないと,presentations.Openでエラーが出てしまいます. Dim myAPP As Object myAPP = CreateObject("PowerPoint.Application") Dim myAPPpre = myAPP.presentations Dim Mypath As String = TextBoxパス.Text Dim FName As String myAPP.Visible = True FName = Dir(Mypath & "test.ppt", vbNormal) With myAPPpre.Open(Mypath & FName) '←上のmyAPP.Visible = Trueを消すとエラー                     '「Presentations.Open : 無効な要求です。PowerPoint のフレーム ウィンドウは存在しません。」となります.  どうにか見えない状態で実行できないものでしょうか. 調べておりますと,同じ現象がよくあるようでした. (http://www.kotaete-net.net/Default.aspx?pgid=14&qid=80254136041 http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/sept07/hey0921.mspx のページ中間あたり「さいわい、Visible プロパティを True に設定することによって~」のところ.)  もし何か方法が分かるかたがいらっしゃいましたら, アドバイスいただければと思います.  どうぞよろしくお願いいたします.

  • ActiveDirectoryにおけるパスワード一括登録

    Windows2003Serverで構築したActiveDirectoryにおいて、1000以上のアカウントに対してパスワードを一括登録したいと思っています。 色々検索した結果、マイクロソフトのスクリプトセンターで見つけたWSHで実施するのが簡単そうです。 http://www.microsoft.com/japan/technet/scriptcenter/scripts/ad/users/pwds/uspwvb01.mspx そこにあったサンプルは以下で、3行になっています。 Set objUser = GetObject _ ("LDAP://cn=MyerKen,ou=management,dc=fabrikam,dc=com") objUser.SetPassword "i5A2sj*!" WSHのことは初心者のため、初歩的な質問で恐縮ですが、 上記スクリプトを1行で記述したいのですが、「_」のところでエラーになってしまいます。 どのように変更したらいいのでしょうか? 1000以上のデータをEXCLEで作成しBATで実行したいので 複数行になるのはまずいのです。ご教授よろしくお願いします。

  • セキュリティホールを埋めろとのメッセージが

    こんにちは、お世話になります。 ウイルスバスター2007使用中です。 セキュリティ診断を行うと『MS06-061』 を修正しろと出ます。 Windows Update では解消できず、http://www.microsoft.com/japan/technet/security/bulletin/ms06-061.mspx で個別にダウンロードして(上から2番目のやつ)実行させたのですが、それでもダメでした。 気色悪いので何とかしたいのですが、この先の手立てをお教え下さいませ。

  • vbscriptで作成後90日経過したフォルダを削除する方法を教えてください。

    こんにちは。 WindowsServer2003の環境で、以下のVBSを使用して作成後に90日経過したファイルを削除しています。 フォルダもファイルと同様に、作成後に90日経過したら削除を行いたいので、フォルダを削除する方法をお教えください。 ファイル削除の参考にしたサイト http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/nov06/hey1117.mspx ファイル削除VBS dtmDate = Date - 90 strDay = Day(dtmDate) If Len(strDay) < 2 Then strDay = "0" & strDay End If strMonth = Month(dtmDate) If Len(strMonth) < 2 Then strMonth = "0" & strMonth End If strYear = Year(dtmDate) strTargetDate = strYear & strMonth & strDay strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set FileList = objWMIService.ExecQuery _ ("ASSOCIATORS OF {Win32_Directory.Name='C:\WINDOWS\system32\LogFiles\W3SVC1'} Where " _ & "ResultClass = CIM_DataFile") For Each objFile In FileList strDate = Left(objFile.CreationDate, 8) If strDate < strTargetDate Then If objFile.Extension = "log" Then objFile.Delete End If End If Next よろしくお願いいたします。

  • Windows XP 用セキュリティ更新プログラムは無料?

    題名のとうりWindows XP 用セキュリティ更新プログラム (KB923810) をダウンロードしたいんですが。無料ですか URLは↓こちらです。 http://www.microsoft.com/japan/technet/security/bulletin/MS07-055.mspx です。 なるべく早めの回答お願いいたします。

  • IE7.0自動配布

    IE7.0が、2月13日に自動配布されると思いますが、 ドメイン配下の人のPCにも自動配布されるのでしょうか? MSの記述内容から判断すると、admi権限のローカルPCで ネットワーク接続しているpcにのみ自動配布が 実行されるような文もありますが、どう思われますか? また、XPでIE7.0を利用すると不具合が発生していましたが もう修正されていると思っていいのでしょうか? http://www.microsoft.com/japan/technet/updatemanagement/windowsupdate/ie7announcement.mspx