◆ [VBScript] ドラッグ&ドロップ処理ツールのテンプレート
こんにチワワ。どーもボキです。

VBSファイル(または、ショートカット)にドロップされたファイルを処理するスクリプト。
フォルダがドロップされた場合は、サブフォルダも含め、そのなかのすべてのファイルを処理する。

とりあえずCSVファイルが対象。
' 引数なし
If WScript.Arguments.Count = 0 Then WScript.Quit

Set objWS = CreateObject("WScript.Shell")
Set objFS = CreateObject("Scripting.FileSystemObject")

' 引数でループ
For i = 0 To WScript.Arguments.Count -1: Do
s = WScript.Arguments.Item(i)

If objFS.FileExists(s) Then
ProcFile(s)
Else
SearchFile(s)
End If
Loop Until 1: Next

r = objWS.PopUp("処理が終了しました。",3,"終了メッセージ",64)
'============================================================


' フォルダ内のファイル---------------------------------------
Sub SearchFile(DPath)
Set Folder = objFS.GetFolder(DPath)

' フォルダ内のフォルダ
For Each SubFolder In Folder.SubFolders: Do
SearchFile(SubFolder.Path)
Loop Until 1: Next

' フォルダ内のファイル
For Each File In Folder.Files: Do
ProcFile(File.Path)
Loop Until 1: Next
End Sub

' ファイル処理メイン ----------------------------------------
Function ProcFile(FPath)
ProcFile = False
If LCase(Right(FPath,3)) <> "csv" Then Exit Function
' ※※※処理実体を記述※※※

ProcFile = True
End Function
' ----------------------------------------------------------



[PR]
by yozda | 2012-04-30 13:53 | プログラミング | Trackback | Comments(7)
トラックバックURL : http://yozda.exblog.jp/tb/15175980
トラックバックする(会員専用) [ヘルプ]
Commented by たかし at 2012-10-29 19:21 x
管理人様

いつもありがとうございます。度々こちらのサイトを参考にVBSを作成させて頂いております。
vbs初心者で申し訳ないのですが、一点質問させて頂いてよろしいでしょうか。

If UCase(Right(FPath,3)) <> "csv" Then Exit Function

ここの文章の意味が分かりません…
ファイルの右3文字がcsvなら処理実態部分を強制終了するものかと思ったのですが、どうも違いそうですし。

恐縮ではございますがご返答いただけませんでしょうか?
Commented by yozda at 2012-10-29 20:59
ブログの情報を活用いただきありがとうございます。

まず、ソースを間違えていました。すみません。
記事のソースは修正済みです。

誤:If UCase(Right(FPath,3)) <> "csv" Then Exit Function
    ↓
正:If LCase(Right(FPath,3)) <> "csv" Then Exit Function


> ファイルの右3文字がcsvなら処理実態部分を強制終了するものかと思った

私はCSVファイルを扱うことが多いので、
このテンプレートソースはCSVを扱うことを前提としていました。

そのため、拡張子csv以外ならば、Exit Function で ProcFile関数を抜ける
ということを意図しています。
Commented by たかし at 2012-10-29 21:32 x
早速の返信ありがとうございます!

納得できました!…が、この部分は
ProcFile = False
の下に移動するべきではないでしょうか?
Commented by yozda at 2012-10-29 23:16
Function ProcFile(FPath)
  ProcFile = False
  If LCase(Right(FPath,3)) <> "csv" Then Exit Function
  ' ※※※処理実体を記述※※※

  ProcFile = True
End Function

としているので、拡張子がcsv以外なら、何もせずにFalseを返し、
csvならば、それ用の処理を行い(処理自体は各自で記述)、Trueを返すことを意図しています。

で答えになっています?
Commented by たかし at 2012-10-29 23:20 x
完璧に納得です!!

ご教授頂きありがとうございました!
Commented by nanasi at 2012-11-10 12:04 x
  ProcFile = False
  ProcFile = True

この2行に関しては以下の行と役割が重複しているため不要かと思われますが、何か意図があって書かれてますでしょうか。
  If LCase(Right(FPath,3)) <> "csv" Then Exit Function
Commented by yozda at 2012-11-10 14:42
上のサンプルソースでは、
呼び出し元のSerarchFileが、ProcFile関数の戻り値に対して何もしていません。

これは使い方によっては、
ProcFileでの処理 成功/失敗 を把握する必要があることを想定し、記述しています。

なので、サンプルプログラムとしては、
ProcFileはSubで定義し、戻り値自体も要らなかったかも知れないですね。


また戻り値を指定においても、指定なしならFalseになると思われる(推測です)ので、
ProcFile = False も要らないかも知れないですね。
<< 連休前半 だって…かきなさいっていうから… >>