Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ClaudioESSilva/12b1d90b64031cb0283bc36180439ede to your computer and use it in GitHub Desktop.
Save ClaudioESSilva/12b1d90b64031cb0283bc36180439ede to your computer and use it in GitHub Desktop.
Convert-FolderContentToMarkdownTableOfContents function
function Convert-FolderContentToMarkdownTableOfContents{
<#
.SYNOPSIS
Create a Table of Contents in markdown
.DESCRIPTION
This function can be used to generate a markdown file that contains a Table of Contents based on the contents of a folder
.PARAMETER BaseFolder
It’s the folder’s location on the disk
.PARAMETER BaseURL
to build the URL for each file. This will be added as a link
.PARAMETER FiletypeFilter
to filter the files on the folder
.EXAMPLE
Convert-FolderContentToMarkdownTableOfContents -BaseFolder "D:\Github\<module folder>" -BaseURL "https://github.com/<user>/<repository>/tree/master" -FiletypeFilter "*.md"
.NOTES
https://claudioessilva.eu/2017/09/18/generate-markdown-table-of-contents-based-on-files-within-a-folder-with-powershell/
#>
param (
[string]$BaseFolder,
[string]$BaseURL,
[string]$FiletypeFilter
)
$nl = [System.Environment]::NewLine
$TOC = "## Index$nl"
$repoFolderStructure = Get-ChildItem -Path $BaseFolder -Directory | Where-Object Name -NotMatch "\.github|\.git"
foreach ($dir in ($repoFolderStructure | Sort-Object -Property Name)) {
$repoStructure = Get-ChildItem -Path $dir.FullName -Filter $FiletypeFilter
$TOC += "* $($dir.Name) $nl"
foreach ($md in ($repoStructure | Sort-Object -Property Name)) {
$suffix = $($md.Directory.ToString().Replace($BaseFolder, [string]::Empty)).Replace("\", "/")
$fileName = $($md.Name.TrimEnd($md.Extension))
$TOC += " * [$fileName]($([uri]::EscapeUriString(""$baseURL$suffix/$($md.Name)"")))$nl"
}
}
return $TOC
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment