Yahoo!ショッピング

2016年11月06日

VBS ファイルの差異を調べる

vbsでの開発に最近はまっている。
VB.NETも好きだけど、やっぱり基本であるコマンドラインのプログラムって面白い。
他のページとかいろいろ見ながら、「フォルダ1」と「フォルダ2」のファイルサイズの差異を比べるvbsを書いてみた。
差異があったらテキストファイルに書き出す。

Option Explicit

Dim FIND_START_FOLDER
Dim FIND_START_FOLDER2

Dim FIND_RESULT_FILE_NAME
Dim FIND_RESULT_FILE_NAME2
Dim FIND_RESULT_FILE_NAME3

FIND_RESULT_FILE_NAME = ".\FIND_RESULT.TXT"
FIND_RESULT_FILE_NAME2 = ".\FIND_RESULT2.TXT"
FIND_RESULT_FILE_NAME3 = ".\ファイルサイズ差異.TXT"

Dim FIND_RESULT_FILE_OBJ

Dim WSHShell
Dim newFolder
Dim oldFolder

'フォルダパス情報の入力
FIND_START_FOLDER = InputBox("PC@のフォルダパスを入力してください。" & vbnewline & vbnewline & "(例)\\169.254.1.1\c$\users\0011223344\Documents","フォルダサイズの比較")
if FIND_START_FOLDER="" then
'キャンセル
MsgBox ("キャンセルしました")
WScript.Quit
end if
if Right(FIND_START_FOLDER,1)="\" then FIND_START_FOLDER = left(FIND_START_FOLDER,len(FIND_START_FOLDER)-1)


FIND_START_FOLDER2 = InputBox("PCAのフォルダパスを入力してください。" & vbnewline & vbnewline & "(例)c:\temp\ドキュメント","フォルダサイズの比較")
if FIND_START_FOLDER2 ="" then
'キャンセル
MsgBox ("キャンセルしました")
WScript.Quit
end if
if Right(FIND_START_FOLDER2,1)="\" then FIND_START_FOLDER2 = left(FIND_START_FOLDER2,len(FIND_START_FOLDER2)-1)

Sub main()

Dim objFSO ' FileSystemObject
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

'1を探索
Set FIND_RESULT_FILE_OBJ = objFSO.OpenTextFile(FIND_RESULT_FILE_NAME,2,True,0)
'FIND_RESULT_FILE_OBJ.Write("#PATH,SIZE(byte),MODIFY DATE,MODIFY DATE AGE,")
'FIND_RESULT_FILE_OBJ.Write("ACCESS DATE,ACCESS DATE AGE")
'FIND_RESULT_FILE_OBJ.WriteLine("")
FindFolder objFSO.getFolder(FIND_START_FOLDER)
FIND_RESULT_FILE_OBJ.Close

'2を探索
Set FIND_RESULT_FILE_OBJ = objFSO.OpenTextFile(FIND_RESULT_FILE_NAME2,2,True,0)
'FIND_RESULT_FILE_OBJ.Write("#PATH,SIZE(byte),MODIFY DATE,MODIFY DATE AGE,")
'FIND_RESULT_FILE_OBJ.Write("ACCESS DATE,ACCESS DATE AGE")
'FIND_RESULT_FILE_OBJ.WriteLine("")
FindFolder objFSO.getFolder(FIND_START_FOLDER2)
FIND_RESULT_FILE_OBJ.Close

readFileList FIND_RESULT_FILE_NAME, FIND_RESULT_FILE_NAME2,FIND_RESULT_FILE_NAME3

WScript.Echo "終わった"

'テキストファイルを開く
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run FIND_RESULT_FILE_NAME3

End Sub


' フォルダ検索関数
Sub FindFolder(ByVal objParentFolder)

