<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://nsis.sourceforge.io/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Delete_files_and_subdirectories</id>
	<title>Delete files and subdirectories - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://nsis.sourceforge.io/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Delete_files_and_subdirectories"/>
	<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Delete_files_and_subdirectories&amp;action=history"/>
	<updated>2026-04-22T18:03:10Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Delete_files_and_subdirectories&amp;diff=7036&amp;oldid=prev</id>
		<title>StB at 09:32, 12 August 2005</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Delete_files_and_subdirectories&amp;diff=7036&amp;oldid=prev"/>
		<updated>2005-08-12T09:32:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{PageAuthor|StB}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
The macro &amp;quot;RemoveFilesAndSubDirs&amp;quot; works like &amp;quot;RMDir /r $BASE&amp;quot; but does not remove the $BASE directory itself. You can use this to keep start menu folders for upgrades (Windows XP may highlight new folders).&lt;br /&gt;
&lt;br /&gt;
Provided &amp;quot;as is&amp;quot; by [http://stefan.bertels.org/ stefan.bertels.org].&lt;br /&gt;
Use on your own risk. &lt;br /&gt;
Please [http://stefan.bertels.org/ report any bugs here].&lt;br /&gt;
&lt;br /&gt;
== The Script ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
; ################################################################&lt;br /&gt;
; appends \ to the path if missing&lt;br /&gt;
; example: !insertmacro GetCleanDir &amp;quot;c:\blabla&amp;quot;&lt;br /&gt;
; Pop $0 =&amp;gt; &amp;quot;c:\blabla\&amp;quot;&lt;br /&gt;
!macro GetCleanDir INPUTDIR&lt;br /&gt;
  ; ATTENTION: USE ON YOUR OWN RISK!&lt;br /&gt;
  ; Please report bugs here: http://stefan.bertels.org/&lt;br /&gt;
  !define Index_GetCleanDir &amp;#039;GetCleanDir_Line${__LINE__}&amp;#039;&lt;br /&gt;
  Push $R0&lt;br /&gt;
  Push $R1&lt;br /&gt;
  StrCpy $R0 &amp;quot;${INPUTDIR}&amp;quot;&lt;br /&gt;
  StrCmp $R0 &amp;quot;&amp;quot; ${Index_GetCleanDir}-finish&lt;br /&gt;
  StrCpy $R1 &amp;quot;$R0&amp;quot; &amp;quot;&amp;quot; -1&lt;br /&gt;
  StrCmp &amp;quot;$R1&amp;quot; &amp;quot;\&amp;quot; ${Index_GetCleanDir}-finish&lt;br /&gt;
  StrCpy $R0 &amp;quot;$R0\&amp;quot;&lt;br /&gt;
${Index_GetCleanDir}-finish:&lt;br /&gt;
  Pop $R1&lt;br /&gt;
  Exch $R0&lt;br /&gt;
  !undef Index_GetCleanDir&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
; ################################################################&lt;br /&gt;
; similar to &amp;quot;RMDIR /r DIRECTORY&amp;quot;, but does not remove DIRECTORY itself&lt;br /&gt;
; example: !insertmacro RemoveFilesAndSubDirs &amp;quot;$INSTDIR&amp;quot;&lt;br /&gt;
!macro RemoveFilesAndSubDirs DIRECTORY&lt;br /&gt;
  ; ATTENTION: USE ON YOUR OWN RISK!&lt;br /&gt;
  ; Please report bugs here: http://stefan.bertels.org/&lt;br /&gt;
  !define Index_RemoveFilesAndSubDirs &amp;#039;RemoveFilesAndSubDirs_${__LINE__}&amp;#039;&lt;br /&gt;
&lt;br /&gt;
  Push $R0&lt;br /&gt;
  Push $R1&lt;br /&gt;
  Push $R2&lt;br /&gt;
&lt;br /&gt;
  !insertmacro GetCleanDir &amp;quot;${DIRECTORY}&amp;quot;&lt;br /&gt;
  Pop $R2&lt;br /&gt;
  FindFirst $R0 $R1 &amp;quot;$R2*.*&amp;quot;&lt;br /&gt;
${Index_RemoveFilesAndSubDirs}-loop:&lt;br /&gt;
  StrCmp $R1 &amp;quot;&amp;quot; ${Index_RemoveFilesAndSubDirs}-done&lt;br /&gt;
  StrCmp $R1 &amp;quot;.&amp;quot; ${Index_RemoveFilesAndSubDirs}-next&lt;br /&gt;
  StrCmp $R1 &amp;quot;..&amp;quot; ${Index_RemoveFilesAndSubDirs}-next&lt;br /&gt;
  IfFileExists &amp;quot;$R2$R1\*.*&amp;quot; ${Index_RemoveFilesAndSubDirs}-directory&lt;br /&gt;
  ; file&lt;br /&gt;
  Delete &amp;quot;$R2$R1&amp;quot;&lt;br /&gt;
  goto ${Index_RemoveFilesAndSubDirs}-next&lt;br /&gt;
${Index_RemoveFilesAndSubDirs}-directory:&lt;br /&gt;
  ; directory&lt;br /&gt;
  RMDir /r &amp;quot;$R2$R1&amp;quot;&lt;br /&gt;
${Index_RemoveFilesAndSubDirs}-next:&lt;br /&gt;
  FindNext $R0 $R1&lt;br /&gt;
  Goto ${Index_RemoveFilesAndSubDirs}-loop&lt;br /&gt;
${Index_RemoveFilesAndSubDirs}-done:&lt;br /&gt;
  FindClose $R0&lt;br /&gt;
&lt;br /&gt;
  Pop $R2&lt;br /&gt;
  Pop $R1&lt;br /&gt;
  Pop $R0&lt;br /&gt;
  !undef Index_RemoveFilesAndSubDirs&lt;br /&gt;
!macroend&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
  !insertmacro RemoveFilesAndSubDirs &amp;quot;$SMPROGRAMS\${PROGRAM_NAME}\&amp;quot;&lt;br /&gt;
  ; this will empty that directory (but not delete it)&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Disk, Path &amp;amp; File Functions]]&lt;/div&gt;</summary>
		<author><name>StB</name></author>
	</entry>
</feed>