2010年8月5日木曜日

htaでDirコマンド

Check

じつは前回の記事ではDir関数の結果をきちんと取得できていない。

「exCommand = exCommand & " " & document.form1.fileaddr.value & "*.*"」の行でテキスト格納フォルダ(フルパス)のテキストボックスで指定したフォルダに「*.*」を文字列連結してDirコマンドのパラメータとして使用していたため、

dir c:\temp*.*

と同義となった。

そのため、『c:ドライブ配下の先頭がtempを含むファイル名(.ドットを含む)』という意味となり、tempフォルダはおろか、そのほかのファイルにもヒットせず、C:\の空き容量を示すのみとなっている。

 

改善方法は"*.*"の前に「¥」を追記し、ファイルが複数あった場合のコードにする。

ReadAllをReadLineに変更し、Do Untilで全行取得しきるまでループさせよう。

 

改善したGET_FileName関数は下記のとおり。

    ' ファイル一覧取得
    Sub GET_FileName()

        Dim WshShell, oExec
        Dim strTemp

        Set WshShell = CreateObject("WScript.Shell")

        ' dirコマンドの実行
        exCommand = "cmd /c dir /o"
        exCommand = exCommand & " " & document.form1.fileaddr.value & "\*.*"
        Set oExec = WshShell.Exec(exCommand)

        Do Until oExec.StdOut.AtEndOfStream
            strTemp = strTemp & oExec.Stdout.ReadLine() & vbCrLf

        Loop

        MsgBox strTemp

    End Sub

実行すると下記のメッセージが表示される。

dir_msg2