2013年9月21日土曜日

Z10_Mainlvp.vbs

'############################################################
'# lpvパターンファイルをコピーする
'#
'# 実行方法:コマンドコンソールから、以下の用に実施する
'# D:\task\splx>cscript //nologo Z10_lbpMainlvp.vbs > splxpatcopy.log &
'# 
'# UPDATE 2013/08/21 
'#
'# PARAM:NONE 
'#
'#
'#
'############################################################
Option Explicit

' グローバル定義 
Dim iStepNo : iStepNo = 1 'ステップ番号
Dim msg : msg = "コピー候補のファイル lpt$vpn.*" 'メッセージ
Dim ivpn '処理対象件数 

'************************************************************
' 定数
'************************************************************
'' コピー元ディレクトリ 
Const BASEPATH = "D:\Program Files (x86)\Trend Micro\OfficeScan\PCCSRV"

'' コピー先ディレクトリ 
Const TAGTPATH = "D:\Program Files (x86)\Trend Micro\OfficeScan\PCCSRV\splxDownload"

'' 処理候補リスト
Const LIST_FILE_SRC = "d:\task\splx\tmp\FileListSrc.txt"
Const LIST_FILE_TGT = "d:\task\splx\tmp\FileListTgt.txt"

'' ドライブのリミット値(空容量)
Const DRIVE_FREE_LIMIT = 1000000000


'**************************************************************
' 全体処理
'**************************************************************

Call Init()
Call Main()
WScript.Quit (0)


'**************************************************************
' 初期処理
'**************************************************************
Sub Init()

Include "D:\task\splx\scripts\stdlib.vbs" ' 外部スクリプトをロード
'VBS起動するWSHコマンドがcScriptでない場合は
' エラーコード99で終了する

if Not (IsCscript()) then
WScript.Quit (99)
end if 
SetLogHeader(msg)


End Sub


'**************************************************************
' メイン処理
'**************************************************************
Sub Main ()
SetLogStepStart 1,"候補リストの作成"
Call MainProcLst() '元・宛先ディレクトリ候補リストを作成
GetDriveFree LIST_FILE_TGT,msg
SetLogStepEnd 1,"候補リストの作成"

SetLogStepStart 2,"リセット"
Call MainProcDel() '宛先ディレクトリから対象の削除
SetLogStepEnd 2,"リセット"

SetLogStepStart 3,"コピー処理"
Call MainProcCpy() '宛先ディレクトリへ対象の複写
SetLogStepEnd 3,"コピー処理"

GetDriveFree LIST_FILE_TGT,msg ' DISK情報の表示

End Sub

'-----------------------------------------------
' 削除処理
'-----------------------------------------------
Sub MainProcDel()

Dim fsoObj
Dim objTextSrc
Dim objTextTgt

WScript.Echo now & MSGLEVEL_I & "DELETE FILE DIR:" & TAGTPATH

'------------------------
' コピー先:候補リストによる削除
'------------------------ 
Dim objFSO ' ファイルシステムオブジェクト
Dim objTextStream ' テキストストリームオブジェクト
Dim strText ' テキスト内容
Dim delfile

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFSO.OpenTextFile(LIST_FILE_TGT, 1)

If Not objFSO.FolderExists(TAGTPATH) Then
WScript.Echo now & MSGLEVEL_S & " 削除処理でデイレクトリなし。停止" _
& vbCrLf & TAGTPATH
WScript.Quit (10)
END IF 

Do Until objTextStream.AtEndOfLine = True
strText = objTextStream.ReadLine

delfile = TAGTPATH & "\" & trim(strText)

objFSO.DeleteFile delfile, true
WScript.Echo now & MSGLEVEL_I & " FILE DELETE: " & trim(strText)
Loop

objTextStream.Close

Set objTextStream = Nothing
Set objFSO = Nothing

End Sub


'-----------------------------------------------
' コピー処理
'-----------------------------------------------
Sub MainProcCpy()

WScript.Echo now & MSGLEVEL_I & "COPY FILE FromDIR:" & BASEPATH & " -> " _
& vbCrLf & " ToDIR:" & BASEPATH

'------------------------
' コピー先:候補リストによる削除
'------------------------ 
Dim objFSO ' ファイルシステムオブジェクト
Dim objTextStream ' テキストストリームオブジェクト
Dim strText ' テキスト内容
Dim sFromFile
Dim sToFile 

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFSO.OpenTextFile(LIST_FILE_SRC, 1)

