#170882 - 2006-12-01 10:51 AM
Directory creation based on date issue
|
Pax
Getting the hang of it
Registered: 2006-12-01
Posts: 51
|
Hey All,
Hoping you can help with my little issue.
I am writing a KiX script to run each day. This script rars up data on one network location and transmits it across the WAN to a new location and puts it in a directory based upon the date, then extracts the data.
While doing this, it logs all the information to a log file on the destination drive in a LOGS directory (funnily enough).
My problem is that while
MD "$ARCHIVEDRIVE\@YEAR@MONTHNO@MDAYNO" works fine, where $ARCHIVEDRIVE is a declared drive letter at the top of the script and would produce J:\2006121 for today, I can get no variation of
$ARCHIVE = @YEAR + "-" + @MONTHNO + "-" + @MDAYNO
$ARCHIVE = @YEAR + @MONTHNO + @MDAYNO
$ARCHIVE = @YEAR@MONTHNO@MDAYNO
Work for producing the same result.
The first code option defines $ARCHIVE as being 2019 (riddle me why that happens), as does the second, while the third gives me 121 on one line and 2006 on the next.
I am using KiXtart 2010 4.50.
Can anyone either help me redefine $ARCHIVE obtaining the correct results as per the MD results, or figure out why my definition of $ARCHIVE isn't defining correctly given I want the output (for today, for example to be 2006121)???? I could even handle if it gave the result of 2006-12-1.
Pax
edit: I should note that I am using the $ARCHIVE variable as a base for creating the rar file, log file and copying the data, and don't really want to use @YEAR@MONTHNO@MDAYNO throughout the entire script if I can help it. Would this really work though considering I cannot get KiX to define it correctly at the top.
Edited by Pax (2006-12-01 10:53 AM)
|
Top
|
|
|
|
#170888 - 2006-12-01 02:34 PM
Re: Directory creation based on date issue
[Re: Pax]
|
Allen
KiX Supporter
Registered: 2003-04-19
Posts: 4549
Loc: USA
|
See if this helps explain your problem.
? @YEAR + @MONTHNO + @MDAYNO
? vartypename(@YEAR + @MONTHNO + @MDAYNO)
?
? "" + @YEAR + @MONTHNO + @MDAYNO
? vartypename("" + @YEAR + @MONTHNO + @MDAYNO)
|
Top
|
|
|
|
#170889 - 2006-12-01 02:40 PM
Re: Directory creation based on date issue
[Re: Allen]
|
Allen
KiX Supporter
Registered: 2003-04-19
Posts: 4549
Loc: USA
|
... and you might even consider adding the following modifications so that the directory names are consistent:
? "" + @YEAR + right("0" + @MONTHNO,2) + right("0" + @MDAYNO,2)
|
Top
|
|
|
|
#170966 - 2006-12-04 09:44 AM
Re: Directory creation based on date issue
[Re: Allen]
|
Pax
Getting the hang of it
Registered: 2006-12-01
Posts: 51
|
Hey Allen,
I'll have a look at that today. Thanks for the reply,
Pax
edit: seems the first value is defined as a long, while the second is a string, I can see due to the "null" space at the front. It is weird that KiX defines it differently depending on whether MD is used or we are defining a term internally to the script.
Edited by Pax (2006-12-04 09:50 AM)
|
Top
|
|
|
|
#170971 - 2006-12-04 11:28 AM
Re: Directory creation based on date issue
[Re: Pax]
|
Pax
Getting the hang of it
Registered: 2006-12-01
Posts: 51
|
OK, I've decided to leave the dates in the non-corrected format, otherwise I'd have to mess around with the MD command, and due to time pressures for this, I will leave it till a possible new revision of the script.
The next issue I've encountered is
ERROR : expected ')'! Script: F:\.kix Line : 103
the lines surrounding 103 are;
If $REPORTFILE <> $ARCHIVEFILE
SHELL ("cmd.exe /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s File_Copy_Error -server " + $EMAILSERVER)
ENDIF
;
;---- Extracting files onto Archive
;
$VARSET = WRITELINE (1, "Extracting " + $ARCHIVEDRIVE + "\" + $ARCHIVE + "\" + $ARCHIVE + ".rar" + @CRLF)
Shell ("cmd.exe /c " + $SCRIPTROOT + "\unrar.exe e -r " + $ARCHIVEDRIVE + "\" + $ARCHIVE + "\" + $ARCHIVE ".rar " + $ARCHIVEDRIVE + "\" + $ARCHIVE + "\" )
IF @ERROR = 0
"....Done"
Line 103 is the Shell (unrar)line, not the 'Blat' shell command. I've got a similar line above which does the rar-ing of the data and can run the unrar command by itself fine, so I'm confused as to where there is a missing ')', or a rogue inserted '(',
Pax
Edited by Pax (2006-12-04 11:34 AM)
|
Top
|
|
|
|
#170974 - 2006-12-04 12:11 PM
Re: Directory creation based on date issue
[Re: NTDOC]
|
Pax
Getting the hang of it
Registered: 2006-12-01
Posts: 51
|
Script posted below as requested ....
As I alluded to, it gets all the way through up to the unraring part of the script. The servers sit in two untrusted domains.
If anything more is needed let me know. I will probably put the @error and @serror in if there was a failure before sending the email, but at the moment I want to get successfuls working,
Pax
;:KVIS:Edited on 04/12/2006 09:38:57 by Pax.|E:KVIE:
; This is a test script for moving the archive data
;
;--------------------------------------------------------------------------------------------------------------------
;
;---- Script version 0.2
;---- Created by Pax
;---- Last edit date 04/12/2006 by Pax
;
;---- Declare Variables -------
;
$SCRIPTROOT = "\\server1\path\"
$REPORTSTORE = "\\server2\path"
$ARCHIVESTORE = "\\server3\path"
$REPORTUSER = domain1\user
$ARCHIVEUSER = domain2\user
$REPORTDRIVE = I:
$ARCHIVEDRIVE = J:
$ARCHIVE = "" + @YEAR + @MONTHNO + @MDAYNO
? $ARCHIVE
$ARCHIVELOG = $ARCHIVEDRIVE + "\LOGS\" + $ARCHIVE + ".LOG"
? $ARCHIVELOG
$EmailServer = "our.emailserver.net"
$Sender = "sender@@emailserver.net"
$SupportEmail = "support@@emailserver.net"
$EmailAddress = "recipient@@emailserver.net"
;
;---- If the password for the REPORTUSER account changes on server2, change the password on the ARCHIVEUSER account,
;---- and update the password in this script. Without this the script will fail
;
$USERPASS = password
;
;---- Mapping Archive drive first to create log file
;
? "Mapping the Archive Drive"
USE $ARCHIVEDRIVE $ARCHIVESTORE /USER:$ARCHIVEUSER /PASSWORD:$USERPASS
IF @ERROR = 0
"....Done"
ELSE
"..Failed"
SHELL ("cmd.exe /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s Archive_Mapping_failure -server " + $EMAILSERVER)
GOTO END
ENDIF
;
$VARSET = OPEN(1, $ARCHIVESTORE + "\LOGS\" + $ARCHIVE + ".LOG", 5)
? @DATE
$VARSET = WRITELINE (1, "The current date is " + @DATE + @CRLF)
;
;---- Do drive mapping for Report drive to move the data
;
$VARSET = WRITELINE (1, "Mapping the Report Drive")
USE $REPORTDRIVE $REPORTSTORE /USER:$REPORTUSER /PASSWORD:$USERPASS
IF @ERROR = 0
"....Done"
$VARSET = WRITELINE(1, "....Done" + @CRLF)
ELSE
"..Failed"
$VARSET = WRITELINE(1, "..Failed" + @CRLF)
SHELL ("cmd.exe /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s Report_Mapping_failure -server " + $EMAILSERVER)
GOTO END
ENDIF
? "Creating current date folder"
$VARSET = WRITELINE (1, "Creating current date folder")
MD "$ARCHIVEDRIVE@YEAR@MONTHNO@MDAYNO"
;MD "$ARCHIVEDRIVE@YEAR + right("0" + @MONTHNO,2) + right("0" + @MDAYNO,2)"
IF @ERROR = 0
"....Done"
$VARSET = WRITELINE(1, "....Done" + @CRLF)
ELSE
"..Failed"
$VARSET = WRITELINE(1, "..Failed" + @CRLF)
SHELL ("cmd.exe /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s Archive_directory_creation_failure -server " + $EMAILSERVER)
GOTO END
ENDIF
$VARSET = WRITELINE (1, "Compressing current KPI data on Report Drive")
Shell ("cmd.exe /c " + $SCRIPTROOT + "\rar.exe a -r -t -y " + $REPORTDRIVE + "\" + $ARCHIVE + ".Rar " + $REPORTDRIVE + "\*")
$VARSET = WRITELINE (1, "Copying report to current date folder")
COPY $REPORTDRIVE + "\" + $ARCHIVE + ".Rar" $ARCHIVEDRIVE + "\" + $ARCHIVE
IF @ERROR = 0
"....Done"
$VARSET = WRITELINE(1, "....Done" + @CRLF)
ELSE
"..Failed"
$VARSET = WRITELINE(1, "..Failed" + @CRLF)
$VARSET = WRITELINE(1, GetDiskSpace ($ARCHIVEDRIVE) + @CRLF)
SHELL ("cmd.exe /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s Archive_Mapping_failure -server " + $EMAILSERVER)
GOTO END
ENDIF
;
;---- Compare copied filesizes
;
$REPORTFILE = GetFileSize ($REPORTDRIVE + $ARCHIVE + ".rar") /1024
$VARSET = WRITELINE (1, "Report RAR file size is " + $REPORTFILE + @CRLF)
$ARCHIVEFILE = GetFileSize ($ARCHIVEDRIVE + "\" + $ARCHIVE + "\" + $ARCHIVE + ".rar") /1024
$VARSET = WRITELINE (1, "Archive rar file size is " + $ARCHIVEFILE + @CRLF)
If $REPORTFILE <> $ARCHIVEFILE
SHELL ("cmd.exe /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s File_Copy_Error -server " + $EMAILSERVER)
ENDIF
;
;---- Extracting files onto Archive
;
$VARSET = WRITELINE (1, "Extracting " + $ARCHIVEDRIVE + "\" + $ARCHIVE + "\" + $ARCHIVE + ".rar" + @CRLF)
Shell ("cmd.exe /c " + $SCRIPTROOT + "\unrar.exe e -r " + $ARCHIVEDRIVE + "\" + $ARCHIVE + "\" + $ARCHIVE ".rar " + $ARCHIVEDRIVE + "\" + $ARCHIVE + "\" )
IF @ERROR = 0
"....Done"
$VARSET = WRITELINE(1, "....Done" + @CRLF)
ELSE
"..Failed"
$VARSET = WRITELINE(1, "..Failed" + @CRLF)
$VARSET = WRITELINE(1, GetDiskSpace ($ARCHIVEDRIVE) + @CRLF)
SHELL ("cmd.exe /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s Issue_Extracting_Files_From_Archive -server " + $EMAILSERVER)
GOTO END
ENDIF
;
;---- Removing archive rar file and files from Report Drive
;
RD $REPORTDRIVE /Q
$VARSET = WRITELINE (1, "Removing archive RAR file and files from Report Drive" + @CRLF)
IF @ERROR = 0
"....Done"
$VARSET = WRITELINE(1, "....Done" + @CRLF)
ELSE
"..Failed"
$VARSET = WRITELINE(1, "..Failed" + @CRLF)
SHELL ("cmd.exe /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s Issue_removing_files_from_HR01 -server " + $EMAILSERVER)
GOTO END
ENDIF
;
;---- Email success report to maintaining group
;
SHELL ("cmd.exe /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $EmailAddress + " -f " + $Sender + " -s " + @DATE + "_KPI_Archive_Success -server " + $EMAILSERVER)
:END
;USE $REPORTDRIVE /DEL
;USE $ARCHIVEDRIVE /DEL
Edited by Pax (2006-12-04 03:01 PM)
|
Top
|
|
|
|
#170979 - 2006-12-04 03:02 PM
Re: Directory creation based on date issue
[Re: Mart]
|
Pax
Getting the hang of it
Registered: 2006-12-01
Posts: 51
|
|
Top
|
|
|
|
#171049 - 2006-12-05 01:00 PM
Re: Directory creation based on date issue
[Re: NTDOC]
|
Pax
Getting the hang of it
Registered: 2006-12-01
Posts: 51
|
Well unless it is bad editing on your part the script HAS to fail. $REPORTUSER = domain1user
$ARCHIVEUSER = domain2user
$REPORTDRIVE = I:
$ARCHIVEDRIVE = J:
Those vars need to be within quotes The drive mappings have been working perfectly fine without using the quote marks up to this point. It is one reason I commented out the drive deletions in the END section so I can see what is being done when it fails.
I would also HIGHLY recommend that you place this type of header at the top of your script. It will force you to make sure you code cleanly. If Not @LogonMode
Break On
Else
Break Off
EndIf
Dim $SO
$SO=SetOption('Explicit','On')
$SO=SetOption('NoVarsInStrings','On')
$SO=SetOption('NoMacrosInStrings','On')
$SO=SetOption('WrapAtEOL','On')
Again, bad editing???? Unless you REALLY have to, I would recode the script so that you don't keep issuing the WriteLine over and over. I would attempt to write the log one time when needed only with a single write. I am using it for now so I can trouble shoot at what stage the script would fail providing there were no parsing errors, which currently there are. I shall consider moving the writeline events at a later stage once I know the script runs through with no errors. At the moment, it is part of my own error checking. As for the $USERPASS, no, this was for removing identifiable. Any testing I am doing is running as a locally logged on user as the user who runs the script(in the scheduled task) won't have the ability to logon to the machine, only to run the scheduled task.
You use a USE statement without checking if the drive is already mapped or not. You should check and verify. You attempt to use NoVarsInStrings and then you go and do this: MD "$ARCHIVEDRIVE\@YEAR@MONTHNO@MDAYNO" I'll go back and review checking the drive mappings, thanks for the suggestion.
My original post in this thread was about why MD creates the directory how I wanted it created, yet pre-defining $ARCHIVE works differently, even through we are dealing with KiX internal commands and macros. The suggestions I've been given only gave a work around, and no reason why they seems to be dealt with differently, so I'm working only on what I know.
You're using GOTO END I would really recode and remove all GOTO statements.
You attempt to remove a file/dir without checking if it exists or if you're even in the correct path/location. Very easy to delete or RD an entire structure if LEN is not correct. i.e. You can start an RD from the root of a drive which will give you the opportunity to rebuild the system if something like that happens. Please take a crack at making the suggested changes and let us know how it goes please. What would you suggest to use instead of GOTO statements. If there is a failure in one section I don't want the entire script to continue running when I know it will fail.
I could move the failure condition commands to the a seperate section called FAIL to recode reused code, which would include the WRITELINE commands, but once again, this would require GOTO, unless there is a more elegant way to deal with this. I wouldn't say I am a great scripter, but this is all I know at the moment.
I have taken your comments on board about RD, but I've been told that the files, etc I have to move are a series of files, directories and subdirectories, and are dymanic, so this is the best way I can see of dealing with it, mapping to the root of the store, so using RD won't remove anything above this level, and I do have to remove all contents of the "dump" directory.
Should I use a variation of the DIR command for this instead? I don't know how this deals with directories and subdirectories as I've never used it, and only seen it referenced briefly in the forums,
Pax
|
Top
|
|
|
|
#171050 - 2006-12-05 01:01 PM
Re: Directory creation based on date issue
[Re: NTDOC]
|
Pax
Getting the hang of it
Registered: 2006-12-01
Posts: 51
|
Well unless it is bad editing on your part the script HAS to fail. $REPORTUSER = domain1user
$ARCHIVEUSER = domain2user
$REPORTDRIVE = I:
$ARCHIVEDRIVE = J:
Those vars need to be within quotes The drive mappings have been working perfectly fine without using the quote marks up to this point. It is one reason I commented out the drive deletions in the END section so I can see what is being done when it fails.
I would also HIGHLY recommend that you place this type of header at the top of your script. It will force you to make sure you code cleanly. If Not @LogonMode
Break On
Else
Break Off
EndIf
Dim $SO
$SO=SetOption('Explicit','On')
$SO=SetOption('NoVarsInStrings','On')
$SO=SetOption('NoMacrosInStrings','On')
$SO=SetOption('WrapAtEOL','On')
Again, bad editing???? Unless you REALLY have to, I would recode the script so that you don't keep issuing the WriteLine over and over. I would attempt to write the log one time when needed only with a single write. I am using it for now so I can trouble shoot at what stage the script would fail providing there were no parsing errors, which currently there are. I shall consider moving the writeline events at a later stage once I know the script runs through with no errors. At the moment, it is part of my own error checking. As for the $USERPASS, no, this was for removing identifiable. Any testing I am doing is running as a locally logged on user as the user who runs the script(in the scheduled task) won't have the ability to logon to the machine, only to run the scheduled task.
You use a USE statement without checking if the drive is already mapped or not. You should check and verify. You attempt to use NoVarsInStrings and then you go and do this: MD "$ARCHIVEDRIVE\@YEAR@MONTHNO@MDAYNO" I'll go back and review checking the drive mappings, thanks for the suggestion.
My original post in this thread was about why MD creates the directory how I wanted it created, yet pre-defining $ARCHIVE works differently, even through we are dealing with KiX internal commands and macros. The suggestions I've been given only gave a work around, and no reason why they seems to be dealt with differently, so I'm working only on what I know.
You're using GOTO END I would really recode and remove all GOTO statements.
You attempt to remove a file/dir without checking if it exists or if you're even in the correct path/location. Very easy to delete or RD an entire structure if LEN is not correct. i.e. You can start an RD from the root of a drive which will give you the opportunity to rebuild the system if something like that happens. Please take a crack at making the suggested changes and let us know how it goes please. What would you suggest to use instead of GOTO statements. If there is a failure in one section I don't want the entire script to continue running when I know it will fail.
I could move the failure condition commands to the a seperate section called FAIL to recode reused code, which would include the WRITELINE commands, but once again, this would require GOTO, unless there is a more elegant way to deal with this. I wouldn't say I am a great scripter, but this is all I know at the moment.
I have taken your comments on board about RD, but I've been told that the files, etc I have to move are a series of files, directories and subdirectories, and are dymanic, so this is the best way I can see of dealing with it, mapping to the root of the store, so using RD won't remove anything above this level, and I do have to remove all contents of the "dump" directory.
Should I use a variation of the DIR command for this instead? I don't know how this deals with directories and subdirectories as I've never used it, and only seen it referenced briefly in the forums,
Pax
|
Top
|
|
|
|
#171084 - 2006-12-06 03:57 AM
Re: Directory creation based on date issue
[Re: Pax]
|
NTDOC
Administrator
Registered: 2000-07-28
Posts: 11624
Loc: CA
|
I have confirmed that you can seemingly use STRINGS without quotes for some reason. I would list that as a BUG but will wait for input from some of the other long term coders to get their input.
From the user manual:
When using KiXtart, note the following rules:- Strings can contain any characters, except the \0 (NULL) and \x1a (end of file) characters.
- Script commands should be separated by white space — that is, any combination of spaces, tabs, or new line characters.
- Strings must be enclosed in quotation marks.
For example: 'String with a dash (-) in it.' ; String with a dash (-) in it.
.
|
Top
|
|
|
|
#171085 - 2006-12-06 04:58 AM
Re: Directory creation based on date issue
[Re: Pax]
|
NTDOC
Administrator
Registered: 2000-07-28
Posts: 11624
Loc: CA
|
Okay here is an UNTESTED semi rewrite of your code. Please review the code and update/modify/change as needed to function properly in your environment.
;:KVIS:Edited on 04/12/2006 09:38:57 by Pax.|E:KVIE:
; This is a test script for moving the archive data
;
;--------------------------------------------------------------------------------------------------------------------
;
;---- Script version 0.2
;---- Created by Pax
;---- Last edit date 04/12/2006 by Pax
;---- Last edit date 12/5/2006 by NTDOC
;
;---- Declare Variables -------
;
If Not @LogonMode
Break On
Else
Break Off
EndIf
Dim $SO
$SO=SetOption('Explicit','On')
$SO=SetOption('NoVarsInStrings','On')
$SO=SetOption('NoMacrosInStrings','On')
$SO=SetOption('WrapAtEOL','On')
Dim $SCRIPTROOT, $REPORTSTORE, $ARCHIVESTORE, $REPORTUSER, $ARCHIVEUSER,
Dim $REPORTDRIVE, $ARCHIVEDRIVE, $ARCHIVE, $ARCHIVELOG
Dim $EmailServer, $Sender, $SupportEmail, $EmailAddress
Dim $USERPASS
$SCRIPTROOT = '\\server1\path\'
$REPORTSTORE = 'server2path'
$ARCHIVESTORE = 'server3path'
$REPORTUSER = 'domain1user'
$ARCHIVEUSER = 'domain2user'
$REPORTDRIVE = 'I:'
$ARCHIVEDRIVE = 'J:'
$ARCHIVE = Trim(Join(Split(@DATE,'/'),'-'))+'_'+Trim(Join(Split(@TIME,':'),''))
$ARCHIVE ?
$ARCHIVELOG = $ARCHIVEDRIVE + 'LOGS' + $ARCHIVE + ".LOG"
$ARCHIVELOG ?
$EmailServer = 'our.emailserver.net'
$Sender = 'sender@@emailserver.net'
$SupportEmail = 'support@@emailserver.net'
$EmailAddress = 'recipient@@emailserver.net'
;
;---- If the password for the REPORTUSER account changes on server2, change the password on the ARCHIVEUSER account,
;---- and update the password in this script. Without this the script will fail
;
$USERPASS = 'password'
;
;---- Mapping Archive drive first to create log file
;
"Mapping the Archive Drive" ?
Dim $Err, $SErr
USE $ARCHIVEDRIVE + $ARCHIVESTORE /USER:$ARCHIVEUSER /PASSWORD:$USERPASS
$Err = @ERROR $SErr = @SERROR
IF @ERROR = 0
'....Done' ?
ELSE
'..Failed: ' + $SErr ?
SHELL ("%comspec% /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s Archive_Mapping_failure -server " + $EMAILSERVER)
Quit $Err
ENDIF
;
Dim $VARSET
$VARSET = OPEN(1, $ARCHIVESTORE + 'LOGS' + $ARCHIVE + '.LOG', 5)
@DATE ?
$VARSET = WRITELINE (1, 'The current date is ' + @DATE + @CRLF)
;
;---- Do drive mapping for Report drive to move the data
;
$VARSET = WRITELINE (1, 'Mapping the Report Drive')
Dim $Err, $SErr
USE $REPORTDRIVE + $REPORTSTORE /USER:$REPORTUSER /PASSWORD:$USERPASS
$Err = @ERROR $SErr = @SERROR
IF @ERROR = 0
"....Done" ?
$VARSET = WRITELINE(1, '....Done' + @CRLF)
ELSE
"..Failed: " + $SErr ?
$VARSET = WRITELINE(1, '..Failed' + @CRLF)
SHELL ("%comspec% /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s Report_Mapping_failure -server " + $EMAILSERVER)
Quit $Err
ENDIF
"Creating current date folder" ?
$VARSET = WRITELINE (1, 'Creating current date folder')
Dim $Err, $SErr
MD $ARCHIVEDRIVE + '' + $ARCHIVE
$Err = @ERROR $SErr = @SERROR
IF @ERROR = 0
'....Done' ?
$VARSET = WRITELINE(1, '....Done' + @CRLF)
ELSE
'..Failed: ' + $SErr ?
$VARSET = WRITELINE(1, '..Failed' + @CRLF)
SHELL ("%comspec% /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s Archive_directory_creation_failure -server " + $EMAILSERVER)
Quit $Err
ENDIF
$VARSET = WRITELINE (1, 'Compressing current KPI data on Report Drive')
Shell ("%comspec% /c " + $SCRIPTROOT + "\rar.exe a -r -t -y " + $REPORTDRIVE + "\" + $ARCHIVE + ".Rar " + $REPORTDRIVE + "\*")
$VARSET = WRITELINE (1, 'Copying report to current date folder')
Dim $Err, $SErr
COPY $REPORTDRIVE + '' + $ARCHIVE + '.Rar' $ARCHIVEDRIVE + '' + $ARCHIVE
$Err = @ERROR $SErr = @SERROR
IF @ERROR = 0
'....Done' ?
$VARSET = WRITELINE(1, '....Done' + @CRLF)
ELSE
'..Failed: ' + $SErr ?
$VARSET = WRITELINE(1, '..Failed' + @CRLF)
$VARSET = WRITELINE(1, GetDiskSpace ($ARCHIVEDRIVE) + @CRLF)
SHELL ("%comspec% /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s Archive_Mapping_failure -server " + $EMAILSERVER)
Quit $Err
ENDIF
;
;---- Compare copied filesizes
;
$REPORTFILE = GetFileSize ($REPORTDRIVE + '' + $ARCHIVE + '.rar') /1024
$VARSET = WRITELINE (1, 'Report RAR file size is ' + $REPORTFILE + @CRLF)
$ARCHIVEFILE = GetFileSize ($ARCHIVEDRIVE + '' + $ARCHIVE + '' + $ARCHIVE + '.rar') /1024
$VARSET = WRITELINE (1, 'Archive rar file size is ' + $ARCHIVEFILE + @CRLF)
If $REPORTFILE <> $ARCHIVEFILE
SHELL ("%comspec% /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s File_Copy_Error -server " + $EMAILSERVER)
ENDIF
;
;---- Extracting files onto Archive
;
$VARSET = WRITELINE (1, 'Extracting ' + $ARCHIVEDRIVE + "\" + $ARCHIVE + "\" + $ARCHIVE + ".rar" + @CRLF)
Dim $Err, $SErr
Shell ("%comspec% /c " + $SCRIPTROOT + "\unrar.exe e -r " + $ARCHIVEDRIVE + "\" + $ARCHIVE + "\" + $ARCHIVE ".rar " + $ARCHIVEDRIVE + "\" + $ARCHIVE + "\" )
$Err = @ERROR $SErr = @SERROR
IF @ERROR = 0
'....Done' ?
$VARSET = WRITELINE(1, '....Done' + @CRLF)
ELSE
'..Failed: ' + $SErr ?
$VARSET = WRITELINE(1, '..Failed' + @CRLF)
$VARSET = WRITELINE(1, GetDiskSpace ($ARCHIVEDRIVE) + @CRLF)
SHELL ("%comspec% /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s Issue_Extracting_Files_From_Archive -server " + $EMAILSERVER)
Quit $Err
ENDIF
;
;---- Removing archive rar file and files from Report Drive
;
If LEN($REPORTDRIVE)>2
Dim $Err, $SErr
RD $REPORTDRIVE /Q
$VARSET = WRITELINE (1, 'Removing archive RAR file and files from Report Drive' + @CRLF)
$Err = @ERROR $SErr = @SERROR
IF @ERROR = 0
'....Done' ?
$VARSET = WRITELINE(1, '....Done' + @CRLF)
ELSE
'..Failed: ' + $SErr ?
$VARSET = WRITELINE(1, '..Failed' + @CRLF)
SHELL ("%comspec% /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $SupportEmail + " -f " + $Sender + " -s Issue_removing_files_from_HR01 -server " + $EMAILSERVER)
Quit $Err
ENDIF
Else
'The REPORTDRIVE var was empty so did not write' ?
EndIf
;
;---- Email success report to maintaining group
;
SHELL ("%comspec% /c " + $SCRIPTROOT + "Blat " + $ARCHIVELOG + " -t " + $EmailAddress + " -f " + $Sender + " -s " + @DATE + "_KPI_Archive_Success -server " + $EMAILSERVER)
.
|
Top
|
|
|
|
#171095 - 2006-12-06 11:44 AM
Re: Directory creation based on date issue
[Re: Pax]
|
Pax
Getting the hang of it
Registered: 2006-12-01
Posts: 51
|
Just had another thought on your suggestion about the WRITELINEs I seem to be doing everywhere.
Would it be a better choice to open the logfile, and immediately below it use RedirectOutput($ARCHIVELOG)
and remove the WRITELINE commands? This would mean I could capture the output from Blat, RAR and UNRAR directly to the log file, as I think this would be served well in the file.
The benefits would be that if there are problems, then I can just comment out that line and see it on screen running it manually. Also the script would be smaller and easier to diagnose if problem turn up instead of having screen output and log file output seperately?
Ideas?
Pax
Edited by Pax (2006-12-06 11:44 AM)
|
Top
|
|
|
|
#171097 - 2006-12-06 12:46 PM
Re: Directory creation based on date issue
[Re: Mart]
|
Pax
Getting the hang of it
Registered: 2006-12-01
Posts: 51
|
RedirectOutput will send all screen output to the log file. So if you do not output the stuff from a function or command to the screen it will not show in the log file.
No that's fine, the script is going to run as a scheduled task, so won't be seen by anyone anyway.
If this means I won't need to double up on writing to the screen and log seperately and it will capture all SHELL run programs' output, then this is what I want.
I just wanted to check that this is the case, and then if I have to run it manually I can comment out the RedirectOutput line and see everything to screen to troubleshoot.
I know that if there is the something I specifically want to appear on screen I can do a RedirectOutput("") before it, and then return to dumping to the logfile using RedirectOutput($ARCHIVELOG) after the section I want on screen.
Pax
|
Top
|
|
|
|
Moderator: Jochen, Allen, Radimus, Glenn Barnas, ShaneEP, Ruud van Velsen, Arend_, Mart
|
0 registered
and 918 anonymous users online.
|
|
|