Get last directory path part: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
 
(2 intermediate revisions by the same user not shown)
Line 2: Line 2:


== Description ==
== Description ==
This script will get the last part of a directory path.
This script will get the last part of a string after a specified character. Useful to get file extensions, last file name or last directory part.


== Usage ==
== Usage ==
<highlight-nsis>
<highlight-nsis>
Push "C:\program files\geoffrey\files"
Push "C:\program files\geoffrey\files"
Call GetFileName
Push "\"
Call GetAfterChar
Pop $R0
Pop $R0
</highlight-nsis>
</highlight-nsis>


$R0 is now "files"
$R0 is now "files"
Push "." instead of "\" to get a file extension or perhaps "/" for URL.


You can also use this function to get the file extension of an entered file path.
The return value is empty "" if the input char was not found.
In the function replace...
:StrCmp $2 "\" exit
...with
:StrCmp $2 "." exit
 
The file extension (after the ".") will then be popped off the stack.


== The Function ==
== The Function ==

Latest revision as of 11:28, 7 September 2005

Author: Afrow UK (talk, contrib)


Description

This script will get the last part of a string after a specified character. Useful to get file extensions, last file name or last directory part.

Usage

Push "C:\program files\geoffrey\files"
Push "\"
Call GetAfterChar
Pop $R0

$R0 is now "files" Push "." instead of "\" to get a file extension or perhaps "/" for URL.

The return value is empty "" if the input char was not found.

The Function

Function GetAfterChar
  Exch $0 ; chop char
  Exch
  Exch $1 ; input string
  Push $2
  Push $3
  StrCpy $2 0
  loop:
    IntOp $2 $2 - 1
    StrCpy $3 $1 1 $2
    StrCmp $3 "" 0 +3
      StrCpy $0 ""
      Goto exit2
    StrCmp $3 $0 exit1
    Goto loop
  exit1:
    IntOp $2 $2 + 1
    StrCpy $0 $1 "" $2
  exit2:
    Pop $3
    Pop $2
    Pop $1
    Exch $0 ; output
FunctionEnd

Original written by KiCHiK (GetFileName) Modified for character input by me (GetAfterChar).

(I also wrote a similar script, but this one is better)

-Stu