Dim objFile
Dim resultLine
For Each objFile In objParentFolder.Files
FIND_RESULT_FILE_OBJ.Write(objFile.ParentFolder & "\" & objFile.Name)
'FIND_RESULT_FILE_OBJ.Write(objFile.ParentFolder & "\" & objFile.Name & ",")
'FIND_RESULT_FILE_OBJ.Write(objFile.Size & ",") 'byte
'FIND_RESULT_FILE_OBJ.Write(objFile.DateLastModified & ",")
'FIND_RESULT_FILE_OBJ.Write(Fix(Date() - objFile.DateLastModified) & ",")
'FIND_RESULT_FILE_OBJ.Write(objFile.DateLastAccessed & ",")
'FIND_RESULT_FILE_OBJ.Write(Fix(Date() - objFile.DateLastAccessed))
FIND_RESULT_FILE_OBJ.WriteLine("")

Next

Dim objSubFolder ' サブフォルダ
For Each objSubFolder In objParentFolder.SubFolders
FindFolder objSubFolder
Next

End Sub



Sub readFileList(FIND_RESULT_FILE_NAME, FIND_RESULT_FILE_NAME2,FIND_RESULT_FILE_NAME3)

Dim objFSO ' FileSystemObject
Dim objFile
Dim filePath
Dim filePath2
Dim hikakuFile
Dim hikakuFile2
Dim fsoFileSize2

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set FIND_RESULT_FILE_OBJ = objFSO.OpenTextFile(FIND_RESULT_FILE_NAME3,2,True,0)

If Err.Number = 0 Then
Set objFile = objFSO.OpenTextFile(FIND_RESULT_FILE_NAME)
If Err.Number = 0 Then
FIND_RESULT_FILE_OBJ.Write("@とAの差異ファイル" & vbnewline)
Do While objFile.AtEndOfStream <> True
fsoFileSize2 = 0 '初期化
'WScript.Echo objFile.ReadLine
filePath = objFile.ReadLine
Set hikakuFile = objFSO.GetFile(filePath)

filePath2 = Replace(filePath,FIND_START_FOLDER,FIND_START_FOLDER2)

If objFSO.FileExists(filePath2) = false then
'WScript.Echo filePath2 & "が無い"
fsoFileSize2 = 0
Else
Set hikakuFile2 = objFSO.GetFile(filePath2)
fsoFileSize2 = hikakuFile2.Size
End If

If hikakuFile.Size <> fsoFileSize2 then
'WScript.Echo filePath & Chr(9) & hikakuFile.Size & Chr(9) & fsoFileSize2
FIND_RESULT_FILE_OBJ.Write(filePath & Chr(9) & hikakuFile.Size & Chr(9) & fsoFileSize2)
FIND_RESULT_FILE_OBJ.WriteLine("")
End If
Loop
objFile.Close
Else
WScript.Echo "ファイルオープンエラー: " & Err.Description
End If

'逆回し。2にあって1にないファイルを抽出
FIND_RESULT_FILE_OBJ.Write( vbnewline & "Aにあって@に無いファイル" & vbnewline)
Set objFile = objFSO.OpenTextFile(FIND_RESULT_FILE_NAME2)
If Err.Number = 0 Then
Do While objFile.AtEndOfStream <> True
fsoFileSize2 = 0 '初期化
'WScript.Echo objFile.ReadLine
filePath = objFile.ReadLine
Set hikakuFile = objFSO.GetFile(filePath)

filePath2 = Replace(filePath,FIND_START_FOLDER2,FIND_START_FOLDER)

If objFSO.FileExists(filePath2) = false then
'WScript.Echo filePath2 & "が無い"
fsoFileSize2 = 0
'WScript.Echo filePath & Chr(9) & hikakuFile.Size & Chr(9) & fsoFileSize2
FIND_RESULT_FILE_OBJ.Write(filePath & Chr(9) & hikakuFile.Size & Chr(9) & fsoFileSize2)
FIND_RESULT_FILE_OBJ.WriteLine("")
End If
Loop
objFile.Close
Else
WScript.Echo "ファイルオープンエラー: " & Err.Description
End If
Else
WScript.Echo "エラー: " & Err.Description
End If
FIND_RESULT_FILE_OBJ.Close
End Sub

main
posted by 秘構竜 at 03:49 | Comment(1) | 技術系
この記事へのコメント
Posted by sai at 2016年11月08日 08:53
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


【温泉】ホテル・旅館ランキング(全国)
秘構竜の日記」の先頭へ