Code: Select all
; Version 12 maj 2020
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SetBatchLines -1 ; Kör programmet så fort som möjligt
#SingleInstance Force ; Endast "ett" program kan köras samtiodigt
; Förbättringar
; Hantera logfil information
; Sänd return med kör information
Support = Kalle Ohlsson
FromFile := "c:\temp\*.csv"
; FromFile := "c:\temp\OutletFTP"
; FromFile := "c:\Squid2\"
ToFile := "c:\Test Temp\TestOutlet.7z"
InfoFile := "c:\Test Temp\7-ZipResultOut.txt"
ErrLogFile := "c:\Test Temp\7zipErrorOut.log"
FuncZip(FromFile, ToFile, InfoFile, ErrLogFile, "3", "hide")
; FuncZip(FromFile, ToFile, InfoFile, ErrLogFile, "1")
; FuncZip(FromFile, ToFile, InfoFile, ErrLogFile)
; FuncUnZip(SourceFile, ToFile, InfoFile)
MsgBox ,, Rad %A_LineNumber% -> %A_ScriptName%, Klart!
ExitApp
FuncZip(SourceFile, ToZip, InfoFile, ErrFile, CompLevel := 5, vShow := "")
{ ; Version 11 maj 2020
; Utvecklat tillsammans med
; Commandline Zip - progressbar - logfile - 7z or 7zG Topic is solved
; https://www.autohotkey.com/boards/viewtopic.php?f=76&t=75647&p=327782#p327782
; - SourceFile - De filer / katalog(er) som ska komprimeras
; - ToZip - Filnamnet på den komprimerade filen
; - InfoFile - Information om komprimeringen
; - ErrFile - Eventuella felmeddelanden (oftast låsta filer)
; - CompLevel - Ang kompressionsgrad av filer 0=ingen 1,3,5,7,9=max
;
; Initiera sökvägar för
; - Variabler
; - Program
; - Filer
;
; Kontrollera att exe-filer finns på rätt ställe
; - 7z.exe
; - Mtee.exe
;
; Radera tidigare resultatfiler
; - ToZip
; - InfoFile
; - ErrFile
;
; Skapa zipfil
; Hantera felkoder
;
; Radera ErrFile om den är tom (skapas alltid - även om innehåll saknas)
;
; Läs in Resultatfil
; Radera Resultatfil
; Skriv tillbaka resultatfilen (med kompletterade uppgifter)
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Förbättringar?
; Returnera Körinformation från funktionen (som tid, datum, program, arkiv mm.) - användare?
; Skapa en renare resultatfil genom att köra "test" efter att filen har packats?
;
Global Support
; Initiera
PassWd := "AHK_HighSecure_Web"
WorkPath := "c:\Temp"
StartTime := A_TickCount
StartErr := False ; Felhantering
; Kontrollera att lösenordet inte innehåller "blanksteg"
If InStr(PassWd, A_Space)
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Felaktigt lösenord! `n
Lösenord får inte innehålla 'blanksteg'!
(Önskat lösenord .: " PassWd " )`n
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
; Zip - program
exePath := "C:\Program Files\7-Zip"
exeProg := "7z.exe"
; exeProg := "7za.exe"
; exeProg := "7zG.exe"
exeFile := exePath "\" exeProg
; Split program (Unix tee)
TeePath := "C:\Program Files\7-Zip"
TeeProg := "Mtee.exe" ; Avancerat program med många möjligheter
; TeeProg := "PipeSplit" ; Enklare Split-program
TeeFile := TeePath "\" TeeProg
; Kontrollera giltig kompressionsnivå
if CompLevel not in 0,1,3,5,7,9
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Fel kompressionsnivå! `n
Vald kompressionsnivå .: " CompLevel "
(Giltiga kompressionsnivåer .: 1,3,5,7,9)`n
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
; 1a) Kontrollera att 7z.exe finns installerad
; exePath := "C:\Program Files (x86)" ; Äldre version
If !FileExist(exeFile)
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Zip-program saknas! `n
Program .: " exeProg "
Sökväg .: " exePath "`n
Kontakta .: " Support "
(Finns programmet 7-zip installerat?)`n
Detta program avslutas!"
)
ExitApp
}
; 1b) Kolla att Mtee.exe finns ( PipeSplit.exe (tee) existerar )
If !FileExist(TeeFile)
{ SplitPath TeeFile, OutFileName, OutDir,, OutNameNoExt
If !OutNameNoExt
OutNameNoExt := "Förväntad fil .: Mtee.exe"
else
OutNameNoExt := "Finns programmet .: " OutNameNoExt "?"
If !OutFileName
OutFileName := "Saknas!"
If !OutDir
OutDir := "Saknas!"
MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Split-program (tee) saknas! `n
Program .: " OutFileName "
Sökväg .: " OutDir "
( " OutNameNoExt " )`n
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; 2a) - Saknas resultatkatalog - skapa!
SplitPath InfoFile, InfoFileName, InfoDir
If !FileExist(InfoDir "\*.*")
{ MsgBox 20, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Nedanstående katalog saknas! (Dit filer önskas packas upp)`n
Katalognamn .: `n`t" InfoDir "`n
Skall katalogen ovan skapas?"
)
IfMsgBox Yes
{ FileCreateDir %InfoDir%
If ErrorLevel
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Okänt fel! `n
Misslyckades att skapa katalog!`n
Katalognamn .: " InfoDir "`n
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
; Kolla att katalogen verkligen skapades
If !FileExist(InfoDir)
{ MsgBox 20, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Katalog saknas fortfarande!
(Dit filer önskas packas upp)`n
Katalognamn .: " InfoDir "`n
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
}
else
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
Ingen katalog skapades! `n
Detta program avslutas! `n
), 3
ExitApp
}
}
; Om resultatfil existerar - Radera!
If FileExist(InfoFile) ; Radera informationsfil
{ FileDelete %InfoFile%
If ErrorLevel
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Informationsfil kunde inte raderas! `n
Namn .: " InfoFileName "
Sökväg .: " InfoDir "`n
(förmodligen låst av annat program)
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
}
; - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; 2b) - Saknas Errorlogkatalog - skapa!
SplitPath ErrFile, ErrFileName, ErrDir
If !FileExist(ErrDir "\*.*")
{ MsgBox 20, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Katalog Saknas!
(Dit filer önskas packas upp)`n
Katalognamn .: " ErrDir "`n
Skall katalogen ovan skapas?"
)
IfMsgBox Yes
{ FileCreateDir %ErrDir%
If ErrorLevel
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Okänt fel! `n
Misslyckades att skapa katalog!`n
Katalognamn .: " ErrDir "`n
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
; Kolla att katalogen verkligen skapades
If !FileExist(ErrDir)
{ MsgBox 20, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Katalog saknas fortfarande!
(Dit filer önskas packas upp)`n
Katalognamn .: " ErrDir "`n
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
}
else
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
Ingen katalog skapades! `n
Detta program avslutas! `n
), 3
ExitApp
}
}
; Om ErrorLog existerar - Radera!
If FileExist(ErrFile)
{ FileDelete %ErrFile%
If ErrorLevel
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Fil, ev. med felmmeddelanden kunde inte raderas! `n
Namn .: " ErrFileName "
Sökväg .: " ErrDir "`n
(förmodligen låst av annat program)
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
}
; - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; 2c) - Saknas zipkatalog - skapa!
SplitPath ToZip, ZipFileName, ZipDir
If !FileExist(ZipDir "\*.*")
{ MsgBox 20, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Katalog Saknas!
(Dit filer önskas packas upp)`n
Katalognamn .: " ZipDir "`n
Skall katalogen ovan skapas?"
)
IfMsgBox Yes
{ FileCreateDir %ZipDir%
If ErrorLevel
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Okänt fel! `n
Misslyckades att skapa katalog!`n
Katalognamn .: " ZipDir "`n
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
; Kolla att katalogen verkligen skapades
If !FileExist(ZipDir)
{ MsgBox 20, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Katalog saknas fortfarande!
(Dit filer önskas packas upp)`n
Katalognamn .: " ZipDir "`n
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
}
else
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
Ingen katalog skapades! `n
Detta program avslutas! `n
), 3
ExitApp
}
}
; Om zipfil (som försöker skapas) existerar - Radera
If FileExist(ToZip)
{ FileDelete %ToZip%
If ErrorLevel
{ SplitPath ToZip, ZipFileName, ZipDir
MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Resultat-zip kunde inte raderas! `n
Namn .: " ZipFileName "
Sökväg .: " ZipDir "`n
(förmodligen låst av annat program)
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
}
; - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^ - ^
; Manual - online - https://sevenzip.osdn.jp/chm/cmdline/index.htm
; -w - Arbetskatalog under körning
; -t7z - Anger vilket pack-format filen ska packas i (här 7z)
; -stl - Sätter tid och datum på zip-fil till tid och datum på den senast modifierade filen i arkivet
; -spf - Skriver hela sökvägen i logfilerna
; -mx=1 - Komprimeringsmetod 0=ingen 1=lägst (1,3,5,7,9)
; -p - Sätta Password på filen
; -mhe=on - Krypterar även filnamnen i den packade filen (fungerar inte med zip-filer)
; -scsUTF-8 - Mjlighgör en logfil i UTF-8 format - för att visa åäö i logfilen (även efter ex. PipeSplit)
; -sccUTF-8 - Skapar en logfil i UTF-8 format (för att visa åäö i logfilen)
; -bb3 - Anger vilken information som ska ingå
; -bsp1 - Progress informationen skickas till "kanal 1"
; -bso1 - Output skickas till "kanal 1"
; -bse2 - Felmeddelanden (error) skickas till "kanal 2"
RunArgs := " a -w" WorkPath " -t7z -stl -spf -mx=" CompLevel " -p" PassWd " -mhe=on -scsUTF-8 -sccUTF-8 -bb3 -bsp1 -bso1 -bse2 "
RunWait %comspec% /c ""%exeFile%" %RunArgs% "%ToZip%" "%SourceFile%" 2> "%ErrFile%" | "%TeeFile%" "%InfoFile%"",, UseErrorLevel %vShow%, ZipPID
If ( ErrorLevel = 1 )
{ StatErr := True
MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Varning! (Exit kod .: " ErrorLevel ")
Inte allvarligt fel`n
Till exempel,
En eller flera filer låstes av något annat program.
De kommer inte att komprimeras."
)
}
If ( ErrorLevel = 2 )
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Alvarligt fel! (Exit kod .: " ErrorLevel ")`n
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
If ( ErrorLevel = 7 )
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Command line - problem!
`t(Exit kod .: " ErrorLevel ")`n
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
If ( ErrorLevel = 8 )
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Minne saknas för drift!
`t(Exit kod .: " ErrorLevel ")`n
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
If ( ErrorLevel = 255 )
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Processen avbröts av användaren!
`t(Exit kod .: " ErrorLevel ")`n
(Kan inträffa ifall programmet Mtee har fel struktur - sökväg saknas?)
(Kan inträffa ifall lösenordet har ogiltiga tecken)
(Kan inträffa ifall resultatkatalog saknas)
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
If ErrorLevel and !StatErr
{ MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Okänt fel! (Exit kod .: " ErrorLevel ")`n
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
; Kontrollera om fil med "Error" (felmeddelanden) har skapats - Är den tom skall den raderas.
If FileExist(ErrFile) ; (finns förmodligen alltid)
{ FileGetSize ErrFileSize, %ErrFile%
; ErrFile saknar innehåll - Radera!
if (ErrFileSize < 5)
{ FileDelete %ErrFile%
If ErrorLevel
{ SplitPath ErrFile, OutFileName, OutDir
MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Errorfil (nyss skapad - är tom) kunde inte raderas! `n
Namn .: " OutFileName "
Sökväg .: " OutDir "`n
(Orsak - okänd!)
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
}
}
FileRead Result, *p65001 %InfoFile%
FileDelete %InfoFile%
If FileExist(InfoFile)
{ FileDelete %InfoFile%
If ErrorLevel
{ SplitPath InfoFile, OutFileName, OutDir
MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Informationsfil kunde inte raderas! `n
Namn .: " OutFileName "
Sökväg .: " OutDir "`n
(förmodligen låst av annat program)
Kontakta .: " Support "`n
Detta program avslutas!"
)
ExitApp
}
}
; FileAppend % "RunArgs `n" RunArgs "`n`nRuntime .: " A_TickCount - StartTime "ms`n`n - - - - - - - - - -`n`n" Result, %InfoFile%, UTF-8
; Skriv in intressant data till Resultatfilen
FormatTime RunDate, A_Now, d MMMM yyyy (HH:mm:ss)
RunTime := Round(( A_TickCount - StartTime ) / 1000, 2)
If ( RunTime < 1 )
RunTime := "Conversion time .: " RunTime " seconds"
else
RunTime := "Conversion time .: " FormatSeconds( Round(RunTime,0) ) " [h:mm:ss]"
FileAppend,
( LTrim Commands
% "`nCreate Zip date .: " RunDate "
" RunTime "
Zip-program .: " exeFile "
Tee-program .: " TeeFile "
; Created from file .: " A_ScriptFullPath "
Created from file .: " A_ScriptName "
Compress level .: " CompLevel "
RunArgs for 7z .: `n`t" RunArgs "`n`n
" Result
), %InfoFile%, UTF-8
If ErrorLevel
{ SplitPath InfoFile, OutFileName, OutDir
MsgBox 16, Rad %A_LineNumber% -> %A_ScriptName%,
( LTrim
% "Could not append information to a file!`n
File .: " OutFileName "
Path .: " OutDir "`n
ErrorLevel .: " ErrorLevel "`n
Contact .: " Support "`n
This program ends!"
)
ExitApp
}
}
FormatSeconds(NumberOfSeconds) ; Convert the specified number of seconds to hh:mm:ss format.
{ ; From AHK-manual
; MsgBox % FormatSeconds(7384) ; 7384 = 2 hours + 3 minutes + 4 seconds. It yields: 2:03:04
time = 19990101 ; *Midnight* of an arbitrary date.
time += %NumberOfSeconds%, seconds
FormatTime, mmss, %time%, mm:ss
Return NumberOfSeconds//3600 ":" mmss
}