(現在 過去ログ14 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■1964 / inTopicNo.1)  ファイル検索
  
□投稿者/ 太郎 -(2007/01/06(Sat) 10:29:11)
    桐で、USBフラッシュメモリの中にある、A.tblを探したいのです
    USBフラッシュメモリをいろいろなPCに接続されます。

    例えばPC1にフラッシュメモリを接続した場合、Eドライブになります。
    PC2に接続した場合、Fドライブになります。

    USBフラシュメモリを接続し、そのドライヴにあるA.tblを、一括処理で表示させたいのです
    よろしくご指導ください。
引用返信 [メール受信/OFF] 削除キー/
■1972 / inTopicNo.2)  Re[1]: ファイル検索
□投稿者/ 宮城 -(2007/01/09(Tue) 19:47:50)
    No1964に返信(太郎さんの記事)

    太郎さん、こんにちは。何で困ってらっしゃるのかよくわかりません。これでは
    ダメなのですか?

    PC1ならこのように記述。
    表 "E:\k3\data\実際のフォルダ名\A.tbl"
    表形式編集

    PC2ならこのように記述。
    表 "F:\k3\data\実際のフォルダ名\A.tbl"
    表形式編集

    なんら問題なく開けると思いますが。どのPCでも共通の一括で開きたいとでも?
引用返信 [メール受信/OFF] 削除キー/
■1973 / inTopicNo.3)  Re[2]: ファイル検索
□投稿者/ うにん -(2007/01/09(Tue) 20:09:16)

    > 太郎さん、こんにちは。何で困ってらっしゃるのかよくわかりません。

    ですねえ。

    「全てのドライブから」A.tblを検索、ならできそうですが、
    USBフラッシュかどうかはディスクサイズで推測するぐらいしかなさそうです。

引用返信 [メール受信/OFF] 削除キー/
■1974 / inTopicNo.4)  Re[3]: ファイル検索
□投稿者/ 太郎 -(2007/01/10(Wed) 08:10:55)
    宮城さん、うにんさん
    ありがとうございます。
    少々体調を崩しており、レスが遅くなり申し訳ありません。

    >>太郎さん、こんにちは。何で困ってらっしゃるのかよくわかりません。
    > ですねえ。

    どのように質問したらいいかわかりませんでした。

    > 「全てのドライブから」A.tblを検索、ならできそうですが、
    > USBフラッシュかどうかはディスクサイズで推測するぐらいしかなさそうです。
    全てのドライブからA.tblを探したいのです。
引用返信 [メール受信/OFF] 削除キー/
■1975 / inTopicNo.5)  Re[3]: ファイル検索
□投稿者/ hidetake -(2007/01/10(Wed) 09:59:58)
    > 「全てのドライブから」A.tblを検索、ならできそうですが、
    > USBフラッシュかどうかはディスクサイズで推測するぐらいしかなさそうです。

    桐だけでは無理でしょうね。

    と言う事で、ほとんど独り言になってしまうのだろうけど?

    FileSystemObject の Drive オブジェクトを利用すれば
    '=================================================================
    'FileSystemObject の Drive オブジェクトを利用する方法

    For Each Drv In WScript.CreateObject("Scripting.FileSystemObject").Drives
    If Drv.DriveType = 1 Then
    Call MsgBox(Drv.DriveLetter & "は取外可能ドライブです")
    End If
    Next

    '-----------------------------------
    'Unknown 0 ドライブタイプを判別できません。
    'Removable 1 取り外し可能ドライブ。たとえば、フロッピーなど。
    'Fixed 2 取り外し不可能なドライブ。たとえば、普通のハードディスクなど。
    'Remote 3 ネットワークに装填されたドライブまたは共有ドライブ。
    'CDRom 4 ドライブはCD-ROMです。
    'RAMDisk 5 ドライブは揮発性のディスクRAMです。
    '-----------------------------------
    '=================================================================


    WMI の Win32_LogicalDisk を利用すれば
    '=================================================================
    'WMI の Win32_LogicalDisk を利用する方法

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 2", , 48)

    For Each objItem In colItems
    Call MsgBox(objItem.DeviceID & "は取外可能ドライブです")
    Next

    '-----------------------------------
    'ドライブの種類を取得
    '0 Unknown
    '1 No Root Directory
    '2 Removable Disk
    '3 Local Disk
    '4 Network Drive
    '5 Compact Disc
    '6 RAM Disk
    '-----------------------------------
    '=================================================================

    てな感じで、リムーバブルなドライブは取得できるようだけれど
    この場合は、フロッピーディスクとかフラッシュドライブとかの
    判断まではつきませんね。

    WMI を使う限り、私の環境では MediaType が未定義のものを条件
    に加えると、一応、Flash ドライブだけが取得できましたけど。

    Select * from Win32_LogicalDisk Where DriveType = 2 And MediaType is NULL

    と、備忘録をかねて。 (^^;

引用返信 [メール受信/OFF] 削除キー/
■1977 / inTopicNo.6)  Re[4]: ファイル検索
□投稿者/ 尾形 -(2007/01/10(Wed) 10:40:03)
    どうも、こんにちは

    変数でUSBドライブを指定しておくって単純な事ではないのかしら


