Poprzedni | Spis treści | Następny

💕💕 SPECJALNA PROŚBA 💕💕

Od ponad 20 lat dzielę się z Wami swoją pasją oraz tworzę dla was moim zdaniem ciekawe i przede wszystkim przydatne rzeczy. Całkowicie za darmo! To się nigdy nie zmieni.



Niestety, sprzęt komputerowy (laptop) na którym obecnie pracuję zestarzał się - ma już 12 lat i jest to już niestety mocno odczuwalne. Moja obecna sytuacja finansowa nie pozwala mi na zakup nowego laptopa, dzięki któremu nadal będę mógł realizować swoją pasję, a tym samym dzielić się nią z Wami.

Mam nadzieję, że dzięki Waszej pomocy będę mógł zakupić sprzęt, który posłuży równie długo co obecny. Jak wiemy, sprzęt komputerowy jest dzisiaj horrendalnie drogi (zwłaszcza laptopy). Mam nadzieję, że wspólnie to się uda.

Dlatego też postanowiłem założyć specjalną zrzutkę na uznanej platformie crowd-fundingowej, dzięki której w transparentny sposób można dorzucić coś od siebie. Cel jest ambitny, ale wierzę w siłę społeczności!


SERDECZNIE WAS ZATEM PROSZĘ O WSPARCIE FINANSOWE!
KLIKNIJ POWYŻSZY LINK I DOŁĄCZ SIĘ DO ZRZUTKI!

E. Przydatne pliki nagłówkowe

Ten dokument zgodny jest z NSIS 3.04


E.1 Funkcje operujące na pliku



E.1.1 Wprowadzenie


Dołączenie pliku nagłówkowego:

!include "FileFunc.nsh"

Wywołanie funkcji:

Section Install
     ${GetFileExt} "C:\Pobrane elementy\Index.html" $R0
     ; $R0="html"
SectionEnd
Section un.Install
     ${GetParent} "C:\Pobrane elementy\Index.html" $R0
     ; $R0="C:\Pobrane elementy"
SectionEnd


E.1.2 Locate


  • Wyszukuje pliki, katalogi oraz puste katalogi z maską oraz z opcją rozmiaru.

Składnia:

${Locate} "[Ścieżka]" "[Opcje]" "Funkcja"
"[Ścieżka]"   ; Dysk lub katalog
                    ;
"[Opcje]"      ; /L=[FD|F|D|DE|FDE]
                    ;     /L=FD	- Lokalizuje pliki oraz katalogi (domyślne)
                    ;     /L=F	- Lokalizuje tylko pliki
                    ;     /L=D	- Lokalizuje tylko katalogi
                    ;     /L=DE	- Lokalizuje tylko puste katalogi
                    ;     /L=FDE	- Lokalizuje pliki oraz puste katalogi
                    ; /M=[maska]
                    ;     /M=*.*			- Lokalizuje wszystko (domyślnie)
                    ;     /M=*.doc		- Lokalizuje Work.doc, 1.doc ...
                    ;     /M=Pho*			- Lokalizuje PHOTOS, phone.txt ...
                    ;     /M=win???.exe	- Lokalizuje winamp.exe, winver.exe ...
                    ;     /M=winamp.exe	- Lokalizuje tylko winamp.exe
                    ; /S=No:No[B|K|M|G]
                    ;     /S=			- Nie wykrywa rozmiaru pliku (szybsze) (domyślne)
                    ;     /S=0:0B		- Lokalizuje tylko pliki o rozmiarze 0 bajtów
                    ;     /S=5:9K		- Lokalizuje tylko pliki o rozmiarze od 5 do 9 kilobajtów
                    ;     /S=:10M		- Lokalizuje tylko pliki o rozmiarze 10 megabajtów lub mniej
                    ;     /S=1G		- Lokalizuje tylko pliki o rozmiarze 1 gigabajt lub więcej
                    ; /G=[1|0]
                    ;     /G=1		- Lokalizuje z podkatalogami (domyślnie)
                    ;     /G=0		- Lokalizuje bez podkatalogów
                    ; /B=[0|1]
                    ;     /B=0		- Baner nie jest używany (domyślnie)
                    ;     /B=1		- Baner jest używany. Wywołanie zwrotne, gdy funkcja
                    ;				   zaczyna wyszukiwać w nowym katalogu
"Funkcja"      ; Funkcja zwrotna, po znalezieniu

Function "Funkcja"
	; $R9    "path\name"
	; $R8    "path"
	; $R7    "name"
	; $R6    "size"  ($R6="", jeśli katalog, $R6="0", jeśli plik z parametrem /S=)

	; $R0-$R5  nie używane (zapisywanie do nich danych).
	; ...

	Push $var    ; jeśli $var="StopLocate" to wyjście z funkcji
FunctionEnd
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli katalog lub dysk nie istnieją
  • - Ustawiana jest flaga błędu, jeśli składnia jest błędna
  • - Czytaj więcej tutaj: Wtyczka Locate

Przykład (wyszukiwanie jednego pliku):

Section
	${Locate} "C:\ftp" "/L=F /M=RPC DCOM.rar /S=1K" "Przyklad1"
	; Plik 'RPC DCOM.rar' w katalogu 'C:\ftp' o rozmiarze 1 Kb lub więcej

	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK +2
	MessageBox MB_OK "$$R0=$R0"
SectionEnd

Function Przyklad1
	StrCpy $R0 $R9
	; $R0="C:\ftp\files\RPC DCOM.rar"

	MessageBox MB_YESNO '$R0$\n$\nSzukać kolejnego?' IDYES +2
	StrCpy $0 StopLocate

	Push $0
FunctionEnd

Przykład (zapisuje wyniki do pliku tekstowego):

Section
	GetTempFileName $R0
	FileOpen $R1 $R0 w
	${Locate} "C:\ftp" "/S=:2M /G=0" "Przyklad2"
	; Katalogi i wszystkie pliki o rozmiarze 2 Mb lub mniej
	; nie skanuj podkatalogów
	FileClose $R1

	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK +2
	Exec '"notepad.exe" "$R0"'
SectionEnd

Function Przyklad2
	StrCmp $R6 '' 0 +3
	FileWrite $R1 "Katalog=$R9$\r$\n"
	goto +2
	FileWrite $R1 "Plik=$R9  Rozmiar=$R6 Mb$\r$\n"

	Push $0
FunctionEnd

Przykład (zapisuje wyniki do pliku INI):

Section
	GetTempFileName $R0
	${Locate} "C:\ftp" "/L=F /S=0K" "Przyklad3"
	; Wszystkie pliki w katalogu 'C:\ftp' o rozmiarze w Kb

	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK +2
	Exec '"notepad.exe" "$R0"'
SectionEnd

Function Przyklad3
	WriteIniStr $R0 "$R8" "$R7" "$R6 Kb"

	Push $0
FunctionEnd

Przykład (usuwanie pustych katalogów):

Section
	StrCpy $R2 0
	StrCpy $R3 0

	loop:
	StrCpy $R1 0
	${Locate} "C:\ftp" "/L=DE" "Przyklad4"
	IntOp $R3 $R3 + 1
	IntOp $R2 $R2 + $R1
	StrCmp $R0 StopLocate +2
	StrCmp $R1 0 0 loop

	IfErrors 0 +2
	MessageBox MB_OK 'Błąd' IDOK +2
	MessageBox MB_OK '$R2 katalogi zostały usunięte$\n$R3 przebiegów'
SectionEnd

Function Przyklad4
	MessageBox MB_YESNOCANCEL 'Usunąć pusty katalog "$R9"?' IDNO end IDCANCEL cancel
	RMDir $R9
	IntOp $R1 $R1 + 1
	goto end

	cancel:
	StrCpy $R0 StopLocate

	end:
	Push $R0
FunctionEnd

Przykład (przeniesienie wszystkich plików do jednego katalogu):

Section
	StrCpy $R0 "C:\ftp"  ; Katalog, z którego przenosimy pliki
	StrCpy $R1 "C:\ftp2" ; Katalog, do którego przenosimy pliki

	StrCpy $R2 0
	StrCpy $R3 0
	${Locate} "$R0" "/L=F" "Przyklad5"

	IfErrors 0 +2
	MessageBox MB_OK 'Błąd' IDOK +4
	StrCmp $R3 0 0 +2
	MessageBox MB_OK '$R2 plików zostało przeniesionych' IDOK +2
	MessageBox MB_OK '$R2 plików zostało przeniesionych$\n$R3 NIE zostało przeniesionych'
SectionEnd

Function Przyklad5
	StrCmp $R8 $R1 +6
	IfFileExists '$R1\$R7' +4
	Rename $R9 '$R1\$R7'
	IntOp $R2 $R2 + 1
	goto +2
	IntOp $R3 $R3 + 1

	Push $0
FunctionEnd

Przykład (kopiowanie plików z logowaniem):

Section
	StrCpy $R0 "C:\ftp"  ; Katalog, z którego kopiujemy pliki
	StrCpy $R1 "C:\ftp2" ; Katalog, do którego kopiujemy pliki
	StrLen $R2 $R0

	GetTempFileName $0
	FileOpen $R3 $0 w
	${Locate} "$R0" "/L=FDE" "Przyklad6"
	FileClose $R3

	IfErrors 0 +2
	MessageBox MB_OK 'Błąd'

	Exec '"notepad.exe" "$0"'    ; Wyświetl dziennik w notatniku
SectionEnd

Function Przyklad6
	StrCpy $1 $R8 '' $R2

	StrCmp $R6 '' 0 +3
	CreateDirectory '$R1$1\$R7'
	goto end
	CreateDirectory '$R1$1'
	CopyFiles /SILENT $R9 '$R1$1'

	IfFileExists '$R1$1\$R7' 0 +3
	FileWrite $R3 "-stary:$R9  -nowy:$R1$1\$R7  -sukces$\r$\n"
	goto +2
	FileWrite $R3 "-stary:$R9  -nowy:$R1$1\$R7  -błąd$\r$\n"

	end:
	Push $0
FunctionEnd

Przykład (odtworzenie struktury katalogów):

Section
	StrCpy $R0 "C:\ftp"    ; Pobierana struktura katalogów
	StrCpy $R1 "C:\ftp2"   ; Katalog, do którego przeniesiona zostanie struktura katalogów
	StrLen $R2 $R0

	${Locate} "$R0" "/L=D" "Przyklad7"

	IfErrors 0 +2
	MessageBox MB_OK 'Błąd'
SectionEnd

Function Przyklad7
	StrCpy $1 $R9 '' $R2
	CreateDirectory '$R1$1'

	Push $0
FunctionEnd

Przykład:

