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