View Single Post
  #6  
Old 04-06-2010, 04:39 PM
Micke's Avatar
Micke Micke is offline
PA Super User
 
Join Date: Feb 2010
Location: Sweden
Posts: 131
Thanks: 11
Thanked 52 Times in 40 Posts
Hi!
I think it's working correctly now. I have also update the date parameter. You can now select from different date format.

Here's the updated script
Code:
'***********************************************************************
'* PACOMP_DT.vbs
'* @author: Micke
'* @hist 2010-04-05	CREATED:Script for adding Date and Time to Filename
'* @hist 2010-04-06 BUGFIX: Assumed the file extension always contains
'*							3 character, resulting in incorrect
'*							Filename when using a file extension with
'*							other than 3 characters.
'* @hist 2010-04-06	UPDATE:	Added support for different dateformat
'*
'* The script requires 4 parameters
'* Usage: cscript PACOMP_DT.vbs <param1> <param2> <param3> <param4>
'*
'* param1: 	-d1 = Add current date (YYYYMMDD) to filename
'*			-d2 = Add current date (DDMMYYYY) to filename
'*			-d3 = Add current date (MMDDYYYY) to filename
'*			-d = Works the same as -d1
'* 			-t = Add current time to filename
'*			-dt = Add current date and time to filename
'*
'* param2:	The commands PACOMP uses
'* param3:	Filename of the Archive with extension
'* param4:	Path to file(s) and/or directory
'*
'* Add date and time to Archivename MyArchive.zip
'* Example: cscript PACOMP_DT.vbs -dt -a C:\Temp\MyArchive.zip D:\*.doc
'*
'***********************************************************************
Option Explicit

'Variables
Dim FSO, WshShell, objRegEx, strDate, strDT_Parameter, strArchiveExtension
Dim strTime, strArchiveNamePath, strPACOMP_Commands, strFileName
Dim strOnlyArchiveName, strPath, strOnlyArchiveNameNoExtension
Dim strCompressionString, bCheck

'Constants
Const PACOMP = "C:\Programs\PACL\PACOMP.exe"

'Check number of arguments
If WScript.Arguments.Count <> 4 Then
	WScript.Echo "Usage: cscript PACOMP_DT.vbs <param1> <param2> <param3> <param4>"
	WScript.Echo "param1: -d1 = Add current date (YYYYMMDD) to filename"
	WScript.Echo "param1: -d2 = Add current date (DDMMYYYY) to filename"
	WScript.Echo "param1: -d3 = Add current date (MMDDYYYY) to filename"
	WScript.Echo "param1: -d = Works the same as -d1"
	WScript.Echo "param1: -t = Add current time to filename"
	WScript.Echo "param1: -dt = Add current date and time to filename"
	WScript.Echo "param2: The commands PACOMP uses"
	WScript.Echo "param3: Filename of the Archive with extension"
	WScript.Echo "param4: Path to file(s) and/or directory"
	WScript.Echo "Example: cscript PACOMP_DT.vbs -dt -a C:\Temp\MyArchive.zip D:\*.doc"
	WScript.Echo "Will add date and time to Archivename MyArchive.zip"
	WScript.Quit
End If

'Create the FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")

'Create the ShellObject
Set WshShell = CreateObject("WScript.Shell")

'Get data from the Arguments
strDT_Parameter = WScript.Arguments.Item(0)
strPACOMP_Commands = WScript.Arguments.Item(1)
strArchiveNamePath = WScript.Arguments.Item(2)
strFileName = WScript.Arguments.Item(3)

'Check the parameter for Date and Time
If CheckDTParameter() = True Then
	UpdateArchiveName()
	RunPACOMP()
Else
	WScript.Echo "Parameter 1 incorrect"
	WScript.Echo "Value set as: " & strDT_Parameter
	WScript.Echo "Expected value would be: -t, -d, -d1, -d2,-d3, -dt, -d1t, -d2t, -d3t"
	WScript.Echo "Exit the script"
	WScript.Quit
End If