(Lokalizacja z banerem - wymagana jest wtyczka NxS)

Section
	nxs::Show /NOUNLOAD `Instalator $(^Name)` /top \
       `Trwa wyszukiwanie$\r$\nProszę czekać..., jeśli możesz...` /h 1 /can 1 /end
	${Locate} "C:\WINDOWS" "/L=F /M=*.inf /B=1" "Przyklad8"
	nxs::Destroy
SectionEnd

Function Przyklad8
	StrCmp $R0 $R8 abortcheck
	StrCpy $R0 $R8
	nxs::Update /NOUNLOAD /sub "$R8" /pos 78 /end

	abortcheck:
	nxs::HasUserAborted /NOUNLOAD
	Pop $0
	StrCmp $0 1 0 +2
	StrCpy $0 StopLocate

	StrCmp $R9 '' end
	; ...

	end:
	Push $0
FunctionEnd


E.1.3 GetSize


  • Znajduje rozmiar pliku, maskę plików lub katalog.
  • Znajduje liczbę plików, katalogów i podkatalogów.

Składnia:

${GetSize} "[Ścieżka]" "[Opcje]" $var1 $var2 $var3
"[Ścieżka]"   ; Dysk lub katalog
              ;
"[Opcje]"     ; /M=[maska]
                   ;     /M=*.*			- Znajduje wszystko (domyślnie)
                   ;     /M=*.doc			- Znajduje Work.doc, 1.doc ...
                   ;     /M=Pho*			- Znajduje PHOTOS, phone.txt ...
                   ;     /M=win???.exe		- Znajduje winamp.exe, winver.exe ...
                   ;     /M=winamp.exe	- Znajduje tylko winamp.exe
                   ; /S=No:No[B|K|M|G]
                   ;     /S=			- Nie wykrywa rozmiaru pliku (szybsze) (domyślnie)
                   ;     /S=0:0B		- Wyszukuje tylko pliki o rozmiarze równym dokładnie 0 bajtów
                   ;     /S=5:9K		- Wyszukuje tylko pliki o rozmiarze od 5 do 9 kilobajtów
                   ;     /S=:10M		- Wyszukuje tylko pliki o rozmiarze 10 megabajtów lub mniejsze
                   ;     /S=1G		- Wyszukuje tylko pliki o rozmiarze 1 gigabajt lub większe
                   ; /G=[1|0]
                   ;     /G=1		- Wyszukuje w podkatalogach (domyślnie)
                   ;     /G=0		- Wyszukuje bez podkatalogów
                   ;
$var1           ; Wynik1: Rozmiar
$var2           ; Wynik2: Suma plików
$var3           ; Wynik3: Suma katalogów
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli katalog lub dysk nie istnieją
  • - Ustawiana jest flaga błędu, jeśli składnia jest błędna
  • - Czytaj więcej tutaj: Wtyczka Locate

Przykład (1):

Section
	; Znajduje rozmiar pliku "C:\WINDOWS\Explorer.exe" w kilobajtach

	${GetSize} "C:\WINDOWS" "/M=Explorer.exe /S=0K /G=0" $0 $1 $2
	; $0="220" Kb
	; $1="1"   plików
	; $2=""    katalogów

	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd

Przykład (2):

Section
	; Znajduje rozmiar katalogu "C:\Installs\Reanimator\Drivers" w megabajtach

	${GetSize} "C:\Installs\Reanimator\Drivers" "/S=0M" $0 $1 $2
	; $0="132" Mb
	; $1="555" plików
	; $2="55"  katalogów

	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd

Przykład (3):

Section
	; Znajduje liczbę plików i katalogów "C:\WINDOWS" (bez podkatalogów)

	${GetSize} "C:\WINDOWS" "/G=0" $0 $1 $2
	; $0=""    rozmiar
	; $1="253" plików
	; $2="46"  katalogów

	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd


E.1.4 DriveSpace


  • Zwraca całkowitą, zajmowaną lub wolną przestrzeń na dysku.

Składnia:

${DriveSpace} "[Napęd]" "[Opcje]" $var
"[Napęd]"     ; Dysk do sprawdzenia
                    ;
"[Opcje]"      ; /D=[T|O|F]
                    ;     /D=T  - Całkowita przestrzeń (domyślnie)
                    ;     /D=O  - Zajęta przestrzeń
                    ;     /D=F  - Wolna przestrzeń
                    ; /S=[B|K|M|G]
                    ;     /S=B  - Rozmiar w bajtach (domyślnie)
                    ;     /S=K  - Rozmiar w kilobajtach
                    ;     /S=M  - Rozmiar w megabajtach
                    ;     /S=G  - Rozmiar w gigabajtach
                    ;
$var             ; Wynik: Rozmiar
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli dysk nie istnieje lub nie jest gotowy
  • - Ustawiana jest flaga błędu, jeśli składnia jest błędna

Przykład:

Section
	${DriveSpace} "C:\" "/D=F /S=M" $R0
	; $R0="2530"   megabajtów wolnego miejsca na dysku C:
SectionEnd


E.1.5 GetDrives


  • Znajduje wszystkie dostępne napędy w systemie.

Składnia:

${GetDrives} "[Opcja]" "Funkcja"
"[Opcja]"       ; [FDD+HDD+CDROM+NET+RAM]
                     ;   FDD    Napędy stacji dyskietek
                     ;   HDD    Napędy dysku twardego
                     ;   CDROM  Napędy CD-ROM
                     ;   NET    Napędy sieciowe
                     ;   RAM    Napędy dysków RAM
                     ;
                     ; [ALL]
                     ;   Znajduje wszystkie napędy po literze (domyślnie)
                     ;
"Funkcja"       ; Funkcja zwrotna po znalezieniu

Function "Funkcja"
	; $9    "litera napędu"  (a:\ c:\ ...)
	; $8    "typ napędu"    (FDD HDD ...)

	; $R0-$R9 nie są używane (przechowywane są w nich dane).
	; ...

	Push $var    ; jeśli $var="StopGetDrives", to następuje wyjście z funkcji
FunctionEnd

Przykład1:

Section
	${GetDrives} "FDD+CDROM" "Przyklad1"
SectionEnd

Function Przyklad1
	MessageBox MB_OK "$9  (Napęd $8)"

	Push $0
FunctionEnd

Przykład2:

Section
	${GetDrives} "ALL" "Przyklad2"
SectionEnd

Function Przyklad2
	MessageBox MB_OK "$9  (Napęd $8)"

	Push $0
FunctionEnd

Przykład3 (pobiera typ napędu):

Section
	StrCpy $R0 "D:\"     ; Litera napędu
	StrCpy $R1 "nieprawidłowy"

	${GetDrives} "ALL" "Przyklad3"

	MessageBox MB_OK "Typ napędu $R0 to $R1"
SectionEnd

Function Przyklad3
	StrCmp $9 $R0 0 +3
	StrCpy $R1 $8
	StrCpy $0 StopGetDrives

	Push $0
FunctionEnd


E.1.6 GetTime


  • Pobiera czas lokalny lub systemowy.
  • Pobiera czas pliku (czas dostępu, czas utworzenia oraz czas ostatniej modyfikacji).

Składnia:

${GetTime} "[Plik]" "[Opcja]" $var1 $var2 $var3 $var4 $var5 $var6 $var7
"[Plik]"        ; Ignorowany, jeśli "L" lub "LS"
                   ;
"[Opcja]"     ; [Opcje]
                   ;   L   Czas lokalny
                   ;   A   Ostatni czas dostępu do pliku
                   ;   C   Czas utworzenia pliku
                   ;   M   Czas modyfikacji pliku
                   ;   LS  Czas systemowy (UTC)
                   ;   AS  Ostatni czas dostępu do pliku (UTC)
                   ;   CS  Czas utworzenia pliku (UTC)
                   ;   MS  Czas modyfikacji pliku (UTC)
                   ;
$var1           ; Wynik1: dzień
$var2           ; Wynik2: miesiąc
$var3           ; Wynik3: rok
$var4           ; Wynik4: nazwa dnia tygodnia
$var5           ; Wynik5: godzina
$var6           ; Wynik6: minuta
$var7           ; Wynik7: sekundy
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli plik nie istnieje
  • - Ustawiana jest flaga błędu, jeśli składnia jest błędna
  • - Zobacz także Wtyczka czasu

Przykład (pobiera czas lokalny):

Section
	${GetTime} "" "L" $0 $1 $2 $3 $4 $5 $6
	; $0="01"      dzień
	; $1="04"      miesiąc
	; $2="2005"    rok
	; $3="Piątek"  nazwa dnia tygodnia
	; $4="16"      godzina
	; $5="05"      minuta
	; $6="50"      sekundy

	MessageBox MB_OK 'Data=$0/$1/$2 ($3)$\nCzas=$4:$5:$6'
SectionEnd

Przykład (pobiera czas pliku):

Section
	${GetTime} "$WINDIR\Explorer.exe" "C" $0 $1 $2 $3 $4 $5 $6
	; $0="12"       dzień
	; $1="10"       miesiąc
	; $2="2004"     rok
	; $3="Wtorek"   nazwa dnia tygodnia
	; $4="2"        godzina
	; $5="32"       minuta
	; $6="03"       sekundy

	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK +2
	MessageBox MB_OK 'Data=$0/$1/$2 ($3)$\nCzas=$4:$5:$6'
SectionEnd

Przykład (pobiera czas systemowy):

Section
	${GetTime} "" "LS" $0 $1 $2 $3 $4 $5 $6
	; $0="01"      dzień
	; $1="04"      miesiąc
	; $2="2005"    rok
	; $3="Piątek"  nazwa dnia tygodnia
	; $4="11"      godzina
	; $5="05"      minuta
	; $6="50"      sekundy

	MessageBox MB_OK 'Data=$0/$1/$2 ($3)$\nCzas=$4:$5:$6'
SectionEnd

Przykład (konwersja czasu na format 12-godzinny AM/PM):

Section
	${GetTime} "" "L" $0 $1 $2 $3 $4 $5 $6

	StrCmp $4 0 0 +3
	StrCpy $4 12
	goto +3
	StrCmp $4 12 +5
	IntCmp $4 12 0 0 +3
	StrCpy $7 AM
	goto +3
	IntOp $4 $4 - 12
	StrCpy $7 PM

	MessageBox MB_OK 'Data=$0/$1/$2 ($3)$\nCzas=$4:$5:$6 $7'
SectionEnd


E.1.7 GetFileAttributes


  • Pobiera atrybuty pliku lub katalogu.

Składnia:

${GetFileAttributes} "[Plik]" "[Atrybuty]" $var
"[Plik]"            ; Plik lub katalog
                       ;