引用返信 [メール受信/OFF] 削除キー/
■1980 / inTopicNo.7)  Re[5]: ファイル検索
□投稿者/ うにん -(2007/01/10(Wed) 20:10:44)
    > 変数でUSBドライブを指定しておくって単純な事ではないのかしら

    それもいいですね〜。
    他には環境変数を設定しておくと桐の関数で取得できますね。

引用返信 [メール受信/OFF] 削除キー/
■1981 / inTopicNo.8)  Re[6]: ファイル検索
□投稿者/ 太郎 -(2007/01/11(Thu) 08:22:19)
    尾形様・うにん様
    ありがとうございます。
    No1980に返信(うにんさんの記事)
    >>変数でUSBドライブを指定しておくって単純な事ではないのかしら
    >
    > それもいいですね〜。
    > 他には環境変数を設定しておくと桐の関数で取得できますね。
    う〜〜んそのUSBのドライブを探したいのです。
    ちょっとむりかなぁ〜?
    >
引用返信 [メール受信/OFF] 削除キー/
■1982 / inTopicNo.9)  Re[4]: ファイル検索
□投稿者/ 太郎 -(2007/01/11(Thu) 08:23:23)
    hidetake様
    ご指導ありがとうございます。
    申し訳ないですが私には理解できません。
    No1975に返信(hidetakeさんの記事)
    >>「全てのドライブから」A.tblを検索、ならできそうですが、
    >>USBフラッシュかどうかはディスクサイズで推測するぐらいしかなさそうです。
    >
    > 桐だけでは無理でしょうね。
    >
    > と言う事で、ほとんど独り言になってしまうのだろうけど?
    >
    > FileSystemObject の Drive オブジェクトを利用すれば
    > '=================================================================
    > 'FileSystemObject の Drive オブジェクトを利用する方法
    >
    > For Each Drv In WScript.CreateObject("Scripting.FileSystemObject").Drives
    > If Drv.DriveType = 1 Then
    > Call MsgBox(Drv.DriveLetter & "は取外可能ドライブです")
    > End If
    > Next
    >
    > '-----------------------------------
    > 'Unknown 0 ドライブタイプを判別できません。
    > 'Removable 1 取り外し可能ドライブ。たとえば、フロッピーなど。
    > 'Fixed 2 取り外し不可能なドライブ。たとえば、普通のハードディスクなど。
    > 'Remote 3 ネットワークに装填されたドライブまたは共有ドライブ。
    > 'CDRom 4 ドライブはCD-ROMです。
    > 'RAMDisk 5 ドライブは揮発性のディスクRAMです。
    > '-----------------------------------
    > '=================================================================
    >
    >
    > WMI の Win32_LogicalDisk を利用すれば
    > '=================================================================
    > 'WMI の Win32_LogicalDisk を利用する方法
    >
    > strComputer = "."
    > Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    > Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 2", , 48)
    >
    > For Each objItem In colItems
    > Call MsgBox(objItem.DeviceID & "は取外可能ドライブです")
    > Next
    >
    > '-----------------------------------
    > 'ドライブの種類を取得
    > '0 Unknown
    > '1 No Root Directory
    > '2 Removable Disk
    > '3 Local Disk
    > '4 Network Drive
    > '5 Compact Disc
    > '6 RAM Disk
    > '-----------------------------------
    > '=================================================================
    >
    > てな感じで、リムーバブルなドライブは取得できるようだけれど
    > この場合は、フロッピーディスクとかフラッシュドライブとかの
    > 判断まではつきませんね。
    >
    > WMI を使う限り、私の環境では MediaType が未定義のものを条件
    > に加えると、一応、Flash ドライブだけが取得できましたけど。
    >
    > Select * from Win32_LogicalDisk Where DriveType = 2 And MediaType is NULL
    >
    > と、備忘録をかねて。 (^^;
    >
引用返信 [メール受信/OFF] 削除キー/
■1984 / inTopicNo.10)  Re[5]: ファイル検索
□投稿者/ hidetake -(2007/01/11(Thu) 10:21:44)
    一応、自分の備忘録として? _o_

    次のような GetFlashDrive.vbs を作成し、実行すると
    '--------------------------------------------------------------------------
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 2 And MediaType is NULL", , 48)

    For Each objItem In colItems
    FlashDrive = FlashDrive & objItem.DeviceID & ","
    Next

    Call WriteVarFile()
    WScript.Quit

    Sub WriteVarFile()
    Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
    Set objTS = objFS.CreateTextFile("FlashDrive.var", True, False)
    objTS.WriteLine "FlashDrive,文字列,共通," & FlashDrive
    objTS.Close
    End Sub
    '--------------------------------------------------------------------------

    カーレントパスに FlashDrive.var と言う、変数ファイル
    が作成される。
    全く Flash ドライブと思われるドライブが存在しない場合は
    FlashDrive,文字列,共通,
    と言う中身になるし、
    1ドライブがつながった状態では
    FlashDrive,文字列,共通,E:,
    2ドライブがつながった状態では
    FlashDrive,文字列,共通,E:,F:,
    と、言うように、ドライブが "," でつながれた状態で
    格納される。

    この FlashDrive.var を桐で読み込めば、フラッシュ
    もしくはリムーバブルなドライブを知る事はできると
    思います。

    今回はあえてフラッシュと言う限定されたものを想定
    してみたけれど、MO や取り外し可能な HD なんかは
    未確認。

    あえて、データ交換したい場合は、データ交換用の
    メディアはボリュームラベルを交換用の判断名とする
    とか(判断するための名前を付ける)とか、尾形さんの
    書かれた変数ファイルや、あるいは環境変数に、あら
    かじめ設定しておくとか、あるいは、フラッシュを
    差し込むと、自動起動のシステムが働くと思うけれど
    なんかそういうのを利用するのも手かも知れません。