If Not objFSO.FolderExists(BASEPATH) Then
WScript.Echo now & MSGLEVEL_S & " コピー処理で元デイレクトリなし。停止" _
& vbCrLf & BASEPATH
WScript.Quit (10)
END IF 
If Not objFSO.FolderExists(TAGTPATH) Then
WScript.Echo now & MSGLEVEL_S & " コピー処理で先デイレクトリなし。停止" _
& vbCrLf & TAGTPATH
WScript.Quit (10)
END IF 

Do Until objTextStream.AtEndOfLine = True
strText = objTextStream.ReadLine

sFromFile = BASEPATH & "\" & trim(strText)
sToFile = TAGTPATH & "\" & trim(strText)
WScript.Echo now & MSGLEVEL_I & " FILE COPY : " & trim(strText) _
& " " & vbCrLf & GetFileAttribute2(sFromFile) 
'ファイルを上書きコピーする
If objFSO.FileExists(sFromFile) Then
Call objFSO.CopyFile(sFromFile, sToFile)
End If
Loop

objTextStream.Close

Set objTextStream = Nothing
Set objFSO = Nothing

End Sub


'-----------------------------------------------
' 候補リスト作成(メイン)
'-----------------------------------------------
Sub MainProcLst()

Dim fsoObj
Dim objTextSrc
Dim objTextTgt

Set fsoObj = CreateObject("Scripting.FileSystemObject")

'ログファイルがあったら抹消
If fsoObj.FileExists(LIST_FILE_SRC) Then
Call fsoObj.DeleteFile(LIST_FILE_SRC)
End If
If fsoObj.FileExists(LIST_FILE_TGT) Then
Call fsoObj.DeleteFile(LIST_FILE_TGT)
End If

'ログファイル準備
Set objTextSrc = fsoObj.OpenTextFile(LIST_FILE_SRC, 8, True, 0)
Set objTextTgt = fsoObj.OpenTextFile(LIST_FILE_TGT, 8, True, 0)

Dim objParam
objParam = BASEPATH

'------------------------
' コピー元、コピー先其々の候補リストを作成する
'------------------------ 
objParam = BASEPATH
'コピー元フォルダであるかをチェック
If fsoObj.FolderExists(objParam) Then
'リスト作成メイン実行
Call CreateFileList(fsoObj,objParam,objTextSrc)
Else
WScript.Echo now & MSGLEVEL_S & " リスト作成処理 コピー元デイレクトリなしで停止" _
& vbCrLf & BASEPATH & vbCrLf
WScript.Quit (10)

End If

If ivpn = 0 Then
WScript.Echo now & MSGLEVEL_W & " リスト作成処理 コピー元にファイルなしで終了" _
& vbCrLf & BASEPATH & vbCrLf
WScript.Quit (04)
End If


objParam = TAGTPATH
'コピー先フォルダであるかをチェック
If fsoObj.FolderExists(objParam) Then
'リスト作成メイン実行
Call CreateFileList(fsoObj,objParam,objTextTgt)
Else
WScript.Echo now & MSGLEVEL_S & " コピー先デイレクトリなしのためリスト処理を停止" _
& vbCrLf & TAGTPATH & vbCrLf
WScript.Quit (10)
End If

'ログファイルクローズ
objTextSrc.Close
objTextTgt.Close

'オブジェクト開放
Set objTextSrc = Nothing
Set objTextTgt = Nothing
Set fsoObj = Nothing

End Sub


'-----------------------------------------------
' 候補リスト作成(サブ)
'-----------------------------------------------
Sub CreateFileList(fsoObj,inFolderName,objText)

WScript.Echo now & MSGLEVEL_I & " 候補リスト : " & inFolderName
Dim fsoFolder
Dim fsoSubFolder
Dim fsoFile

ivpn = 0
'フォルダオブジェクト取得
Set fsoFolder = fsoObj.GetFolder(inFolderName)
For Each fsoFile In fsoFolder.Files
'ログに出力
IF left(fsoFile.name,len("lpt$vpn.")) = "lpt$vpn." THEN
objText.WriteLine fsoFile.name
ivpn = ivpn + 1 
END IF
Next

WScript.Echo now & MSGLEVEL_I & " リスト対象数: " & ivpn & "件"

End Sub


'************************************************************
' 外部スクリプトをロードする
'************************************************************
Function Include( strFileName )
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim file
Set file = fso.OpenTextFile( strFileName )
ExecuteGlobal file.ReadAll
file.Close
End Function