Sub UpdateArchiveName()
	
	'Get the ArchiveName from the path
	strOnlyArchiveName = Mid(strArchiveNamePath, InStrRev(strArchiveNamePath, "\")+1)
	
	'Get the ArchiveExtension
	strArchiveExtension = Mid(strArchiveNamePath, InStrRev(strArchiveNamePath, ".")+1)
		
	'Get the ArchiveName without extension
	strOnlyArchiveNameNoExtension = Left(strOnlyArchiveName, Len(strOnlyArchiveName)-Len(strArchiveExtension)-1)
	
	'Get the Path without the ArchiveName
	strPath = Left(strArchiveNamePath,Len(strArchiveNamePath)-Len(strOnlyArchiveName))
		
	'Insert Date and Time to the ArchiveName
	If strDT_Parameter = "-d" Or strDT_Parameter = "-d1" Or strDT_Parameter = "-d2" Or strDT_Parameter = "-d3" Then
		strOnlyArchiveName = strOnlyArchiveNameNoExtension & "_" & strDate & "." & strArchiveExtension
	ElseIf strDT_Parameter = "-t" Then
		strOnlyArchiveName = strOnlyArchiveNameNoExtension & "_" & strTime & "." & strArchiveExtension
	Else
		strOnlyArchiveName = strOnlyArchiveNameNoExtension & "_" & strDate & "_" & strTime & "." & strArchiveExtension
	End If
	
	strArchiveNamePath = strPath & strOnlyArchiveName
	
End Sub

Sub RunPACOMP()

	'Create the string with parameters for PACOMP
	strCompressionString = PACOMP & " " & strPACOMP_Commands & " " & Chr(34) & strArchiveNamePath & Chr(34) & " " & Chr(34) & strFileName & Chr(34)
	WScript.Echo strCompressionString
	WshShell.Run strCompressionString, 0, True

End Sub

Function FormatNumbers(n, totalDigits)
 
	If totalDigits > Len(n) Then
		FormatNumbers = String(totalDigits-Len(n),"0") & n 
    Else 
        FormatNumbers = n 
   	End If
   	 
End Function

Function CheckDTParameter()

	Select Case strDT_Parameter
		Case "-d" 'YYYYMMDD
			bCheck = True
			strDate = Year(Date()) & FormatNumbers(Month(Date()),2) & FormatNumbers(Day(Date()),2)
		Case "-d1" 'YYYYMMDD
			bCheck = True
			strDate = Year(Date()) & FormatNumbers(Month(Date()),2) & FormatNumbers(Day(Date()),2)
		Case "-d2" 'DDMMYYYY
			bCheck = True
			strDate = FormatNumbers(Day(Date()),2) & FormatNumbers(Month(Date()),2) & Year(Date())
		Case "-d3" 'MMDDYYYY
			bCheck = True
			strDate = FormatNumbers(Month(Date()),2) & FormatNumbers(Day(Date()),2) & Year(Date())
		Case "-t" 'HHMMSS
			bCheck = True
			GetFormattedTime()
		Case "-dt" 'YYYYMMDD HHMMSS
			bCheck = True
			strDate = Year(Date()) & FormatNumbers(Month(Date()),2) & FormatNumbers(Day(Date()),2)
			GetFormattedTime()
		Case "-d1t" 'YYYYMMDD HHMMSS
			bCheck = True
			strDate = Year(Date()) & FormatNumbers(Month(Date()),2) & FormatNumbers(Day(Date()),2)
			GetFormattedTime()
		Case "-d2t" 'DDMMYYYY HHMMSS
			bCheck = True
			strDate = FormatNumbers(Day(Date()),2) & FormatNumbers(Month(Date()),2) & Year(Date())
			GetFormattedTime()
		Case "-d3t" 'MMDDYYYY HHMMSS
			bCheck = True
			strDate = FormatNumbers(Month(Date()),2) & FormatNumbers(Day(Date()),2) & Year(Date())
			GetFormattedTime()
		Case Else
			bCheck = False
	End Select
	
	CheckDTParameter = bCheck
	
End Function

Sub GetFormattedTime()
	
	'Clear unwanted characters from the date and time
	Set objRegEx = CreateObject("VBScript.RegExp")
	objRegEx.Global = True
	objRegEx.Pattern = "[^0-9]"
	
	'Find out current time
	strTime = FormatDateTime(Time(), vbLongTime)
		
	'Clear unwanted characters from the date and time
	strTime = objRegEx.Replace(strTime, "")
	
End Sub
The script requires 4 parameters to work properly.

Parameter 1
Can be "-d", "-d1", "-d2", "-d3", "-t", "-dt", "-d1t", "-d2t", "-d3t"
-d = Add current date (YYYYMMDD) to the ArchiveName
-d1 = Add current date (YYYYMMDD) to the ArchiveName
-d2 = Add current date (DDMMYYYY) to the ArchiveName
-d3 = Add current date (MMDDYYYY) to the ArchiveName
-t = Add current time to the ArchiveName
-dt = Add current date and time to the ArchiveName

Parameter 2
The commands PACOMP uses. Note: The script doesn't check if the commands are valid for PACOMP, it only check that this parameter exists. Also note: If you have more than one command in this parameter {-a -p}, you have to put quotes around these {"-a -p"}, otherwise you'll get an error as the script will take each command for a separate parameter.

Parameter 3
Filename of the Archive with extension

Parameter 4
Files to add to the Archive

Example
Code:
cscript PACOMP_DT.vbs -dt -a C:\Temp\MyArchive.zip D:\*.doc
cscript PACOMP_DT.vbs -dt "-a -P" C:\Temp\MyArchiveTest.zip D:\Temp\*.*
cscript PACOMP_DT.vbs -d2t -a C:\Temp\MyArchive.zip D:\*.doc
I hope everything is working correctly now.

Kind Regards
Micke