引用返信 [メール受信/OFF] 削除キー/
■1990 / inTopicNo.11)  Re[4]: ファイル検索
□投稿者/ うにん -(2007/01/12(Fri) 13:28:35)
    > 全てのドライブからA.tblを探したいのです。

    hidetakeさんのを見て、「なでしこ」でやってみました。

    一括処理は
    システム "d:\nadesiko\cnako.exe","取り外し可能ドライブからA.TBLを起動.nako"

    〜.nakoの中身は
    使用可能ドライブ取得
    それを反復
    ドライブ名はそれ
    もしドライブ名のドライブ種類が「取り外し可能」ならば
    ドライブ名&「A.TBL」を起動
    ここまで
    ここまで
    終わり

    ドライブサイズなどでメディアが無い場合をエラー処理しようとしたのですが
    vnakoで実行するとなぜかうまくいきませんでした。
    cnakoではエラー処理なしでもスキップ(中断?)しているようです。

    「全ファイル列挙」というコマンドもあるので必要ならサブディレクトリも簡単に探せます。
    制御構造を字下げでしか書けないので1行スクリプトにできない(?)のが弱点。

引用返信 [メール受信/OFF] 削除キー/
■1992 / inTopicNo.12)  Re[5]: ファイル検索
□投稿者/ hidetake -(2007/01/12(Fri) 17:38:25)
    > 「全ファイル列挙」というコマンドもあるので必要ならサブディレクトリも簡単に探せます。
    > 制御構造を字下げでしか書けないので1行スクリプトにできない(?)のが弱点。
    >

    うにんさんにつられて WMI & VBScript で全ファイル列挙 (^^;

    SearchFile.vbs
    '----------------------------------------------------------------------------
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

    Set colFiles = objWMIService.ExecQuery _
    ("Select * from CIM_Datafile Where Drive = 'D:' And FileName = 'test' And Extension = 'tbl'")

    For Each objFile in colFiles
    SearchFile = SearchFile & """" & objFile.Name & """" & ","
    Next

    Call WriteVarFile()
    WScript.Quit

    Sub WriteVarFile()
    Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
    Set objTS = objFS.CreateTextFile("SearchFile.var", True, False)
    objTS.WriteLine "SearchFile,文字列,共通," & SearchFile
    objTS.Close
    End Sub
    '----------------------------------------------------------------------------

    検索は
    Drive = 'D:' And FileName = 'test' And Extension = 'tbl'
    のところで指定していますが、ドライブが D 、ファイル名が
    test.tbl をサンプルといたしました。

    結果は SearchFile.var (桐の変数ファイル形式)に検索した
    結果がリストアップされます。

    システムドライブ以外であれば、結構速いような気がします。
    なお、ドライブ指定の Drive = 'D:' を除けば、全ドライブ
    を対象に検索をするはずなのですが、私の環境では、エラーが
    発生しました。(^^;
    時間もかかるし、やめた方が良いと思います。
    システムドライブを対象とするならば、Path = とか Path <>
    とか入れて、対象を絞った方がよいでしょう。

    # WMI の凄いところ(やばいところ)は strComputer = "."
    # の . を hostname で別のコンピュータ名を指定してやれば
    # 別のコンピュータの中のファイルまで検索できるシステム
    # でもあると言うと事ですね!

引用返信 [メール受信/OFF] 削除キー/
■1993 / inTopicNo.13)  Re[6]: ファイル検索
□投稿者/ hidetake -(2007/01/12(Fri) 18:14:02)
    > システムドライブ以外であれば、結構速いような気がします。
    > なお、ドライブ指定の Drive = 'D:' を除けば、全ドライブ
    > を対象に検索をするはずなのですが、私の環境では、エラーが
    > 発生しました。(^^;
    > 時間もかかるし、やめた方が良いと思います。
    > システムドライブを対象とするならば、Path = とか Path <>
    > とか入れて、対象を絞った方がよいでしょう。

    私のパソコンはネットワークドライブも複数マップしてありますが
    試しに、ネットワークドライブを切って、全ドライブを対象に検索
    したら、システムドライブも含めて、ファイルの多いドライブは
    4ドライブほどですが、その中から4秒ぐらいで5つのファイルを
    検索してきました。(Cドライブも全部含めてです)

    ファイルの極端に多いネットワークドライブがつながっていなけれ
    ば、システムドライブを対象に別に問題ないかも? (^^;

引用返信 [メール受信/OFF] 削除キー/
■1994 / inTopicNo.14)  Re[5]: ファイル検索
□投稿者/ 太郎 -(2007/01/12(Fri) 18:42:47)
    うにんさん
    「なでしこ」って何ですか?

引用返信 [メール受信/OFF] 削除キー/
■1995 / inTopicNo.15)  Re[6]: ファイル検索
□投稿者/ うにん -(2007/01/12(Fri) 20:11:50)
http://nadesi.com/
    > 「なでしこ」って何ですか?

    そういう時は、まずGoogleで調べましょう。

    vbsと違ってデフォルトではインストールされてないのが一番の弱点かな^^;
    .exeも作れるので一括処理といっしょに配布してしまえばいいですが、この件に
    関してはcnakoを使ってもなぜかexe化するとメディアがない場合エラーになって
    しまった。

引用返信 [メール受信/OFF] 削除キー/
■1996 / inTopicNo.16)  Re[6]: ファイル検索
□投稿者/ hidetake -(2007/01/15(Mon) 07:19:06)
    せっかくだから、最初の問題設定通り、フラッシュドライブに
    ある指定のファイルを検索するスクリプトを(すなわち最初の
    スクリプトと2番目のスクリプトを組み合わせただけのもの)
    アップしておきます。

    結果は、今回は桐の配列変数で変数ファイルを作るようにして
    みました。

    SearchFile.vbs
    '-----------------------------------------------------------------------------
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

    Set colItems = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 2 And MediaType is NULL", , 48)

    For Each objItem In colItems

    Set colFiles = objWMIService.ExecQuery _
    ("Select * from CIM_Datafile Where Drive = '" & objItem.DeviceID & "' And FileName = 'test' And Extension = 'tbl'")

    For Each objFile in colFiles
    SearchFile = SearchFile & objFile.Name & "*"
    Next

    Next

    If Right(SearchFile, 1) = "*" Then
    SearchFile = Left(SearchFile, Len(SearchFile) - 1)
    End If

    Call WriteVarFile()
    WScript.Quit

    Sub WriteVarFile()
    Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
    Set objTS = objFS.CreateTextFile("SearchFile.var", True, False)
    SearchFileArray = Split(SearchFile, "*", -1, 1)
    If UBound(SearchFileArray) >= 0 Then
    objTS.WriteLine "SearchFile,文字列,共通_[" & UBound(SearchFileArray)+1 & "]{"
    For i = LBound(SearchFileArray) to UBound(SearchFileArray)
    objTS.WriteLine SearchFileArray(i)
    Next
    objTS.WriteLine "}"
    End If
    objTS.Close
    End Sub
    '-----------------------------------------------------------------------------

引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -