1

Temat: Archiwizacja plików i dołączanie do wiadomości archiwum

Autor: Konrad Szkudlarczyk
Wymagania:

Konrad Szkudlarczyk napisał/a:

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",%-
"ĄąĆćĘꣳŃńÓ󌜏źŻż","¤ĄŹ&#8224;¨&#169;ť&#710;ăäŕ˘&#8212;&#732;Ť&#171;˝ľ")`,`|`,`
`)'%-
%XMP_FileDel("%_FileListPath")%-
%XMP_FileAddLn("%_FileListPath","%_FileList")%-
%XMP_RunCmd("%_ArchProg a -t%_ArchFormat %-
%_ArchFilePath @%_FileListPath",0,60000)%-
%ATTACHFILE(%_ArchFilePath)%-
%XMP_FileDel("%_FileListPath")%-
~%-