Windowsのtreeコマンドで、指定したフォルダー以下の構成図を作れます。
READMEへ貼る図はtree、Excelなどで並べ替えるファイル一覧はdirやCSVに分けて出力します。
対象を限定して構成図を表示する
ZIPは新しい空のフォルダーへ展開し、元データや既存の出力を含む場所へ重ねて展開しないでください。
ZIPのprojectにはREADME.mdと、日本語 資料/名前 ! & [x].txtが入っています。
コマンドプロンプトでZIPを展開した場所を開き、次のコマンドを実行します。
tree "project" /f /a/fはファイル名も表示し、/aは枝の線を半角の文字で表示する指定です。
ドライブ全体を指定すると関係のないファイルも含まれるため、対象のプロジェクトフォルダーに絞ります。
日本語をUTF-8のテキストへ保存する
今回のWindows環境では、chcp 65001の後でもtreeのリダイレクト結果はUTF-8になりませんでした。
tree-export.ps1はWindowsのOEMコードページで出力を読み、UTF-8(BOM付き)で保存します。
PS1はWindows PowerShell 5.1で使用し、UTF-8(BOM付き)で保存します。
以下の起動例はそのプロセスだけにRemoteSignedを指定し、PC全体の実行ポリシーは変更しません。
ダウンロードしたPS1の署名エラーでは内容と出所を確認し、信頼できる対象ファイルだけプロパティからブロックを解除します。
組織のポリシーで止まる場合は管理者へ確認してください。
param([Parameter(Mandatory=$true)][string]$Source,
[Parameter(Mandatory=$true)][string]$Output)
$ErrorActionPreference = 'Stop'
$item = Get-Item -LiteralPath $Source
if (-not $item.PSIsContainer) { throw 'Source must be a folder' }
$root = $item.FullName.TrimEnd('\')
$out = [IO.Path]::GetFullPath($Output)
if ($out -eq $root -or $out.StartsWith($root + '\', [StringComparison]::OrdinalIgnoreCase)) { throw 'Output must be outside Source' }
if (Test-Path -LiteralPath $out) { throw 'Output already exists' }
# tree.com writes in the Windows OEM code page, irrespective of chcp 65001.
Add-Type -TypeDefinition 'public class CgmOem { [System.Runtime.InteropServices.DllImport("kernel32.dll")] public static extern uint GetOEMCP(); }'
$savedEncoding = [Console]::OutputEncoding
try {
[Console]::OutputEncoding = [Text.Encoding]::GetEncoding([int][CgmOem]::GetOEMCP())
$lines = @(& "$env:SystemRoot\System32\tree.com" $root /f /a)
if ($LASTEXITCODE -ne 0) { throw 'tree failed' }
} finally { [Console]::OutputEncoding = $savedEncoding }
$lines | Out-File -LiteralPath $out -Encoding UTF8 -NoClobber
ZIPのlists.batは構成図とファイル一覧をまとめて出力します。
@echo off
setlocal DisableDelayedExpansion
chcp 65001 >nul
pushd "%~dp0" || exit /b 1
if not exist "project\" exit /b 1
if exist "tree-list.txt" exit /b 1
if exist "file-list.txt" exit /b 1
powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File "%~dp0tree-export.ps1" -Source "%~dp0project" -Output "%~dp0tree-list.txt"
if errorlevel 1 exit /b 1
dir "project" /s /b /a-d /o:n > "file-list.txt"
if errorlevel 1 exit /b 1
popd
- 新しい練習フォルダーでlists.batを実行する
- tree-list.txtに日本語のファイル名と半角の枝が出ていることを確認する
- file-list.txtにファイルのフルパスが1行ずつ出ていることを確認する
出力はprojectの外に置くため、一覧そのものが対象へ混ざりません。
dirの/sは下位フォルダーも対象にし、/bは説明を省略し、/a-dはフォルダーを除外します。
tree-list.txtまたはfile-list.txtがある場合は停止し、既存の結果を上書きしません。
表計算で使うCSVとREADMEへの貼り付け
パス・名前・拡張子・バイト数を列に分ける場合は、ZIPのinventory.ps1を使います。
powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File ".\inventory.ps1" -Source ".\project" -Output ".\files.csv"files.csvはUTF-8(BOM付き)で、名前にカンマがある場合もCSVの引用符で列を保持します。
スクリプトの全文と画像サイズを加える例は、ファイル情報をCSVへ出す記事に掲載しています。
READMEへ構成図を貼る場合はtree-list.txtから対象フォルダー以下の行を選び、Markdownのコード枠で囲みます。
ボリューム情報や公開したくないフォルダー名は、共有する前に出力から取り除いてください。
旧記事のexTree.vbsは配布元を確認できないため案内を終了し、Windows標準のtreeとdirに更新しました。
あなたはどっち?利用環境に合わせた最適プラン判定フロー
目的から順に当てはめると、使うコマンドと出力の形式が決まります。
2026年10月2日にWindows CMDとPowerShell 5.1で確認した内容と、Microsoftのtree・dirの仕様にもとづく目安です。
- まず、READMEに貼る構成図が目的か、表計算で並べ替える一覧が目的かを決める。構成図はtree、並べ替えるファイル一覧はdirやCSVに分けて出力する。
- 構成図は、コマンドプロンプトで対象のプロジェクトフォルダーに絞って、treeコマンドを使う。/fでファイル名も表示し、/aで枝の線を半角の文字で表示する。ドライブ全体を指定すると、関係のないファイルも含まれる。
- 日本語を含むときは、chcp 65001の後でも、treeのリダイレクト結果はUTF-8にならなかった。記事のtree-export.ps1は、OEMコードページで出力を読み、UTF-8(BOM付き)で保存する。
- 表計算で使うCSVが必要なら、記事のinventory.ps1で、パス・名前・拡張子・バイト数を列に分けて出力する。files.csvは、UTF-8(BOM付き)で、名前にカンマがあっても引用符で列を保持する。
- READMEへ貼るときは、tree-list.txtから対象フォルダー以下の行を選び、Markdownのコード枠で囲む。ボリューム情報や公開したくないフォルダー名は、共有する前に出力から取り除く。
- 失敗したときは、「Source must be a folder」では対象の場所、「Output already exists」では新しい出力名を確認する。権限不足で出力できなかった場合は、完成した一覧として使わない。
元のフォルダーは変更しないので、やり直すときは、新しい出力ファイルへ書き出してください。
失敗したときと戻し方
Source must be a folderでは対象の場所を確認し、Output already existsでは新しい出力名を指定します。
権限不足で出力できなかった場合は完成した一覧として使わず、読み取り可能な練習用フォルダーで手順を確認します。
元フォルダーは変更しないため、やり直すときは新しい出力ファイルへ書き出します。
2026年10月2日にWindows CMDとPowerShell 5.1で日本語のUTF-8保存、ファイルのみの一覧、出力ファイルの除外、再実行時の停止を確認しました。
Excelへの取り込み画面は今回の検証に含めていません。
仕様:Microsoft tree、dir。
関連するファイル操作とツール





よくある質問:ディレクトリ構成図で迷ったときのチェックリスト
treeコマンドの/fと/aは何ですか?
/fはファイル名も表示し、/aは枝の線を半角の文字で表示する指定です。
ドライブ全体を指定してもよいですか?
関係のないファイルも含まれるため、対象のプロジェクトフォルダーに絞ってください。
日本語のファイル名が文字化けするときは?
今回のWindows環境では、chcp 65001の後でも、treeのリダイレクト結果はUTF-8になりませんでした。
記事のtree-export.ps1は、Windowsのコードページで出力を読み、UTF-8(BOM付き)で保存します。
PowerShellの実行ポリシーを変更する必要はありますか?
記事の起動例は、そのプロセスだけにRemoteSignedを指定し、PC全体の実行ポリシーは変更しません。
ダウンロードしたPS1で署名エラーが出たときは、内容と出所を確認してください。
表計算で使うファイル一覧はどう作りますか?
記事のinventory.ps1で、パス・名前・拡張子・バイト数を列に分けたCSVを作ります。
Excelへの取り込み画面は、今回の検証に含めていません。
旧記事のexTree.vbsはどうなりましたか?
配布元を確認できないため、案内を終了し、Windows標準のtreeとdirに更新しました。
