Files

97 lines
3.4 KiB
PowerShell

$sourcePath = ".";
$outputPath = "$sourcePath\ProjectDump.txt";
$excludeDirs = @(".git", ".vs", "bin", "obj", "packages", "TestResults");
$excludeExts = @(".dll", ".exe", ".pdb", ".zip", ".png", ".jpg", ".jpeg", ".ico", ".suo", ".user", ".cache", ".slnx");
Function Get-ProjectTree {
param([string]$path, [string]$indent = "")
$output = "";
$allItems = Get-ChildItem -Path $path -ErrorAction SilentlyContinue;
$items = @();
for ($i = 0; $i -lt $allItems.Count; $i++) {$item = $allItems[$i];
$isDir =$item.PSIsContainer;
$skipItem =$false;
if ($isDir -and ($excludeDirs -contains $item.Name)) {
$skipItem =$true;
}
if (-not $isDir -and ($excludeExts -contains $item.Extension)) {
$skipItem =$true;
}
if (-not $skipItem) {
$items +=$item;
}
}
$count =$items.Count;
for ($j = 0; $j -lt $count; $j++) {
$item =$items[$j];$isLast = (($j + 1) -eq$count);
$marker = if ($isLast) { "└── " } else { "├── " };
$output += "${indent}${marker}$($item.Name)`r`n";
if ($item.PSIsContainer) {
$newIndent = if ($isLast) { $indent + " " } else { $indent + "│ " };
$output += Get-ProjectTree -path $item.FullName -indent$newIndent;
}
}
return $output;
}
$rootPath = (Resolve-Path $sourcePath).Path;
Set-Content -Path $outputPath -Value "=== ДЕРЕВО КАТАЛОГОВ ПРОЕКТА ===" -Encoding UTF8;
$rootName = (Get-Item $rootPath).Name;
Add-Content -Path $outputPath -Value $rootName -Encoding UTF8;
$tree = Get-ProjectTree -path $rootPath;
Add-Content -Path $outputPath -Value $tree -Encoding UTF8;
Add-Content -Path $outputPath -Value "" -Encoding UTF8;
Add-Content -Path $outputPath -Value "=== ЛИСТИНГИ КОДА ===" -Encoding UTF8;
$allFiles = Get-ChildItem -Path $rootPath -Recurse -File -ErrorAction SilentlyContinue;
$files = @();
for ($f = 0; $f -lt $allFiles.Count; $f++) {$file = $allFiles[$f];
if ($excludeExts -notcontains $file.Extension) {
$files +=$file;
}
}
for ($k = 0; $k -lt $files.Count; $k++) {$file = $files[$k];
$skip =$false;
for ($d = 0; $d -lt $excludeDirs.Count; $d++) {$dir = $excludeDirs[$d];
$dirPattern = "[\\/]$dir[\\/]";
$checkPath = "\" + $file.FullName.Substring($rootPath.Length).Trim('\','/') + "\";
if ($checkPath -match $dirPattern) {
$skip =$true;
break;
}
}
if ($skip) { continue; }
$relPath = $file.FullName.Substring($rootPath.Length).TrimStart('\', '/');
Add-Content -Path $outputPath -Value "" -Encoding UTF8;
Add-Content -Path $outputPath -Value ("=" * 80) -Encoding UTF8;
Add-Content -Path $outputPath -Value "Файл: $($file.Name)" -Encoding UTF8;
Add-Content -Path $outputPath -Value "Относительный путь: $relPath" -Encoding UTF8;
Add-Content -Path $outputPath -Value ("=" * 80) -Encoding UTF8;
try {
$content = Get-Content -Path $file.FullName -Encoding UTF8 -Raw -ErrorAction Stop;
if ($null -ne $content) {
Add-Content -Path $outputPath -Value $content -Encoding UTF8;
}
}
catch {
Add-Content -Path $outputPath -Value "[Пропущен: бинарный или нечитаемый файл]" -Encoding UTF8;
}
}
Write-Host "Готово! Дамп сохранен в $outputPath";