「更新処理」以外は、「削除処理」しかない、という前提ですが・・・
いったん、「Dummy.csv」というファイルに結果を書き込みながら処理しています。
最後に、元ファイルを削除して、「Dummy.csv」のファイル名を元のファイルのファイル名に直しています。
Option Explicit
Dim a, cv, dm, f, i, m, n, so, wa
Set so = CreateObject("Scripting.FileSystemObject")
Set wa = WScript.Arguments
For i = 0 to wa.Count - 1
If Lcase(so.GetExtensionName(wa(i))) = "csv" Then
f = so.GetParentFolderName(wa(i))
Set cv = so.OpenTextFile(wa(i), 1)
Set dm = so.OpenTextFile(f & "\Dummy.csv", 2, True)
a = cv.ReadLine
dm.WriteLine a & ",処理内容"
Do Until cv.AtEndOfStream
a = cv.ReadLine
If InStr(a, "更新") > 0 Then
dm.WriteLine a & ",更新処理"
Else
dm.WriteLine a & ",削除処理"
End If
Loop
cv.Close
dm.Close
Set cv = Nothing
Set dm = Nothing
n = so.GetFileName(wa(i))
so.DeleteFile wa(i), True
Set m = so.GetFile(f & "\Dummy.csv")
m.Name = n
End If
Next
Set wa = Nothing
Set so = Nothing
MsgBox("Finished!")
簡単な説明です。
Option Explicit
「厳密に」とか「明確に」というような意味ですが、このオプションを設定すると、変数は、その使用の前に、「Dim」等によって、宣言しておかなければなりません。
Set so = CreateObject("Scripting.FileSystemObject")
ファイルやフォルダを扱えるようにしていますが、今回は特に、テキストファイルを扱うのにも必要です。
Set wa = WScript.Arguments
ドラッグ&ドロップを待っています。
For i = 0 to wa.Count - 1
ドラッグ&ドロップされたファイルの数だけ処理。
If Lcase(so.GetExtensionName(wa(i))) = "csv" Then
「LCase()」は、英字を半角にする関数ですので、「Csv」や「CSV」の場合も、すべて「csv」になります。
「so.GetExtensionName()」は、「Scripting.FileSystemObject」の機能を使って(頭の「so.」)、拡張子を取得します。
したがって、ここは、「拡張子がcsvなら」となります。
f = so.GetParentFolderName(wa(i))
そのファイルが存在するフォルダを調べています。
Set cv = so.OpenTextFile(wa(i), 1)
「csv」ファイルを「読み込み専用」(=「1」)で開いています。
Set dm = so.OpenTextFile(f & "\Dummy.csv", 2, True)
同じフォルダ内に「Dummy.csv」ファイルを「書き込み専用」(=「2」)で、「新規作成を許可」(=「True」)しています。
a = cv.ReadLine
1行読み込んでいます。
dm.WriteLine a & ",処理内容"
「,処理内容」を後ろに付け加えて、「Dummy.csv」に書き出しています。
Do Until cv.AtEndOfStream
ファイルの終端まで処理。
a = cv.ReadLine
1行読み込んでいます。
If InStr(a, "更新") > 0 Then
もし、その1行に「更新」という文字が存在したら、
dm.WriteLine a & ",更新処理"
「Dummy.csv」に「,更新処理」を付け加えて書き出しています。
Else
それ以外の場合は、
dm.WriteLine a & ",削除処理"
後ろに、「,削除処理」を付け加えて書き出しています。
End If
Loop
を、ファイルの終端まで繰り返しています。
cv.Close
dm.Close
Set cv = Nothing
Set dm = Nothing
両ファイルを閉じています。
n = so.GetFileName(wa(i))
ドラッグ&ドロップされたファイルのファイル名を調べています。
so.DeleteFile wa(i), True
ドラッグ&ドロップされたファイルを削除しています。
Set m = so.GetFile(f & "\Dummy.csv")
「Dummy.csv」をゲット(「取得」)しています。
m.Name = n
「Dummy.csv」を、ドラッグ&ドロップされたファイルのファイル名に変更しています。
End If
Next
を、ドラッグ&ドロップされたファイルの数だけ処理しています。
Set wa = Nothing
Set so = Nothing
「Set ~」で使った変数は、「Nothing」で解放しておきます。
MsgBox("Finished!")
最後に、いつ終わったか分かりにくいので、「Finished!」と表示しています。
お礼
ご回答ありがとうございます。 わざわざコードのご説明していただき、 ありがとうございました。