"[Atrybuty]"     ; "ALL"  (domyślnie)
                       ;  -wszystkie atrybuty pliku połączone znakiem "|" na wyjściu
                       ;
                       ; "READONLY|HIDDEN|SYSTEM|DIRECTORY|ARCHIVE|
                       ;  DEVICE|NORMAL|TEMPORARY|SPARSE_FILE|REPARSE_POINT|
                       ;  COMPRESSED|OFFLINE|NOT_CONTENT_INDEXED|ENCRYPTED"
                       ;  -plik musi mieć określone atrybuty
                       ;
$var                ; Wynik:
                       ;    $var=atr1|atr2|... (jeśli użyto "ALL")
                       ;    $var=1   plik posiada określone atrybuty
                       ;    $var=0   plik nie posiada określonych atrybutów
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli plik nie istnieje

Przykład1:

Section
	${GetFileAttributes} "C:\MSDOS.SYS" "ALL" $R0
	; $R0=READONLY|HIDDEN|SYSTEM|ARCHIVE
SectionEnd

Przykład2:

Section
	${GetFileAttributes} "C:\MSDOS.SYS" "SYSTEM|HIDDEN" $R0
	; $R0=1
SectionEnd

Przykład3:

Section
	${GetFileAttributes} "C:\MSDOS.SYS" "NORMAL" $R0
	; $R0=0
SectionEnd


E.1.8 GetFileVersion


  • Pobiera informacje z pliku wykonywalnego.

Składnia:

${GetFileVersion} "[Plik wykonywalny]" $var
"[Plik wykonywalny]"   ; Plik wykonywalny (*.exe *.dll ...)
$var                            ; Wynik: Numer wersji
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli plik nie istnieje
  • - Ustawiana jest flaga błędu, jeśli plik nie posiada informacji o wersji

Przykład:

Section
	${GetFileVersion} "C:\ftp\program.exe" $R0
	; $R0="1.1.0.12"
SectionEnd


E.1.9 GetExeName


  • Pobiera nazwę instalatora (z poprawną wielkością liter w Windows 98/ME).

Składnia:

${GetExeName} $var

Przykład:

Section
	${GetExeName} $R0
	; $R0="C:\ftp\program.exe"
SectionEnd


E.1.10 GetExePath


  • Pobiera ścieżkę dostępu do instalatora ($EXEDIR z poprawną wielkością liter w Windows 98/ME).

Składnia:

${GetExePath} $var

Przykład:

Section
	${GetExePath} $R0
	; $R0="C:\ftp"
SectionEnd


E.1.11 GetParameters


  • Pobiera parametry linii poleceń.

Składnia:

${GetParameters} $var

Przykład:

Section
	${GetParameters} $R0
	; $R0="[parametry]"
SectionEnd


E.1.12 GetOptions


  • Pobiera opcje z parametrów linii poleceń.

Składnia:

${GetOptions} "[Parametry]" "[Opcja]" $var
"[Parametry]"     ; Parametry linii poleceń
                          ;
"[Opcje]"            ; Nazwa opcji
                          ;
$var                   ; Wynik: łańcuch znaków opcji
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli opcja nie została znaleziona
  • - Pierwszy znak łańcucha znaków opcji jest rozdzielnikiem parametru

Przykład1:

Section
	${GetOptions} "/S /T" "/T"  $R0

	IfErrors 0 +2
	MessageBox MB_OK "Nie znaleziono" IDOK +2
	MessageBox MB_OK "Znaleziono"
SectionEnd

Przykład2:

Section
	${GetOptions} "-INSTDIR=C:\Program Files\Common Files -SILENT=yes" "-INSTDIR="  $R0
	;$R0=C:\Program Files\Common Files
SectionEnd

Przykład3:

Section
	${GetOptions} '/SILENT=yes /INSTDIR="C:/Program Files/Common Files" /ADMIN=password' \
                      "/INSTDIR="  $R0
	;$R0=C:/Program Files/Common Files
SectionEnd

Przykład4:

Section
	${GetOptions} `-SILENT=yes -INSTDIR='"C:/Program Files/Common Files"' \
                       -ADMIN=password` "-INSTDIR="  $R0
	;$R0="C:/Program Files/Common Files"
SectionEnd


E.1.13 GetOptionsS


  • Tak samo jak dla funkcji GetOptions, ale rozróżniane są wielkości liter.


E.1.14 GetRoot


  • Pobiera katalog nadrzędny.

Składnia:

${GetRoot} "[Pełna Ścieżka dostępu]" $var

Przykład1:

Section
	${GetRoot} "C:\Program Files\NSIS" $R0
	; $R0="C:"
SectionEnd

Przykład2:

Section
	${GetRoot} "\\SuperPimp\NSIS\Source\exehead\Ui.c" $R0
	; $R0="\\SuperPimp\NSIS"
SectionEnd


E.1.15 GetParent


  • Pobiera katalog nadrzędny.

Składnia:

${GetParent} "[Ścieżka dostępu]" $var

Przykład:

Section
	${GetParent} "C:\Program Files\Winamp\uninstwa.exe" $R0
	; $R0="C:\Program Files\Winamp"
SectionEnd


E.1.16 GetFileName


  • Pobiera ostatnią część z ścieżki do katalogu.

Składnia:

${GetFileName} "[Ścieżka dostępu]" $var

Przykład:

Section
	${GetFileName} "C:\Program Files\Winamp\uninstwa.exe" $R0
	; $R0="uninstwa.exe"
SectionEnd


E.1.17 GetBaseName


  • Pobiera nazwę pliku bez rozszerzenia.

Składnia:

${GetBaseName} "[Ścieżka dostępu]" $var

Przykład:

Section
	${GetBaseName} "C:\ftp\program.exe" $R0
	; $R0="program"
SectionEnd


E.1.18 GetFileExt


  • Pobiera rozszerzenie pliku.

Składnia:

${GetFileExt} "[Ścieżka dostępu]" $var

Przykład:

Section
	${GetFileExt} "C:\ftp\program.exe" $R0
	; $R0="exe"
SectionEnd


E.1.19 BannerTrimPath


  • Skraca ścieżkę dostępu dla banera.

Składnia:

${BannerTrimPath} "[Ścieżka dostępu]" "[Opcja]" $var
"[Ścieżka dostępu]"    ;
                                 ;
"[Opcja]"                   ; [Długość][A|B|C|D]
                                 ;
                                 ; Długość  -Maksymalna długość łańcucha znaków
                                 ;   A      -Skraca ścieżkę dostępu w środku (domyślnie)
                                 ;           (C:\root\...\trzecia ścieżka dostępu)
                                 ;           Jeśli tryb A nie jest dostępny, to użyty zostanie tryb B
                                 ;   B      -Skraca ścieżkę dostępu z prawej
                                 ;           (C:\root\druga ścieżka dostępu\...)
                                 ;           Jeśli tryb B nie jest dostępny, to użyty zostanie tryb C
                                 ;   C      -Skraca ścieżkę dostępu z prawej
                                 ;           (C:\root\druga ścieżka dostępu\trzecia śc...)
                                 ;   D      -Skraca ścieżkę dostępu z prawej + nazwa pliku
                                 ;           (C:\root\druga śc...\trzecia ścieżka dostępu)
                                 ;           Jeśli tryb D nie jest dostępny, to użyty zostanie tryb C
                                 ;
$var                          ; Wynik:  Skrócona ścieżka dostępu

Przykład:

Section
	${BannerTrimPath} "C:\Server\Documents\Terminal\license.htm" "35A" $R0
	; $R0=C:\Server\...\Terminal\license.htm
SectionEnd

Przykład (wtyczka Banera):

!include "WinMessages.nsh"
!include "FileFunc.nsh"

Section
	Banner::show "Rozpoczynanie..."
	Banner::getWindow
	Pop $R1
	${Locate} "$WINDIR" "/L=F /M=*.* /B=1" "LocateCallback"
	Banner::destroy
SectionEnd

Function LocateCallback
	StrCmp $R0 $R8 code
	StrCpy $R0 $R8
	${BannerTrimPath} "$R8" "38B" $R8
	GetDlgItem $1 $R1 1030
	SendMessage $1 ${WM_SETTEXT} 0 "STR:$R8"

	code:
	StrCmp $R9 '' end
	; ...

	end:
	Push $0
FunctionEnd

Przykład

(Wtyczka NxS):

!include "FileFunc.nsh"

Section
	nxs::Show /NOUNLOAD `Instalacja $(^Name)` \
	  /top `Instalator coś wyszukuje$\nProszę czekać$\nJeśli możesz...` \
	  /h 1 /can 1 /end
	${Locate} "$WINDIR" "/L=F /M=*.* /B=1" "LocateCallback"
	nxs::Destroy
SectionEnd

Function LocateCallback
	StrCmp $R0 $R8 abortcheck
	StrCpy $R0 $R8
	${BannerTrimPath} "$R8" "55A" $R8
	nxs::Update /NOUNLOAD /sub "$R8" /pos 78 /end

	abortcheck:
	nxs::HasUserAborted /NOUNLOAD
	Pop $0
	StrCmp $0 1 0 +2
	StrCmy $0 StopLocate

	StrCmp $R9 '' end
	; ...

	end:
	Push $0
FunctionEnd


E.1.20 DirState


  • Sprawdza czy katalog jest pełny, pusty lub nie istnieje.

Składnia:

${DirState} "[Ścieżka dostępu]" $var
"[Ścieżka dostępu]"   ; Katalog
$var                          ; Wynik:
                                ;    $var=0  (pusty)
                                ;    $var=1  (pełny)
                                ;    $var=-1 (katalog nie został znaleziony)

Przykład:

Section
	${DirState} "$TEMP" $R0
	; $R0="1"  katalog jest pełny
SectionEnd


E.1.21 RefreshShellIcons


  • Po zmianie powiązania pliku, możesz wywołać tę funkcję, aby szybko odświeżyć powłokę Windows.

Składnia:

${RefreshShellIcons}

Przykład:

Section
	WriteRegStr HKCR "Winamp.File\DefaultIcon" "" "$PROGRAMFILES\Winamp\Winamp.exe,2"

	${RefreshShellIcons}
SectionEnd

E.2 Funkcje operujące na tekście



E.2.1 Wprowadzenie


Dołączenie pliku nagłówkowego:

!include "TextFunc.nsh"

Wywoływanie funkcji:

Section Instalacja
	${LineRead} "C:\a.log" "-1" $R0
	; $R0="Ostatnia linia$\r$\n"
SectionEnd
Section un.Instalacja
	${TrimNewLines} "Ostatnia linia$\r$\n" $R0
	; $R0="Ostatnia linia"
