Get parent directory: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
m (Updated author and download links, and changed format of some pages.)
m (Less shitty)
 
(3 intermediate revisions by one other user not shown)
Line 1: Line 1:
{{PageAuthor|sunjammer}}
== Description ==
== Description ==
This function gets the parent folder of a file or subfolder. The result is given without the last "\" (backslash). When a parent is not found, it preserves the path.
This function gets the parent folder of a file or subfolder. The result is given without the last "\" (backslash). When a parent is not found, it preserves the path.
Line 4: Line 6:
== The Script ==
== The Script ==
<highlight-nsis> ; GetParent
<highlight-nsis> ; GetParent
  ; input, top of stack  (e.g. C:\Program Files\Poop)
  ; input, top of stack  (e.g. C:\Program Files\Foo)
  ; output, top of stack (replaces, with e.g. C:\Program Files)
  ; output, top of stack (replaces, with e.g. C:\Program Files)
  ; modifies no other variables.
  ; modifies no other variables.
Line 42: Line 44:
</highlight-nsis>
</highlight-nsis>


Page author: [[User:sunjammer|sunjammer]]
[[Category:Disk, Path & File Functions]]

Latest revision as of 15:32, 8 June 2017

Author: sunjammer (talk, contrib)


Description

This function gets the parent folder of a file or subfolder. The result is given without the last "\" (backslash). When a parent is not found, it preserves the path.

The Script

 ; GetParent
 ; input, top of stack  (e.g. C:\Program Files\Foo)
 ; output, top of stack (replaces, with e.g. C:\Program Files)
 ; modifies no other variables.
 ;
 ; Usage:
 ;   Push "C:\Program Files\Directory\Whatever"
 ;   Call GetParent
 ;   Pop $R0
 ;   ; at this point $R0 will equal "C:\Program Files\Directory"
 
Function GetParent
 
  Exch $R0
  Push $R1
  Push $R2
  Push $R3
 
  StrCpy $R1 0
  StrLen $R2 $R0
 
  loop:
    IntOp $R1 $R1 + 1
    IntCmp $R1 $R2 get 0 get
    StrCpy $R3 $R0 1 -$R1
    StrCmp $R3 "\" get
  Goto loop
 
  get:
    StrCpy $R0 $R0 -$R1
 
    Pop $R3
    Pop $R2
    Pop $R1
    Exch $R0
 
FunctionEnd