Poprzedni | Spis treści | Następny
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
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
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
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
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
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
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
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
Składnia:
${GetExeName} $var
Przykład:
Section ${GetExeName} $R0 ; $R0="C:\ftp\program.exe" SectionEnd
Składnia:
${GetExePath} $var
Przykład:
Section ${GetExePath} $R0 ; $R0="C:\ftp" SectionEnd
Składnia:
${GetParameters} $var
Przykład:
Section ${GetParameters} $R0 ; $R0="[parametry]" SectionEnd
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
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
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
Składnia:
${GetFileName} "[Ścieżka Dostępu]" $var
Przykład:
Section ${GetFileName} "C:\Program Files\Winamp\uninstwa.exe" $R0 ; $R0="uninstwa.exe" SectionEnd
Składnia:
${GetBaseName} "[Ścieżka Dostępu]" $var
Przykład:
Section ${GetBaseName} "C:\ftp\program.exe" $R0 ; $R0="program" SectionEnd
Składnia:
${GetFileExt} "[Ścieżka Dostępu]" $var
Przykład:
Section ${GetFileExt} "C:\ftp\program.exe" $R0 ; $R0="exe" SectionEnd
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
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
Składnia:
${RefreshShellIcons}
Przykład:
Section WriteRegStr HKCR "Winamp.File\DefaultIcon" "" "$PROGRAMFILES\Winamp\WINAMP.EXE,2" ${RefreshShellIcons} SectionEnd
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
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
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
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
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
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
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
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
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
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
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
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
Ł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
Ł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
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
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
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
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
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
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
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