Poprzedni | Spis treści | Następny

Dodatek E: Użyteczne Nagłówki


E.1 Nagłówek Funkcji Pliku

E.1.1 Wprowadzenie

Dołączenie pliku nagłówkowego:

!include "FileFunc.nsh"

Dołączenie funkcji "GetFileExt" dla instalatora oraz "GetParent" dla deinstalatora:

!insertmacro GetFileExt
!insertmacro un.GetParent

Wywołanie funkcji:

Section Install
     ${GetFileExt} "C:\Pobrane Elementy\Index.html" $R0
     ; $R0="html"
SectionEnd
Section un.Install
     ${un.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=[mask]
              ;     /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  - Lkoalizuje 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 para,etrem /S=)

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

	Push $var    ; Jeśli $var="StopLocate" To wyjście z funkcji
FunctionEnd

Uwaga:
- Flaga błędu, jeśli katalog lub dysk nie istnieją
- 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
	StrCmp $R0$R0 $R9
	; $R0="C:\ftp\files\RPC DCOM.rar"

	MessageBox MB_YESNO '$R0$\n$\nSzukać kolejnego?' IDYES +2
	StrCmp $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
	Pop $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
	StrCmp $R2 0
	StrCmp $R3 0

	loop:
	StrCmp $R1 0
	${Locate} "C:\ftp" "/L=DE" "Przyklad4"
	IntOp $R3 $R3 + 1
	IntOp $R2 $R2 + $R1
	Pop $R0 StopLocate +2
	Pop $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:
	StrCmp $R0 StopLocate

	end:
	Push $R0
FunctionEnd

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

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

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

	IfErrors 0 +2
	MessageBox MB_OK 'Błąd' IDOK +4
	Pop $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
	Pop $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
	StrCmp $R0 "C:\ftp"  ;Katalog, z którego kopiujemy pliki
	StrCmp $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"'    ;zobacz log
SectionEnd

Function Przyklad6
	StrCmp $1 $R8 '' $R2

	Pop $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
	StrCmp $R0 "C:\ftp"    ;Pobierana Struktura Katalogów
	StrCmp $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
	StrCmp $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" "Przykład8"
	nxs::Destroy
SectionEnd

Function Przykład8
	Pop $R0 $R8 abortcheck
	StrCmp $R0 $R8
	nxs::Update /NOUNLOAD /sub "$R8" /pos 78 /end

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

	Pop $R9 '' end
	;...

	end:
	Push $0
FunctionEnd

E.1.3 GetSize

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

Składnia:

${GetSize} "[Ścieżka Dostępu]" "[Opcje]" $var1 $var2 $var3
"[Ścieżka Dostępu]"      ; 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:
- Flaga błędu jeśli dysk lub katalog nie istnieje
- Flaga błędu jeśli błąd składni
- Zobacz także 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 sumę plików i katalogów "C:\WINDOWS" (bez podkatalogów)

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

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

E.1.4 DriveSpace

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

Składnia:

${DriveSpace} "[Napęd]" "[Opcje]" $var
"[Napęd]"     ; Dysk do sprawdznia
              ;
"[Opcje]"   ; /D=[T|O|F]
              ;     /D=T  - Całkowita przestrzeń (domyślnie)
              ;     /D=O  - Zajeta 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:
- Flaga błędu jeśli dysk nie istnieje lub nie jest gotowy
- Flaga błędu jeśli błąd składni

Przykład:

Section
	${DriveSpace} "C:\" "/D=F /S=M" $R0
	; $R0="2530"   wolnych megabajtów 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    Napedy 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" "Przykład1"
SectionEnd

Function Przykład1
	MessageBox MB_OK "$9  (Napęd $8)"

	Push $0
FunctionEnd

Przykład2:

Section
	${GetDrives} "ALL" "Przykład2"
SectionEnd

Function Przykład2
	MessageBox MB_OK "$9  (Napęd $8)"

	Push $0
FunctionEnd

Przykład3 (Pobiera typ napędu):

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

	${GetDrives} "ALL" "Przykład3"

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

