0

VBScript を使用して、特定のフォルダー内のすべての csv を選択し、それらを 1 つに連結しようとしています。パスと拡張プロパティを指定して、Win32_Directory で ExecQuery を使用して、すべての csv をコレクションに追加しています。テストするフォルダに 5 つの csv があります。ただし、返されるコレクションは常に null です。

これが私のコードです:

strComputer = "."
Set wshShell = WScript.CreateObject( "WScript.Shell" )
Set objWMIService = GetObject("winmgmts:" _
   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

'Options for CreateTextFile
boolOverwrite = True
boolUnicode = True

'Options for OpenTextFile
constForReading = 1
constForWriting = 2
constForAppending = 8
boolCreate = False
constTristate = -1

strPath = "C:\Users\adam\Documents\Test\Temp.csv"
strDrivePath = "C:\Users\adam\Documents\Test"

'Creates object reference to files in relevant folder.
Set objFSO = CreateObject ("Scripting.FileSystemObject")

'Creates new CSV to write others' contents to.
Set objNew = objFSO.CreateTextFile(strPath,boolOverwrite,boolUnicode)

Set colCSV = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_Directory WHERE Path = strDrivePath AND Extension = 'csv'")

'Concatenates contents of CSVs
For Each objCSV in colCSV
 Set objTemp = objFSO.OpenTextFile(objCSV.Path & objCSV.FileName & objCSV.Extension,constForReading,boolCreate,constTristate)
 Set strLine = objTemp.ReadLine
 objNew.Write strLine 

Next

また、OpenTextFile のパスを指定した方法が機能するかどうかもわかりません。しかし、現在の私の主な関心事は、必要なファイルを返すクエリを取得することです。

助けてくれてありがとう!

4

1 に答える 1

2

ここでいくつかの問題があります。

  1. ファイルを選択する場合は、クラスを使用しますCIM_DataFileWin32_Directoryご想像のとおり、ディレクトリ用です。

  2. プロパティ内のバックスラッシュはPathエスケープする必要があります ( \\)。

  3. strDrivePathは変数ですが、WMI クエリでそのまま使用しています。

  4. このスクリプトをリモート マシンで実行するつもりですか? FileSystemObjectそうでない場合は、メソッドを使用してみませんか? FSO オブジェクトは既に作成されています。

FileSystemObject または WMI クエリを使用して仕様に一致するファイルを検索する方法を示す、過去に回答した同様の質問を次に示します。

この状況では、クエリは次のようになります。

strFileSpec = "C:\\Users\\Adam\\Documents\\Test\\%.csv"

Set colCSV = objWMIService.ExecQuery _
 ("select * from CIM_DataFile where Name like '" & strFileSpec & "'")

ただし、ステートメントでDriveとの値を指定すると、クエリの実行が (多くの場合顕著に) 速くなります。Path例については、私のリンクされた投稿を参照してください。

編集:あなたが私がリンクした質問のOPでもあることに気付きました!

于 2014-08-19T00:19:26.850 に答える