SectionEnd


E.2.2 LineFind


  • Znajduje określone linie w pliku tekstowym i pozwala na ich edycję lub podgląd poprzez funkcje zwrotne.

Składnia:

${LineFind} "[Plik1]" "[Plik2|/NUL]" "[Liczba linii]" "Funkcja"
"[Plik1]"             ; Wejściowy plik tekstowy
                         ;
"[Plik2|/NUL]"    ; [Plik2]
                         ;   Wyjściowy plik tekstowy
                         ;   Jeśli pusty, to Plik2=Plik1
                         ; [/NUL]
                         ;   Brak wyjściowego pliku tekstowego (odczytuje tylko Plik1)
                         ;
"[Liczba linii]"    ; [Nr|-Nr|Nr:Nr|{Nr}|{-Nr}|{Nr:Nr}]
                         ;   1:-1	wszystkie linie do zmiany (domyślnie)
                         ;   2		druga linia od początku
                         ;   -3	trzecia linia od końca
                         ;   5:9	zakres linii od 5 do 9
                         ;   {2}	tylko druga linia od początku na wyjściu
                         ;   {-3}	tylko trzecia linia od końca na wyjściu
                         ;   {5:9}	tylko zakres linii od 5 do 9 na wyjściu
                         ;
"Funkcja"           ; Funkcja zwrotna dla określonych linii

Function "Funkcja"
	; $R9       Bieżąca linia
	; $R8       Numer bieżącej linii
	; $R7       Negatywny numer bieżącej linii
	; $R6       Bieżący zakres linii
	; $R5       Uchwyt pliku otwartego do odczytu
	; $R4       Uchwyt pliku otwartego do zapisu ($R4="", jeśli "/NUL")

	; możesz użyć dowolnej funkcji operujących na łańcuchu znaków
	; $R0-$R3  nie są używane (przechowywane są w nich dane).
	; ...

	Push $var  ; jeśli $var="StopLineFind", to następuje wyjście z funkcji
	                  ; jeśli $var="SkipWrite", to pomija bieżącą linie (ignorowany, gdy "/NUL")

FunctionEnd
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli plik wejściowy nie istnieje
  • - Ustawiana jest flaga błędu, jeśli wyjściowa ścieżka pliku nie istnieje
  • - Zakres musi być określony rosnąco (2 4:5 9:-8 -5:-4 - 2:-1)
  • - Plik wyjściowy nie zostanie uaktualniony, jeśli nie dokonano żadnych zmian

Przykład1 (usuwa dwa pierwsze symbole):

Section
	${LineFind} "C:\a.log" "C:\a-edited.log" "3:-1" "Przyklad1"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd

Function Przyklad1
	${TrimNewLines} '$R9' $R9
	StrCpy $R9 $R9 '' 2
	StrCpy $R9 '$R9$\r$\n'
	; zaczyna od 3 linii i usuwa dwa pierwsze symbole

	Push $0
FunctionEnd

Przykład2 (pokazuje zmienione linie):

Section
	${LineFind} "C:\a.log" "a.log" "{5:12 15 -6:-5 -1}" "Przyklad2"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd

Function Przyklad2
	${TrimNewLines} '$R9' $R9
	StrCpy $R9 "$R9   ~zmieniona linia ($R8)~$\r$\n"

	Push $0
FunctionEnd

Przykład3 (usuwa linie):

Section
	${LineFind} "C:\a.log" "\logs\a.log" "2:3 10:-5 -3: - 2" "Przyklad3"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd

Function Przyklad3
	StrCpy $0 SkipWrite

	Push $0
FunctionEnd

Przykład4 (wstawia linie):

Section
	${LineFind} "C:\a.log" "" "10" "Przyklad4
	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd

Function Przyklad4
	FileWrite $R4 "---Pierwsza linia---$\r$\n"
	FileWrite $R4 "---Druga linia ...---$\r$\n"

	Push $0
FunctionEnd

Przykład5 (zamienia w pliku określoną ilość razy - wymagany jest "WordFunc.nsh"):

!include "WordFunc.nsh"

Section
	StrCpy $R0 0
	${LineFind} "C:\a.log" "C:\logs\a.log" "1:-1" "Przyklad5"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK +2
	MessageBox MB_OK "Zmienione linie=$R0"
SectionEnd

Function Przyklad5
	StrCpy $1 $R9

	${WordReplace} '$R9' ' ' '_' '+*' $R9

	StrCmp $1 $R9 +2
	IntOp $R0 $R0 + 1
	; $R0 - liczba zmienionych linii

	Push $0
FunctionEnd

Przykład6 (linia łańcucha znaków do obcięcia lub usunięcia):

Section
	${LineFind} "\a.log" "C:\logs\a.log" "" "Przyklad6"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK +2
	MessageBox MB_OK "Przetworzone linie=$R1:$R2"
SectionEnd

Function Przyklad6
	; (Obcina linie od linii do innej linii (również tę linię))
	StrCmp $R0 finish stop
	StrCmp $R0 start finish
	StrCmp $R9 'Początkowa linia$\r$\n' 0 skip
	StrCpy $R0 start
	StrCpy $R1 $R8
	goto code
	finish:
	StrCmp $R9 'Końcowa linia$\r$\n' 0 code
	StrCpy $R0 finish
	StrCpy $R2 $R8
	goto code
	skip:
	StrCpy $0 SkipWrite
	goto output
	stop:
	StrCpy $0 StopLineFind
	goto output

	; (Usuwa linie od linii do innej linii (również tę linię))
	; StrCmp $R0 finish code
	; StrCmp $R0 start finish
	; StrCmp $R9 'Początkowa linia$\r$\n' 0 code
	; StrCpy $R0 start
	; StrCpy $R1 $R8
	; goto skip
	; finish:
	; StrCmp $R9 'Końcowa linia$\r$\n' 0 skip
	; StrCpy $R0 finish
	; StrCpy $R2 $R8
	; skip:
	; StrCpy $0 SkipWrite
	; goto output

	code:
	; ...

	output:
	Push $0
FunctionEnd

Przykład7 (odczyt linii):

Section
	${LineFind} "C:\a.log" "/NUL" "1:-1" "Przyklad7"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd

Function Przyklad7
	MessageBox MB_OKCANCEL '$$R9  "Linia"=[$R9]$\n$$R8     "#" =[$R8]' IDOK +2
	StrCpy $0 StopLineFind

	Push $0
FunctionEnd


E.2.3 LineRead


  • Pobiera linię o określonym numerze z pliku.

Składnia:

${LineRead} "[Plik]" "[Numer linii]" $var
"[Plik]"               ; Wejściowy plik tekstowy
                         ;
"[Numer linii]"    ; [Nr|-Nr]
                         ;   3    liczba linii od początku
                         ;   -5   liczba linii od końca
                         ;
$var                  ; Wynik: Linia
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli plik wejściowy nie istnieje
  • - Ustawiana jest flaga błędu, jeśli linia błędu nie została znaleziona

Przykład:

Section
	${LineRead} "C:\a.log" "-1" $R0
	; $R0="Ostatnia linia$\r$\n"
SectionEnd


E.2.4 FileReadFromEnd


  • Odczytuje plik tekstowy od ostatniej linii.

Składnia:

${FileReadFromEnd} "[Plik]" "Funkcja"
"[Plik]"        ; Wejściowy plik tekstowy
"Funkcja"    ; Funkcja zwrotna

Function "Funkcja"
	; $9       Bieżąca linia
	; $8       Bieżący numer linii
	; $7       Negatywny numer bieżącej linii

	; $R0-$R9 nie są używane (przechowywane są w nich dane).
	; ...

	Push $var      ; jeśli $var="StopFileReadFromEnd", to następuje wyjście z funkcji
FunctionEnd
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli plik wejściowy nie istnieje

Przykład1:

Section
	${FileReadFromEnd} "C:\a.log" "Przyklad1"

	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd

Function Przyklad1
	MessageBox MB_OKCANCEL '"Linia"=[$9]$\n   "#"=[$8]$\n  "-#"=[$7]' IDOK +2
	StrCpy $0 StopFileReadFromEnd

	Push $0
FunctionEnd

Przykład2 (odwraca plik tekstowy):

Section
	GetTempFileName $R0
	FileOpen $R1 $R0 w
	${FileReadFromEnd} "C:\a.log" "Przyklad2"
	FileClose $R1

	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK +2
	Exec '"notepad.exe" "$R0"'
SectionEnd

Function Przyklad2
	StrCmp $7 -1 0 +5
	StrCpy $1 $9 1 -1
	StrCmp $1 '$\n' +3
	StrCmp $1 '$\r' +2
	StrCpy $9 '$9$\r$\n'

	FileWrite $R1 "$9"

	Push $0
FunctionEnd


E.2.5 LineSum


  • Pobiera sumę linii w pliku tekstowym.

Składnia:

${LineSum} "[Plik]" $var
"[Plik]"      ; Plik wejściowy
$var          ; Wynik: Suma linii
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli plik wejściowy nie istnieje

Przykład:

Section
	${LineSum} "C:\a.log" $R0
	; $R0="54"
SectionEnd


E.2.6 FileJoin


  • Łączy dwa pliki w jeden (Plik1 + Plik2 = Plik3).

Składnia:

${FileJoin} "[Plik1]" "[Plik2]" "[Plik3]"
"[Plik1]"     ; Wejściowy Plik1
"[Plik2]"     ; Wejściowy Plik2
"[Plik3]"     ; Wyjściowy Plik3
                 ; Jeśli [Plik3]="", to dodaje [Plik2] do [Plik1]
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli wejściowe pliki nie istnieją
  • - Ustawiana jest flaga błędu, jeśli wyjściowa ścieżka pliku nie istnieje

Przykład1 (łączy: a.log + b.log = Z.log):

Section
	${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\Z.log"
SectionEnd

Przykład2 (dodaje: a.log + b.log = a.log):

Section
	${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\a.log"
SectionEnd


E.2.7 TextCompare


  • Porównuje dwa pliki tekstowe.

Składnia:

${TextCompare} "[Plik1]" "[Plik2]" "[Opcja]" "Funkcja"
"[Plik1]"     ; Plik1      Porównuje te linie
"[Plik2]"     ; Plik2      Porównuje z tymi liniami
"[Opcje]"    ; (linia po linii):
                  ; FastDiff   Porównuje linię N (Plik1) z linią N (Plik2)
                  ;            Wywołaj funkcję, jeśli znaleziono różną linie
                  ; FastEqual  Porównuje linię N (Plik1) z linią N (Plik2)
                  ;            Wywołaj funkcję, jeśli znaleziono taką samą linię
                  ; (numer linii niezależny):
                  ; SlowDiff   Porównuje linię N (Plik1) z wszystkimi liniami (Plik2)
                  ;            Wywołaj funkcję, jeśli linia N (Plik1) jest różna
                  ; SlowEqual  Porównuje linię N (Plik1) z wszystkimi liniami (Plik2)
                  ;            Wywołaj funkcję, jeśli linia N (Plik1) jest taka sama
"Funkcja"    ; Funkcja zwrotna

Function "Funkcja"
	; $9    "Linia Pliku1"
	; $8    "Numer linii"
	; $7    "Linia Pliku2" (pusty, jeśli SlowDiff)
	; $6    "Numer linii" (pusty, jeśli SlowDiff)

	; $R0-$R9  nie są używane (przechowywane są w nich dane).
	; ...

	Push $var    ; jeśli $var="StopTextCompare", to następuje wyjście z funkcji
FunctionEnd
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli Plik1 lub Plik2 nie istnieją
  • - Ustawiana jest flaga błędu, jeśli składnia jest błędna

Przykład (różne lub te same):

Section
	StrCpy $R0 ''
	${TextCompare} "C:\1.txt" "C:\2.txt" "FastDiff" "Przyklad1"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK +4

	StrCmp $R0 NotEqual 0 +2
	MessageBox MB_OK "Pliki różnią się" IDOK +2
	MessageBox MB_OK "Pliki są takie same"
SectionEnd

Function Przyklad1
	StrCpy $R0 NotEqual
	StrCpy $0 StopTextCompare

	Push $0
FunctionEnd

Przykład (porównuje linia po linii - Różne):

Section
	StrCpy $R0 'Text1.txt'
	StrCpy $R1 'Text2.txt'

	GetTempFileName $R2
	FileOpen $R3 $R2 w
	FileWrite $R3 "$R0 | $R1$\r$\n"
	${TextCompare} "$R0" "$R1" "FastDiff" "Przyklad2"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK +2

	Exec "notepad.exe $R2"
FunctionEnd

Function Przyklad2
	FileWrite $R3 '$8=$9'
	FileWrite $R3 '$6=$7$\r$\n'

	Push $0
FunctionEnd

Przykład (porównuje linia po linii - Te same):

Section
	StrCpy $R0 'Text1.txt'
	StrCpy $R1 'Text2.txt'

	GetTempFileName $R2
	FileOpen $R3 $R2 w
	FileWrite $R3 "$R0 | $R1$\r$\n"
	${TextCompare} "$R0" "$R1" "FastEqual" "Przyklad3"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK +2

	Exec "notepad.exe $R2"
FunctionEnd

Function Przyklad3
	FileWrite $R3 '$8|$6=$9'

	Push $0
FunctionEnd

Przykład (porównuje wszystkie linie - Różne):

Section
	StrCpy $R0 'Text1.txt'
	StrCpy $R1 'Text2.txt'

	GetTempFileName $R2
	FileOpen $R3 $R2 w
	FileWrite $R3 "$R0 | $R1$\r$\n"
	${TextCompare} "$R0" "$R1" "SlowDiff" "Przyklad4"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK end

	FileWrite $R3 "$\r$\n$R1 | $R0$\r$\n"
	${TextCompare} "$R1" "$R0" "SlowDiff" "Przyklad4"
	FileClose $R3
	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK end

	Exec "notepad.exe $R2"

	end:
FunctionEnd

Function Przyklad4
	FileWrite $R3 '$8=$9'

	Push $0
FunctionEnd

Przykład (porównuje wszystkie linie - Te same):

Section
	StrCpy $R0 'Text1.txt'
	StrCpy $R1 'Text2.txt'

	GetTempFileName $R2
	FileOpen $R3 $R2 w
	FileWrite $R3 "$R0 | $R1$\r$\n"
	${TextCompare} "$R0" "$R1" "SlowEqual" "Przyklad5"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK +2

	Exec "notepad.exe $R2"
FunctionEnd

Function Przyklad5
	FileWrite $R3 '$8|$6=$9'

	Push $0
FunctionEnd

Przykład (pokazuje zmienne):

Section
	${TextCompare} "C:\1.txt" "C:\2.txt" "FastDiff" "Przyklad6"

	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd

Function Przyklad6
	MessageBox MB_OKCANCEL '\
		$$9  "Linia Pliku1" = [$9]$\n\
		$$8  "Linia #" = [$8]$\n\
		$$7  "Linia Pliku2" = [$7]$\n\
		$$6  "Linia #" = [$6]'\
		IDOK +2
	StrCmp $0 StopTextCompare

	Push $0
FunctionEnd


E.2.8 TextCompareS


  • Tak samo jak dla funkcji TextCompare, ale rozróżniane są wielkości liter.


E.2.9 ConfigRead


  • Odczytuje wartość z nazwy wejścia w pliku konfiguracyjnym.

Składnia:

${ConfigRead} "[Plik]" "[Wejście]" $var
"[Plik]"         ; Plik konfiguracyjny
                    ;
"[Wejście]"   ; Nazwa wejścia
                    ;
$var             ; Wynik: Wartość
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli nie znaleziono wejścia
  • - Ustawiana jest flaga błędu, jeśli plik nie istnieje

Przykład1:

Section
	${ConfigRead} "C:\AUTOEXEC.BAT" "SET winbootdir=" $R0
	; $R0=C:\WINDOWS
SectionEnd

Przykład2:

Section
	${ConfigRead} "C:\apache\conf\httpd.conf" "Timeout " $R0
	; $R0=30
SectionEnd


E.2.10 ConfigReadS


  • Tak samo jak dla funkcji ConfigRead, ale rozróżniane są wielkości liter.


E.2.11 ConfigWrite


  • Zapisuje wartość z nazwy wejścia w pliku konfiguracyjnym.

Składnia:

${ConfigWrite} "[Plik]" "[Wejście]" "[Wartość]" $var
"[Plik]"         ; Plik konfiguracyjny
                    ;
"[Wejście]"   ; Nazwa wejścia
                    ;
"[Wartość]"   ; Nazwa wartości
                    ; Jeśli "", to usuwa wejście
                    ;
$var             ; Wynik:
                    ;    $var=CHANGED  Wartość jest zapisywana
                    ;    $var=DELETED  Wejście jest usuwane
                    ;    $var=ADDED    Wejście oraz wartość są dodawane
                    ;    $var=SAME     Wejście oraz wartość już istnieją
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli plik nie istnieje
  • - Ustawiana jest flaga błędu, jeśli plik nie może być otworzony

Przykład1:

Section
	${ConfigWrite} "C:\AUTOEXEC.BAT" "SET winbootdir=" "D:\WINDOWS" $R0
	; $R0=CHANGED
SectionEnd

Przykład2:

Section
	${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "30" $R0
	; $R0=SAME
SectionEnd

Przykład3:

Section
	${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "" $R0
	; $R0=DELETED
SectionEnd


E.2.12 ConfigWriteS


  • Tak samo jak dla funkcji ConfigWrite, ale rozróżniane są wielkości liter.


E.2.13 FileRecode


  • Zmienia format pliku tekstowego z DOS do Windows i na odwrót.

Składnia:

${FileRecode} "[Plik]" "[Format]"
"[Plik]"           ;
                      ;
"[Format]"      ; OemToChar   - z DOS do Windows
                      ; CharToOem   - z Windows do DOS
Uwaga:
  • - Ustawiana jest flaga błędu, jeśli plik nie istnieje
  • - Ustawiana jest flaga błędu, jeśli składnia jest błędna

Przykład:

Section
	${FileRecode} "C:\SCANDISK.LOG" "CharToOem"
SectionEnd


E.2.14 TrimNewLines


  • Przycinanie łańcucha znaków.

Składnia:

${TrimNewLines} "[łańcuch znaków]" $var
"[łańcuch znaków]"    ; Wejściowy łańcuch znaków
$var                  	 ; Wynik: Łańcuch znaków bez '$\r' oraz '$\n' na końcu

Przykład:

Section
	${TrimNewLines} "Linia tekstu$\r$\n" $R0
	; $R0="Linia tekstu"
SectionEnd

E.3 Funkcje operujące na słowie



E.3.1 Wprowadzenie


Dołączenie pliku nagłówkowego:

!include "WordFunc.nsh"

Wywoływanie funkcji:

Section Instalacja
	${WordFind} "A--H---S" "-" "+2" $R0
	; $R0="H"
SectionEnd
Section un.Instalacja
	${WordReplace} "A--H---S" "-" "x" "+3*" $R0
	; $R0="A--HxS"
SectionEnd


E.3.2 WordFind


  • Wielowłasnościowa funkcja operująca na łańcuchach znaków.

Łańcuchy znaków:
"[wyraz+1][rozdzielnik][wyraz+2][rozdzielnik][wyraz+3]..."
"[rozdzielnik][wyraz+1][rozdzielnik][wyraz+2][rozdzielnik]..."
"[rozdzielnik][rozdzielnik][wyraz+1][rozdzielnik][rozdzielnik][rozdzielnik]..."
"...[wyraz-3][rozdzielnik][wyraz - 2][rozdzielnik][wyraz-1]"
"...[rozdzielnik][wyraz - 2][rozdzielnik][wyraz-1][rozdzielnik]"
"...[rozdzielnik][rozdzielnik][wyraz-1][rozdzielnik][rozdzielnik][rozdzielnik]"

Składnia:

${WordFind} "[łańcuch znaków]" "[rozdzielnik]" "[E][opcje]" $var
"[łańcuch znaków]"   ; [Łańcuch znaków]
                                ; Wejściowy łańcuch znaków
"[rozdzielnik]"           ; [Rozdzielnik]
                                ; Jeden lub kilka symboli
"[E][opcje]"              ; [Opcje]
                                ;  +liczba   : numer wyrazu od początku
                                ;  -liczba   : numer wyrazu od końca
                                ;  +liczba}  : numer rozdzielnika od początku
                                ;              cała przestrzeń po
                                ;              rozdzielnik do wyjścia
                                ;  +liczba{  : numer rozdzielnika od początku
                                ;              cała przestrzeń przed
                                ;              rozdzielnik do wyjścia
                                ;  +liczba}} : numer wyrazu od początku
                                ;              cała przestrzeń po tym wyrazie
                                ;              do wyjścia
                                ;  +liczba{{ : numer wyrazu od początku
                                ;              cała przestrzeń przed tym wyrazem
                                ;              do wyjścia
                                ;  +liczba{} : numer wyrazu od początku
                                ;              cała przestrzeń przed i po
                                ;              ten wyraz (wykluczenie wyrazu)
                                ;  +liczba*} : numer wyrazu od początku
                                ;              cała przestrzeń po
                                ;              wyraz do wyjścia z wyrazem
                                ;  +liczba{* : numer wyrazu od początku
                                ;              cała przestrzeń przed
                                ;              wyraz do wyjścia z wyrazem
                                ;  #         : suma wyrazów do wyjścia
                                ;  *         : suma rozdzielników do wyjścia
                                ;  /word     : liczba wyrazów do wyjścia
                                ;
                                ; [E]
                                ;  Z poziomem błędów na wyjściu
                                ;  IfErrors:
                                ;     $var=1  rozdzielnik nie znaleziony
                                ;     $var=2  nie ma takiego numeru wyrazu
                                ;     $var=3  błąd składni (użyj: +1,-1},#,*,/word,...)
                                ; []
                                ;  Brak poziomu błędów na wyjściu (domyślnie)
                                ;  Jeśli znaleziono jakieś błędy, to (wynik=wejściowy łańcuch znaków)
                                ;
$var                         ; Wyjście (wynik)
Uwaga:
  • - Akceptowane liczby: 1,01,001,...

Przykład (znajduje wyraz poprzez liczbę):

Section
	${WordFind} "C:\io.sys C:\Program Files C:\WINDOWS" " C:\" "-02" $R0
	; $R0="Program Files"
SectionEnd

Przykład (wykluczanie rozdzielnika):

Section
	${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" "sys" " - 2}" $R0
	; $R0=" C:\logo.sys C:\WINDOWS"
SectionEnd

Przykład (suma wyrazów):

Section
	${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" " C:\" "#" $R0
	; $R0="3"
SectionEnd

Przykład (suma rozdzielników):

Section
	${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" "sys" "*" $R0
	; $R0="2"
SectionEnd

Przykład (znajduje numer wyrazu):

Section
	${WordFind} "C:\io.sys C:\Program Files C:\WINDOWS" " " "/Files" $R0
	; $R0="3"
SectionEnd

Przykład ( }} ):

Section
	${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" " " "+2}}" $R0
	; $R0=" C:\WINDOWS"
SectionEnd

Przykład ( {} ):

Section
	${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" " " "+2{}" $R0
	; $R0="C:\io.sys C:\WINDOWS"
SectionEnd

Przykład ( *} ):

Section
	${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" " " "+2*}" $R0
	; $R0="C:\logo.sys C:\WINDOWS"
SectionEnd

Przykład (pobiera katalog nadrzędny):

Section
	StrCpy $R0 "C:\Program Files\NSIS\NSIS.chm"
	;          "C:\Program Files\NSIS\Include\"
	;          "C:\\Program Files\\NSIS\\NSIS.chm"

	${WordFind} "$R0" "\" " - 2{*" $R0
	; $R0="C:\Program Files\NSIS"
	; "C:\\Program Files\\NSIS"
SectionEnd

Przykład (współrzędne):

Section
	${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" ":\lo" "E+1{" $R0
	; $R0="C:\io.sys C"
	IfErrors end

	StrLen $0 $R0             ; $0 = Pozycja startowa wyrazu (11)
	StrLen $1 ':\lo'          ; $1 = Długość wyrazu (4)
	; StrCpy $R0 $R1 $1 $0    ; $R0 = :\lo

	end:
SectionEnd

Przykład (z poziomem błędów na wyjściu):

Section
	${WordFind} "[łańcuch znaków]" "[rozdzielnik]" "E[opcje]" $R0

	IfErrors 0 end
	StrCmp $R0 1 0 +2       ; Poziom błędów 1?
	MessageBox MB_OK 'rozdzielnik nie został znaleziony' IDOK end
	StrCmp $R0 2 0 +2       ; Poziom błędów 2?
	MessageBox MB_OK 'nie ma takiego numeru wyrazu' IDOK end
	StrCmp $R0 3 0 +2       ; Poziom błędów 3?
	MessageBox MB_OK 'błąd składni'

	end:
SectionEnd

Przykład (bez poziomu błędów na wyjściu):

Section
	${WordFind} "C:\io.sys C:\logo.sys" "_" "+1" $R0

	; $R0="C:\io.sys C:\logo.sys" (błąd: rozdzielnik "_" nie został znaleziony)
SectionEnd

Przykład (jeśli znaleziono):

Section
	${WordFind} "C:\io.sys C:\logo.sys" ":\lo" "E+1{" $R0

	IfErrors notfound found
	found:
	MessageBox MB_OK 'Znaleziono' IDOK end
	notfound:
	MessageBox MB_OK 'Nie znaleziono'

	end:
SectionEnd

Przykład (jeśli znaleziono 2):

Section
	${WordFind} "C:\io.sys C:\logo.sys" ":\lo" "+1{" $R0

	StrCmp $R0 "C:\io.sys C:\logo.sys" notfound found        ; błąd?
	found:
	MessageBox MB_OK 'Znaleziono' IDOK end
	notfound:
	MessageBox MB_OK 'Nie znaleziono'

	end:
SectionEnd

Przykład (akceptacja jednego wyrazu łańcucha znaków, jeśli rozdzielnik nie został znaleziony):

Section
	StrCpy $0 'OneWord'
	StrCpy $1 1

	loop:
	${WordFind} "$0" " " "E+$1" $R0
	IfErrors 0 code
	StrCmp $1$R0 11 0 error
	StrCpy $R0 $0
	goto end

	code:
	; ...
	IntOp $1 $1 + 1
	goto loop

	error:
	StrCpy $1 ''
	StrCpy $R0 ''

	end:
	; $R0="OneWord"
SectionEnd


E.3.3 WordFindS


  • Tak samo jak dla funkcji WordFind, ale rozróżniane są wielkości liter.


E.3.4 WordFind2X


  • Znajduje wyraz pomiędzy dwoma rozdzielnikami

Łańcuchy znaków:
"[rozdzielnik1][wyraz+1][rozdzielnik2][rozdzielnik1][wyraz+2][rozdzielnik2]..."
"[tekst][rozdzielnik1][tekst][rozdzielnik1][wyraz+1][rozdzielnik2][tekst]..."
"...[rozdzielnik1][wyraz - 2][rozdzielnik2][rozdzielnik1][wyraz-1][rozdzielnik2]"
"...[tekst][rozdzielnik1][tekst][rozdzielnik1][wyraz-1][rozdzielnik2][tekst]"

Składnia:

${WordFind2X} "[łańcuch znaków]" "[rozdzielnik1]" "[rozdzielnik2]" "[E][opcje]" $var
"[łańcuch znaków]"  ; [łańcuch znaków]
                               ;  Wejściowy łańcuch znaków
"[rozdzielnik1]"        ; [rozdzielnik1]
                               ;  Pierwszy rozdzielnik
"[rozdzielnik2]"        ; [rozdzielnik2]
                               ;  Drugi rozdzielnik
"[E][opcje]"             ; [opcje]
                               ;  +liczba   : numer wyrazu od początku
                               ;  -liczba   : numer wyrazu od końca
                               ;  +liczba}} : numer wyrazu od początku całej przestrzeni
                               ;              po tym wyrazie do wyjścia
                               ;  +liczba{{ : numer wyrazu od końca całej przestrzeni
                               ;              przed tym wyrazem do wyjścia
                               ;  +liczba{} : numer wyrazu od początku
                               ;              cała przestrzeń przed i po
                               ;              ten wyraz (wykluczenie wyrazu)
                               ;  +liczba*} : numer wyrazu od początku
                               ;              cała przestrzeń po
                               ;              wyraz do wyjścia z wyrazem
                               ;  +liczba{* : numer wyrazu od początku
                               ;              cała przestrzeń przed
                               ;              wyraz do wyjścia z wyrazem
                               ;  #         : suma wyrazów do wyjścia
                               ;  /word     : liczba wyrazów do wyjścia
                               ;
                               ; [E]
                               ;  Z poziomem błędów na wyjściu
                               ;  IfErrors:
                               ;     $var=1  nie znaleziono wyrazów
                               ;     $var=2  nie ma takiego numeru wyrazu
                               ;     $var=3  błąd składni (użyj: +1,-1,#)
                               ; []
                               ;  Brak poziomu błędów na wyjściu (domyślnie)
                               ;  Jeśli znaleziono jakieś błędy, to (wynik=wejściowy łańcuch znaków)
                               ;
$var                        ; Wyjście (wynik)

Przykład (1):

Section
	${WordFind2X} "[C:\io.sys];[C:\logo.sys];[C:\WINDOWS]" "[C:\" "];" "+2" $R0
	; $R0="logo.sys"
SectionEnd

Przykład (2):

Section
	${WordFind2X} "C:\WINDOWS C:\io.sys C:\logo.sys" "\" "." "-1" $R0
	; $R0="logo"
SectionEnd

Przykład (3):

Section
	${WordFind2X} "C:\WINDOWS C:\io.sys C:\logo.sys" "\" "." "-1{{" $R0
	; $R0="C:\WINDOWS C:\io.sys C:"
SectionEnd

Przykład (4):

Section
	${WordFind2X} "C:\WINDOWS C:\io.sys C:\logo.sys" "\" "." "-1{}" $R0
	; $R0="C:\WINDOWS C:\io.sys C:sys"
SectionEnd

Przykład (5):

Section
	${WordFind2X} "C:\WINDOWS C:\io.sys C:\logo.sys" "\" "." "-1{*" $R0
	; $R0="C:\WINDOWS C:\io.sys C:\logo."
SectionEnd

Przykład (6):

Section
	${WordFind2X} "C:\WINDOWS C:\io.sys C:\logo.sys" "\" "." "/logo" $R0
	; $R0="2"
SectionEnd

Przykład (z poziomem błędów na wyjściu):

Section
	${WordFind2X} "[io.sys];[C:\logo.sys]" "\" "];" "E+1" $R0
	; $R0="1" ("\...];" nie został znaleziony)

	IfErrors 0 noerrors
	MessageBox MB_OK 'Poziom błędów=$R0' IDOK end

	noerrors:
	MessageBox MB_OK 'Brak błędów'

	end:
SectionEnd


E.3.5 WordFind2XS


  • Tak samo jak dla funkcji WordFind2X, ale rozróżniane są wielkości liter.


E.3.6 WordFind3X


  • Znajduje wyraz w łańcuchu znaków, pomiędzy dwoma rozdzielnikami.

Składnia:

${WordFind3X} "[łańcuch znaków]" "[rozdzielnik1]" "[środek]" "[rozdzielnik2]" "[E][opcje]" $var
"[łańcuch znaków]"  ; [łańcuch znaków]
                               ; Wejściowy łańcuch znaków
"[rozdzielnik1]"        ; [rozdzielnik1]
                               ; Pierwszy rozdzielnik
"[środek]"                ; [środek]
                               ; Środkowy łańcuch znaków
"[rozdzielnik2]"        ; [rozdzielnik2]
                               ; Drugi rozdzielnik
"[E][opcje]"             ; [opcje]
                               ;  +liczba   : numer wyrazu od początku
                               ;  -liczba   : numer wyrazu od końca
                               ;  +liczba}} : numer wyrazu od początku całej przestrzeni
                               ;              po tym wyrazie do wyjścia
                               ;  +liczba{{ : numer wyrazu od końca całej przestrzeni
                               ;              przed tym wyrazem do wyjścia
                               ;  +liczba{} : numer wyrazu od początku
                               ;              cała przestrzeń przed i po
                               ;              ten wyraz (wykluczenie wyrazu)
                               ;  +liczba*} : numer wyrazu od początku
                               ;              cała przestrzeń po
                               ;              wyraz do wyjścia z wyrazem
                               ;  +liczba{* : numer wyrazu od początku
                               ;              cała przestrzeń przed
                               ;              wyraz do wyjścia z wyrazem
                               ;  #         : suma wyrazów do wyjścia
                               ;  /word     : liczba wyrazów do wyjścia
                               ;
                               ; [E]
                               ;  z poziomem błędów na wyjściu
                               ;  IfErrors:
                               ;     $var=1  nie znaleziono wyrazów
                               ;     $var=2  nie ma takiego numeru wyrazu
                               ;     $var=3  błąd składni (użyj: +1,-1,#)
                               ; []
                               ;  Brak poziomu błędów na wyjściu (domyślnie)
                               ;  Jeśli znaleziono jakieś błędy, to (wynik=wejściowy łańcuch znaków)
                               ;
$var               	       ; Wyjście (wynik)

Przykład (1):

Section
	${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "AA" "];" "+1" $R0
	; $R0="1.AAB"
SectionEnd

Przykład (2):

Section
	${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "AA" "];" "-1" $R0
	; $R0="2.BAA"
SectionEnd

Przykład (3):

Section
	${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "AA" "];" "-1{{" $R0
	; $R0="[1.AAB];"
SectionEnd

Przykład (4):

Section
	${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "AA" "];" "-1{}" $R0
	; $R0="[1.AAB];[3.BBB];"
SectionEnd

Przykład (5):

Section
	${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "AA" "];" "-1{*" $R0
	; $R0="[1.AAB];[2.BAA];"
SectionEnd

Przykład (6):

Section
	${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "AA" "];" "/2.BAA" $R0
	; $R0="2"
SectionEnd

Przykład (z poziomem błędów na wyjściu):

Section
	${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "XX" "];" "E+1" $R0
	; $R0="1" ("[...XX...];" nie znaleziono)

	IfErrors 0 noerrors
	MessageBox MB_OK 'Poziom błędów=$R0' IDOK end

	noerrors:
	MessageBox MB_OK 'Brak błędów'

	end:
SectionEnd


E.3.7 WordFind3XS


  • Tak samo jak dla funkcji WordFind3X, ale rozróżniane są wielkości znaków.


E.3.8 WordReplace


  • Zamienia lub usuwa wyraz z łańcucha znaków.

Składnia:

${WordReplace} "[łańcuch znaków]" "[wyraz1]" "[wyraz2]" "[E][opcje]" $var
"[łańcuch znaków]"  ; [łańcuch znaków]
                               ; Wejściowy łańcuch znaków
"[wyraz1]"               ; [wyraz1]
                               ; Wyraz do zamiany lub usunięcia
"[wyraz2]"               ; [wyraz2]
                               ; Zamieniany wyraz (jeśli pusty, kasowany)
"[E][opcje]"             ; [opcje]
                               ;  +liczba  : Ilość znaków wyrazu od początku
                               ;  -liczba  : Ilość znaków wyrazu od końca
                               ;  +liczba* : Ilość znaków wyrazu od początku zamiana wielokrotna
                               ;  -liczba* : Ilość znaków wyrazu od końca zamiana wielokrotna
                               ;  +        : Zamienia wszystkie wyniki
                               ;  +*       : Zamienia wielokrotnie wszystkie wyniki
                               ;  {        : Jeśli istnieją zamienia wszystkie rozdzielniki
                               ;             od lewej strony
                               ;  }        : Jeśli istnieją zamienia wszystkie rozdzielniki
                               ;             od prawej strony
                               ;  {}       : Jeśli istnieją zamienia wszystkie rozdzielniki
                               ;             po obu stronach
                               ;  {*       : Jeśli istnieją wielokrotnie zamienia wszystkie
                               ;             rozdzielniki od lewej strony
                               ;  }*       : Jeśli istnieją wielokrotnie zamienia wszystkie
                               ;             rozdzielniki od prawej strony
                               ;  {}*      : Jeśli istnieją wielokrotnie zamienia wszystkie
                               ;             rozdzielniki po obu stronach
                               ;
                               ; [E]
                               ;  Z poziomem błędów na wyjściu
                               ;  IfErrors:
                               ;     $var=1  wyraz do zastąpienia nie został znaleziony
                               ;     $var=2  brak takiego numeru wyrazu
                               ;     $var=3  błąd składni (użyj: +1,-1,+1*,-1*,+,+*,{},{}*)
                               ; []
                               ;  Brak poziomu błędów na wyjściu (domyślnie)
                               ;  Jeśli znaleziono jakieś błędy to (wynik=wejściowy łańcuch znaków)
                               ;
$var                        ; Wyjście (wynik)

Przykład (zamiana):

Section
	${WordReplace} "C:\io.sys C:\logo.sys C:\WINDOWS" "SYS" "bmp" "+2" $R0
	; $R0="C:\io.sys C:\logo.bmp C:\WINDOWS"
SectionEnd

Przykład (usuwanie):

Section
	${WordReplace} "C:\io.sys C:\logo.sys C:\WINDOWS" "SYS" "" "+" $R0
	; $R0="C:\io. C:\logo. C:\WINDOWS"
SectionEnd

Przykład (wielokrotna zamiana 1):

Section
	${WordReplace} "C:\io.sys      C:\logo.sys   C:\WINDOWS" " " " " "+1*" $R0
	; +1* lub +2* lub +3* lub +4* lub +5* lub +6*
	; $R0="C:\io.sys C:\logo.sys   C:\WINDOWS"
SectionEnd

Przykład (wielokrotna zamiana 2):

Section
	${WordReplace} "C:\io.sys C:\logo.sysSYSsys C:\WINDOWS" "sys" "bmp" "+*" $R0
	; $R0="C:\io.bmp C:\logo.bmp C:\WINDOWS"
SectionEnd

Przykład (wielokrotna zamiana 3):

Section
	${WordReplace} "sysSYSsysC:\io.sys C:\logo.sys C:\WINDOWSsysSYSsys" "sys" "|" "{}*" $R0
	; $R0="|C:\io.sys C:\logo.sys C:\WINDOWS|"
SectionEnd

Przykład (z poziomem błędów na wyjściu):

Section
	${WordReplace} "C:\io.sys C:\logo.sys" "sys" "bmp" "E+3" $R0
	; $R0="2" (brak takiego numeru wyrazu "+3")

	IfErrors 0 noerrors
	MessageBox MB_OK 'Poziom błędów=$R0' IDOK end

	noerrors:
	MessageBox MB_OK 'Brak błędów'

	end:
SectionEnd


E.3.9 WordReplaceS


  • Tak samo jak dla funkcji WordReplace, ale rozróżniane są wielkości znaków.


E.3.10 WordAdd


  • Dodaje wyrazy do łańcucha znaków1 z łańcucha znaków2, jeśli nie istnieją lub usuwa wyrazy, jeśli te istnieją.

Składnia:

${WordAdd} "[łańcuch znaków1]" "[rozdzielnik]" "[E][opcje]" $var
"[łańcuch znaków1]"  ; [łańcuch znaków1]
                                 ; Łańcuch znaków do dodania lub usunięcia
"[rozdzielnik]"      	 ; [rozdzielnik]
                                 ; Jeden lub kilka symboli rozdzielających
"[E][opcje]"               ; [opcje]
                                 ;  +łańcuch znaków2 : wyrazy do dodania
                                 ;  -łańcuch znaków2 : wyrazy do usunięcia
                                 ;
                                 ; [E]
                                 ;  Z poziomem błędów na wyjściu
                                 ;  IfErrors:
                                 ;     $var=1  rozdzielnik jest pusty
                                 ;     $var=3  błąd składni (użyj: +text,-text)
                                 ; []
                                 ;  Bez poziomu błędów na wyjściu (domyślnie)
                                 ;  Jeśli znaleziono błędy, to (wynik=wejściowy łańcuch znaków)
                                 ;
$var                          ; Wyjście (wynik)

Przykład (dodawanie):

Section
	${WordAdd} "C:\io.sys C:\WINDOWS" " " "+C:\WINDOWS C:\config.sys" $R0
	; $R0="C:\io.sys C:\WINDOWS C:\config.sys"
SectionEnd

Przykład (usuwanie):

Section
	${WordAdd} "C:\io.sys C:\logo.sys C:\WINDOWS" " " \
                                   "-C:\WINDOWS C:\config.sys C:\IO.SYS" $R0
	; $R0="C:\logo.sys"
SectionEnd

Przykład (dodanie do jednego):

Section
	${WordAdd} "C:\io.sys" " " "+C:\WINDOWS C:\config.sys C:\IO.SYS" $R0
	; $R0="C:\io.sys C:\WINDOWS C:\config.sys"
SectionEnd

Przykład (usunięcie jednego):

Section
	${WordAdd} "C:\io.sys C:\logo.sys C:\WINDOWS" " " "-C:\WINDOWS" $R0
	; $R0="C:\io.sys C:\logo.sys"
SectionEnd

Przykład (nie znaleziono nowych wyrazów):

Section
	${WordAdd} "C:\io.sys C:\logo.sys" " " "+C:\logo.sys" $R0
	StrCmp $R0 "C:\io.sys C:\logo.sys" 0 +2
	MessageBox MB_OK "Nie znaleziono żadnych nowych wyrazów do dodania"
SectionEnd

Przykład (nie usunięto wyrazów):

Section
	${WordAdd} "C:\io.sys C:\logo.sys" " " "-C:\config.sys" $R0
	StrCmp $R0 "C:\io.sys C:\logo.sys" 0 +2
	MessageBox MB_OK "Nie znaleziono żadnych wyrazów do usunięcia"
SectionEnd

Przykład (z poziomem błędów na wyjściu):

Section
	${WordAdd} "C:\io.sys C:\logo.sys" "" "E-C:\logo.sys" $R0
	; $R0="1" (rozdzielnik jest pusty "")

	IfErrors 0 noerrors
	MessageBox MB_OK 'Poziom błędów=$R0' IDOK end

	noerrors:
	MessageBox MB_OK 'Brak błędów'

	end:
SectionEnd


E.3.11 WordAddS


  • Tak samo jak dla funkcji WordAdd, ale rozróżniane są wielkości liter.


E.3.12 WordInsert


  • Wstawia wyraz do łańcucha znaków.

Składnia:

${WordInsert} "[łańcuch znaków]" "[rozdzielnik]" "[wyraz]" "[E][opcje]" $var
"[łańcuch znaków]"  ; [łańcuch znaków]
                               ; Wejściowy łańcuch znaków
"[rozdzielnik]"          ; [rozdzielnik]
                               ; Jeden lub kilka symboli rozdzielających
"[wyraz]"                 ; [wyraz]
                               ; Wyraz do wstawienia
"[E][opcje]"             ; [opcje]
                               ;  +liczba  : ilość liter od początku
                               ;  -liczba  : ilość liter od końca
                               ;
                               ; [E]
                               ;  Z poziomami błędów na wyjściu
                               ;  IfErrors:
                               ;     $var=1  rozdzielnik jest pusty
                               ;     $var=2  nieprawidłowy numer litery
                               ;     $var=3  błąd składni (użyj: +1,-1)
                               ; []
                               ;  Wyjście bez poziomu błędów (domyślnie)
                               ;  Jeśli znaleziono jakieś błędy to (wynik=wejściowy łańcuch znaków)
                               ;
$var                        ; Wyjście (wynik)

Przykład (1):

Section
	${WordInsert} "C:\io.sys C:\WINDOWS" " " "C:\logo.sys" " - 2" $R0
	; $R0="C:\io.sys C:\logo.sys C:\WINDOWS"
SectionEnd

Przykład (2):

Section
	${WordInsert} "C:\io.sys" " " "C:\WINDOWS" "+2" $R0
	; $R0="C:\io.sys C:\WINDOWS"
SectionEnd

Przykład (3):

Section
	${WordInsert} "" " " "C:\WINDOWS" "+1" $R0
	; $R0="C:\WINDOWS "
SectionEnd

Przykład (z poziomem błędów na wyjściu):

Section
	${WordInsert} "C:\io.sys C:\logo.sys" " " "C:\logo.sys" "E+4" $R0
	; $R0="2" (błędny numer litery "+4")

	IfErrors 0 noerrors
	MessageBox MB_OK 'Poziom błędów=$R0' IDOK end

	noerrors:
	MessageBox MB_OK 'Brak błędów'

	end:
SectionEnd


E.3.13 WordInsertS


  • Tak samo jak dla funkcji WordInsert, ale rozróżniane są wielkości liter.


E.3.14 StrFilter


  • Konwertuje łańcuch znaków na małe lub wielkie litery.
  • Ustawia filtr symbolu.

Składnia:

${StrFilter} "[łańcuch znaków]" "[opcje]" "[symbole1]" "[symbole2]" $var
"[łańcuch znaków]"  ; [łańcuch znaków]
                               ;  Wejściowy łańcuch znaków
                               ;
"[opcje]"                  ;  [+|-][1|2|3|12|23|31][eng|rus]
                               ;  +   : Konwertuje łańcuch znaków na wielkie litery
                               ;  -   : Konwertuje łańcuch znaków na małe litery
                               ;  1   : Tylko cyfry
                               ;  2   : tylko litery
                               ;  3   : Tylko znaki specjalne
                               ;  12  : Tylko cyfry + litery
                               ;  23  : Tylko litery + znaki specjalne
                               ;  31  : Tylko znaki specjalne + cyfry
                               ;  eng : Symbole angielskie (domyślnie)
                               ;  rus : Symbole rosyjskie
                               ;
"[symbole1]"           ; [symbole1]
                               ;  Symbole dołączane (niezmienialne)
                               ;
"[symbole2]"           ; [symbole2]
                               ; Symbole wykluczane
                               ;
$var                        ; Wyjście (wynik)
Uwaga:
  • - Gdy wystąpi błąd ustawiania jest flaga błędu
  • - Te same symbole do dołączenia & do wykluczenia = do wykluczenia

Przykład (wielkie litery (UpperCase)):

Section
	${StrFilter} "123abc 456DEF 7890|%#" "+" "" "" $R0
	; $R0="123ABC 456DEF 7890|%#"
SectionEnd

Przykład (małe litery (LowerCase)):

Section
	${StrFilter} "123abc 456DEF 7890|%#" "-" "ef" "" $R0
	; $R0="123abc 456dEF 7890|%#"
SectionEnd

Przykład (Filtr1):

Section
	${StrFilter} "123abc 456DEF 7890|%#" "2" "|%" "" $R0
	; $R0="abcDEF|%"      ;tylko litery + |%
SectionEnd

Przykład (Filtr2):

Section
	${StrFilter} "123abc 456DEF 7890|%#" "13" "af" "4590" $R0
	; $R0="123a 6F 78|%#" ;tylko cyfry + znaki specjalne + af - 4590
SectionEnd

Przykład (Filtr3):

Section
	${StrFilter} "123abc 456DEF 7890|%#" "+12" "b" "def" $R0
	; $R0="123AbC4567890" ;tylko cyfry + litery + b - def
SectionEnd

Przykład (Filtr4):

Section
	${StrFilter} "123abcÀÁÂ 456DEFãäå 7890|%#" "+12rus" "ä" "ãå" $R0
	; $R0="123ÀÁÂ456ä7890" ;tylko cyfry + litery + ä - ãå
SectionEnd

Przykład (Litery angielskie + rosyjskie):

Section
	${StrFilter} "123abcÀÁÂ 456DEFãäå 7890|%#" "2rus" "" "" $R0
	; $R0="ÀÁÂãäå"       ;tylko litery rosyjskie
	${StrFilter} "123abcÀÁÂ 456DEFãäå 7890|%#" "2" "$R0" "" $R0
	; $R0="abcÀÁÂDEFãäå" ;tylko litery angielskie + rosyjskie
SectionEnd

Przykład (zmiana wielkości liter wyrazów):

Section
	Push "_01-PERPETUOUS_DREAMER__-__THE_SOUND_OF_GOODBYE_(ORIG._MIX).MP3_"
	Call Capitalize
	Pop $R0
	; $R0="_01-Perpetuous_Dreamer__-__The_Sound_Of_Goodbye_(Orig._Mix).mp3_"

	${WordReplace} "$R0" "_" " " "+*" $R0
	; $R0=" 01-Perpetuous Dreamer - The Sound Of Goodbye (Orig. Mix).mp3 "

	${WordReplace} "$R0" " " "" "{}" $R0
	; $R0="01-Perpetuous Dreamer - The Sound Of Goodbye (Orig. Mix).mp3"
SectionEnd

Function Capitalize
	Exch $R0
	Push $0
	Push $1
	Push $2

	${StrFilter} '$R0' '-eng' '' '' $R0
	${StrFilter} '$R0' '-rus' '' '' $R0

	StrCpy $0 0

	loop:
	IntOp $0 $0 + 1
	StrCpy $1 $R0 1 $0
	StrCmp $1 '' end
	StrCmp $1 ' ' +5
	StrCmp $1 '_' +4
	StrCmp $1 '-' +3
	StrCmp $1 '(' +2
	StrCmp $1 '[' 0 loop
	IntOp $0 $0 + 1
	StrCpy $1 $R0 1 $0
	StrCmp $1 '' end

	${StrFilter} '$1' '+eng' '' '' $1
	${StrFilter} '$1' '+rus' '' '' $1

	StrCpy $2 $R0 $0
	IntOp $0 $0 + 1
	StrCpy $R0 $R0 '' $0
	IntOp $0 $0 - 2
	StrCpy $R0 '$2$1$R0'
	goto loop

	end:
	Pop $2
	Pop $1
	Pop $0
	Exch $R0
FunctionEnd


E.3.15 StrFilterS


  • Tak samo jak dla funkcji StrFilter, ale rozróżniane są wielkości liter.


E.3.16 VersionCompare


  • Porównuje numery wersji.

Składnia:

${VersionCompare} "[Wersja1]" "[Wersja2]" $var
"[Wersja1]"        ; Pierwsza wersja
"[Wersja2]"        ; Druga wersja
$var                   ; Wynik:
                          ;    $var=0  Wersje są takie same
                          ;    $var=1  Wersja1 jest nowsza
                          ;    $var=2  Wersja2 jest nowsza

Przykład:

Section
	${VersionCompare} "1.1.1.9" "1.1.1.01" $R0
	; $R0="1"
SectionEnd


E.3.17 VersionConvert


  • Konwertuje wersje w formacie numerycznym, które mogą być porównywane.

Składnia:

${VersionConvert} "[Wersja]" "[Lista znaków]" $var
"[Wersja]"            ; Wersja
			    ;
"[Lista znaków]"   ; Lista znaków, które zostaną zamienione przez liczby
                            ; "abcdefghijklmnopqrstuvwxyz" (domyślne)
                            ;
$var                      ; Wynik: skonwertowana wersja
Uwaga:
  • - Skonwertowane litery są rozdzielone kropką
  • - Jeśli znak nie jest cyfrą i nie znajduje się na liście zostanie zamieniony na kropkę

Przykład1:

Section
	${VersionConvert} "9.0a" "" $R0
	; $R0="9.0.01"

	${VersionConvert} "9.0c" "" $R1
	; $R1="9.0.03"

	${VersionCompare} "$R0" "$R1" $R2
	; $R2="2"   wersja2 jest nowsza
SectionEnd

Przykład2:

Section
	${VersionConvert} "0.15c-9m" "" $R0
	; $R0="0.15.03.9.13"

	${VersionConvert} "0.15c-1n" "" $R1
	; $R1="0.15.03.1.14"

	${VersionCompare} "$R0" "$R1" $R2
	; $R2="1"   wersja1 jest nowsza
SectionEnd

Przykład3:

Section
	${VersionConvert} "0.15c+" "abcdefghijklmnopqrstuvwxyz+" $R0
	; $R0="0.15.0327"

	${VersionConvert} "0.15c" "abcdefghijklmnopqrstuvwxyz+" $R1
	; $R1="0.15.03"

	${VersionCompare} "$R0" "$R1" $R2
	; $R2="1"   wersja1 jest nowsza
SectionEnd