Function Przykład3
	Pop $9 $R0 0 +3
	StrCmp $R1 $8
	StrCmp $0 StopGetDrives

	Push $0
FunctionEnd

E.1.6 GetTime

  • Pobiera czas lokalny lub systemowy.
  • Pobiera czas pliku (dostęp, tworzenie oraz modyfikacja).

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:
- Flaga błędu jeśli plik nie istnieje
- Flaga błędu jeśli błąd składni
- 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

	Pop $4 0 0 +3
	StrCmp $4 12
	goto +3
	Pop $4 12 +5
	IntCmp $4 12 0 0 +3
	StrCmp $7 AM
	goto +3
	IntOp $4 $4 - 12
	StrCmp $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:
- 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:
- Flaga błędu jeśli plik nie istnieje
- 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:
- Flaga błędu jeśli opcja nie została znaleziona
- Pierwszym symbolem opcji jest rozdzielnik

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"
!insertmacro Locate

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

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

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

	end:
	Push $0
FunctionEnd

Przykład (Wtyczka NxS):

!include "FileFunc.nsh"
!insertmacro Locate

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
	Pop $R0 $R8 abortcheck
	StrCmp $R0 $R8
	${BannerTrimPath} "$R8" "55A" $R8
	nxs::Update /NOUNLOAD /sub "$R8" /pos 78 /end

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

	Pop $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ę funkcę, 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 Nagłówek Funkcji Tekstu

E.2.1 Wprowadzenie

Dołączenie pliku nagłówkowego:

!include "TextFunc.nsh"

Dołączenie funkcji "LineRead" do instalacji oraz "TrimNewLines" do deinstalacji:

!insertmacro LineRead
!insertmacro un.TrimNewLines

Wywoływanie funkcji:

Section Instalacja
	${LineRead} "C:\a.log" "-1" $R0
	; $R0="Ostatnia Linia$\r$\n"
SectionEnd
Section un.Instalacja
	${un.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ą 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 poczatku
                  ;   -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 jeśli "/NUL")
FunctionEnd

Uwaga:
- Flaga błędu jeśli plik wejściowy nie istnieje
- 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" "Przykład1"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd

Function Przykład1
	${TrimNewLines} '$R9' $R9
	StrCmp $R9 $R9 '' 2
	StrCmp $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}" "Przykład2"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd

Function Przykład2
	${TrimNewLines} '$R9' $R9
	StrCmp $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" "Przykład3"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd

Function Przykład3
	StrCmp $0 SkipWrite

	Push $0
FunctionEnd

Przykład4 (wstawia linie):

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

Function Przykład4
	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"
!insertmacro WordReplace

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

Function Przykład5
	StrCmp $1 $R9

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

	Pop $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" "" "Przykład6"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd" IDOK +2
	MessageBox MB_OK "Przetworzone linie=$R1:$R2"
SectionEnd

Function Przykład6
	;(Obcina linie od linii do innej linii (również tę linię))
	Pop $R0 finish stop
	Pop $R0 start finish
	Pop $R9 'Początkowa Linia$\r$\n' 0 skip
	StrCmp $R0 start
	StrCmp $R1 $R8
	goto code
	finish:
	Pop $R9 'Końcowa Linia$\r$\n' 0 code
	StrCmp $R0 finish
	StrCmp $R2 $R8
	goto code
	skip:
	StrCmp $0 SkipWrite
	goto output
	stop:
	StrCmp $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" "Przykład7"
	IfErrors 0 +2
	MessageBox MB_OK "Błąd"
SectionEnd

Function Przykład7
	MessageBox MB_OKCANCEL '$$R9  "Linia"=[$R9]$\n$$R8     "#" =[$R8]' IDOK +2
	StrCmp $0 StopLineFind

	Push $0
FunctionEnd

E.2.3 LineRead

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

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:
- Flaga błędu jeśli plik wejściowy nie istnieje
- 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 lini.

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:
- Flaga błędu jeśli plik wejściowy nie istnieje

Przykład1:

Section
	${FileReadFromEnd} "C:\a.log" "Przykład1"

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

