Temat: Archiwizacja plików i dołączanie do wiadomości archiwum
Autor: Konrad Szkudlarczyk
Wymagania:
Szablon zmienia nieco założenia oryginału. Poprzednio sprawdzał
istnienie pliku archiv.txt (z listą plików do spakowania), który
praktycznie po pierwszym uruchomieniu się pojawiał. Na dłuższą metę
niezbyt wygodne. Ten szablon kasuje plik archiv.txt, ale pozwala za to
w wygodny sposób dołączać do archiwum pliki z różnych katalogów (czemu
miało służyć pierwotne rozwiązanie). Szablon sprawdza za to istnienie
archiwum o docelowej nazwie i pozwala wybrać sposób postępowania.Szablon korzysta z makra %XMP_RunCmd. Zauważyłem, że jest nieco
wolniejsze od makra %Shell_Run, ale działa wystarczająco dobrze. Jedna
uwaga - standardowy okres czekania szablonu na wykonanie polecenia
zewnętrznego wynosi pięć sekund. Wpisałem tam wartość 60000, czyli
minutę (jeśli polecenie wykonane zostanie wcześniej, to szablon rusza
dalej, więc nie ma to większego znaczenia). Jeśli operacji poddamy
ogromną liczbę plików, albo działamy na bardzo powolnym komputerze, to
7zip może się nie wyrobić... Mam nadzieję, że takie przypadki się nie
zdarzą.Drugą uwagą dotyczącą %XMP_RunCmd jest fakt, że musi ono korzystać z
"dosowej" ścieżki do uruchamianego programu. Na szczęście wtyczka ma
właściwe makra (%XMP_FileShort w tym przypadku).Zauważyłem, że 7zip nie pakuje plików z polskimi ogonkami w nazwie,
jeśli plik archiv.txt (czyli lista plików do spakowania przez 7zip)
zawiera polskie litery w formacie windows. Trzeba je zmienić na dosowe
krzaczki. Robi to polecenie%XMP_StrRepl(`%XMP_StrTr("%_FileList",%-
"ĄąĆćĘꣳŃńÓ󌜏źŻż","¤ĄŹ†¨Šťˆăäࢗ˜ŤŤ˝ľ")Nie wiem, czy działa w pełni poprawnie, zwłaszcza w nowych windowsach
(i czy jest to w ogóle potrzebne w nowych windowsach), nie zmienia
innych ogonków (niemieckich, nordyckich, rosyjskich...). Jest to więc
potencjalne źródło błędów, zatem uważajcie na pliki o dziwnych
nazwach.Sposób instalacji:
1. Stworzyć szablon podręczny (najlepiej dostępny dla wszystkich kont)
o dowolnej nazwie i przekopiować tam zawartość załącznika;
2. Zmienić drugą linię w szablonie, wpisując do niego swoją ścieżkę
dostępu do programu 7zip%_ArchProg='%XMP_FileShort("c:\program files\7-zip\7z.exe")'%-
3. Szablon wymaga wtyczki Extended Macro Plugin (XMP)
<http://www.gaijin.at/tbpxmp.php>.
4. W obecnej wersji przystosowany jest do działania z programem 7zip
<http://www.7-zip.org/>, jednak po dodaniu pewnych poprawek może
współpracować z każdym archiwizerem, który udostępnia opcję
pakowania według listy plików.
5. Jeśli nie chcesz korzystać z możliwości tworzenia różnych formatów
archiwów, to najwygodniej będzie zmienić makro%_ArchFormat='%XMP_DlgInput("Typ archiwum:\nMasz do wyboru: %-
7z,zip, gzip, tar, bzip2","7z")'%-na takie:
%_ArchFormat='zip'%-
(oczywiście zamiast 'zip' możesz wpisać wybrany format). Wydaje mi
się, że korzystanie ze standardowego zipa jest najlepszym wyjściem.
%_rezultat=~%-
%_ArchProg='%XMP_FileShort("c:\program files\7-zip\7z.exe")'%-
%_FileListPath='%XMP_Envir("TEMP")\archiv.txt'%-
%_ArchFormat='%XMP_DlgInput("Typ archiwum:\nMasz do wyboru: %-
7z, zip, gzip, tar, bzip2","7z")'%-
%_ArchFilePath='%XMP_Envir("TEMP")\%-
%XMP_DlgInput("Nazwa pliku:","zalacznik").%_ArchFormat'%-
%XMP_Until(#ok#,#1#,#%-
%%_wybor()%-
%%IF:'%%XMP_FileExist("%%_ArchFilePath")'='1':'%%_wybor=`%-
%%XMP_MsgBox("Archiwum o tej nazwie już istnieje!\n%-
Jeśli naciśniesz ""Przerwij"" będziesz mógł zmienić nazwę %-
tworzonego archiwum.\n%-
Jeśli naciśniesz ""Ponów próbę"", jego zawartość zostanie %-
skasowana i zastąpiona wybraną zawartością.\n%-
Jeśli naciśniesz ""Zignoruj"", wybrane pliki zostaną dopisane %-
do pliku archiwum.","Co robić?","ari,b2,tm")`':'%%_ok="1"'%-
%%IF:'%%_wybor'='R':'%%XMP_FileDel("%%_ArchFilePath")%%_ok="1"'%-
%%IF:'%%_wybor'='I':'%%_ok="1"'%-
%%IF:'%%_wybor'='A':'%%_ArchFilePath=`%%XMP_Envir("TEMP")\%-
%%XMP_DlgInput("Nazwa pliku:","zalacznik_").%%_ArchFormat`'%-
#)%-
%-
%XMP_Until(#odp#,#N#,#%-
%%_FileList='%%_FileList|%%XMP_DlgOpen("1", "Wskaż pliki do %-
archiwizacji...")'%-
%%_odp='%%XMP_MsgBox("Czy chcesz dodać jeszcze jakieś %-
pliki?","Pytanie","yn")'%-
#)%-
%_FileList='%XMP_StrRepl(`%XMP_StrTr("%_FileList",%-
"ĄąĆćĘꣳŃńÓ󌜏źŻż","¤ĄŹ†¨©ťˆăäࢗ˜Ť«˝ľ")`,`|`,`
`)'%-
%XMP_FileDel("%_FileListPath")%-
%XMP_FileAddLn("%_FileListPath","%_FileList")%-
%XMP_RunCmd("%_ArchProg a -t%_ArchFormat %-
%_ArchFilePath @%_FileListPath",0,60000)%-
%ATTACHFILE(%_ArchFilePath)%-
%XMP_FileDel("%_FileListPath")%-
~%-