Function Przykład1
	MessageBox MB_OKCANCEL '"Linia"=[$9]$\n   "#"=[$8]$\n  "-#"=[$7]' IDOK +2
	StrCmp $0 StopFileReadFromEnd

	Push $0
FunctionEnd

Przykład2 (Odwraca plik tekstowy):

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

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

Function Przykład2
	Pop $7 -1 0 +5
	StrCmp $1 $9 1 -1
	Pop $1 '$\n' +3
	Pop $1 '$\r' +2
	StrCmp $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:
- 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:
- Flaga błędu jeśli wejściowe pliki nie istnieją
- 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 lini 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:
- Flaga błędu jeśli Plik1 or Plik2 nie istnieją
- Flaga błędu jeśli błąd składni

Przykład (Różne lub Te same):

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

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

Function Przykład1
	StrCmp $R0 NotEqual
	StrCmp $0 StopTextCompare

	Push $0
FunctionEnd

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

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

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

	Exec "notepad.exe $R2"
FunctionEnd

Function Przykład2
	FileWrite $R3 '$8=$9'
	FileWrite $R3 '$6=$7$\r$\n'

	Push $0
FunctionEnd

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

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

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

	Exec "notepad.exe $R2"
FunctionEnd

Function Przykład3
	FileWrite $R3 '$8|$6=$9'

	Push $0
FunctionEnd

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

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

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

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

	Exec "notepad.exe $R2"

	end:
FunctionEnd

Function Przykład4
	FileWrite $R3 '$8=$9'

	Push $0
FunctionEnd

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

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

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

	Exec "notepad.exe $R2"
FunctionEnd

Function Przykład5
	FileWrite $R3 '$8|$6=$9'

	Push $0
FunctionEnd

Przykład (Pokazuje zmienne):

Section
	${TextCompare} "C:\1.txt" "C:\2.txt" "FastDiff" "Przykład6"

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

Function Przykład6
	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:
- Flaga błędu jeśli nie znaleziono wejścia
- 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:
- Flaga błędu jeśli plik nie istnieje
- 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:
- Flaga błędu, jeśli plik nie istnieje
- Flaga błędu, jeśli błąd składni

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 Nagłówek Funkcji Word

E.3.1 Wprowadzenie

Dołączenie pliku nagłówkowego:

!include "WordFunc.nsh"

Dołączenie funkcji "WordFind" do instalatora oraz "WordReplace" do deinstalatora:

!insertmacro WordFind
!insertmacro un.WordReplace

Wywoływanie funkcji:

Section Install
	${WordFind} "A--H---S" "-" "+2" $R0
	; $R0="H"
SectionEnd
Section un.Install
	${un.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 lib 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
	StrCmp $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
	Pop $R0 1 0 +2       ; errorlevel 1?
	MessageBox MB_OK 'rozdzielnik nie został znaleziony' IDOK end
	Pop $R0 2 0 +2       ; errorlevel 2?
	MessageBox MB_OK 'nie ma takiego numeru wyrazu' IDOK end
	Pop $R0 3 0 +2       ; errorlevel 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

	Pop $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
	StrCmp $0 'OneWord'
	StrCmp $1 1

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

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

	error:
	StrCmp $1 ''
	StrCmp $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]
                   ;  first rozdzielnik
"[rozdzielnik2]"     ;[rozdzielnik2]
                   ;  second 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
	Pop $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
	Pop $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 (nie zmienialne)
                ;
"[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

	StrCmp $0 0

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

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

	StrCmp $2 $R0 $0
	IntOp $0 $0 + 1
	StrCmp $R0 $R0 '' $0
	IntOp $0 $0 - 2
	StrCmp $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

Poprzedni | Spis treści | Następny

Ostatnia aktualizacja strony: Niedziela, 6 Września 2009 (16:05:39)
Copyright © 2002 - 2010 by Paweł Porwisz. Wszelkie prawa zastrzeżone.
Strona wygenerowana w 0.004s. Hosted by tox.pl
[Valid XHTML] [Valid CSS] [Valid RSS] [Opera] [BrowseHappy]