Используйте PowerShell для создания списка файлов и каталогов
Я пишу PowerShell script, чтобы создать несколько каталогов и скопировать кучу файлов для "компиляции" некоторой технической документации. Я хотел бы создать манифест файлов и каталогов как часть файла readme, и я бы хотел, чтобы PowerShell сделал это, так как я уже работаю в PowerShell, чтобы выполнить "компиляцию".
Я уже делал поиск, и мне кажется, что мне нужно использовать командлет "Get-ChildItem", но он дает мне слишком много данных, и я не понимаю, как отформатировать и сократить, что я не хочу получать желаемые результаты.
Мне хотелось бы получить такой же результат:
Directory
file
file
file
Directory
file
file
file
Subdirectory
file
file
file
или что-то вроде этого:
+---FinGen
| \---doc
+---testVBFilter
| \---html
\---winzip
Другими словами, какое-то базовое визуальное представление ASCII древовидной структуры с именами каталогов и файлов и ничего другого. Я видел программы, которые делают это, но я не уверен, что PowerShell может это сделать.
Может ли PowerShell это сделать? Если да, то Get-ChildItem будет правильным командлетом?
Ответы
Ответ 1
В вашем конкретном случае вы хотите Tree /f
. У вас есть комментарий, в котором говорится, как вырезать часть на фронте, говоря об объеме, серийном номере и букве диска. Это можно фильтровать вывод, прежде чем отправлять его в файл.
$Path = "C:\temp"
Tree $Path /F | Select-Object -Skip 2 | Set-Content C:\temp\output.tkt
Выход дерева в приведенном выше примере - это System.Array
, с которым мы можем манипулировать. Select-Object -Skip 2
удалит первые 2 строки, содержащие эти данные. Кроме того, если бы Кейт Хилл был рядом, он также рекомендовал расширения сообщества PowerShell (PSCX), содержащие командлет Show-Tree
. Скачайте с здесь, если вам интересно. Там много мощного материала.
Ответ 2
Следующий script покажет дерево как окно, его можно добавить в любую форму, представленную в script
function tree {
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
# create Window
$Form = New-Object System.Windows.Forms.Form
$Form.Text = "Files"
$Form.Size = New-Object System.Drawing.Size(390, 390)
# create Treeview-Object
$TreeView = New-Object System.Windows.Forms.TreeView
$TreeView.Location = New-Object System.Drawing.Point(48, 12)
$TreeView.Size = New-Object System.Drawing.Size(290, 322)
$Form.Controls.Add($TreeView)
###### Add Nodes to Treeview
$rootnode = New-Object System.Windows.Forms.TreeNode
$rootnode.text = "Root"
$rootnode.name = "Root"
[void]$TreeView.Nodes.Add($rootnode)
#here i'm going to import the csv file into an array
[email protected](Get-ChildItem -Path D:\personalWorkspace\node)
Write-Host $array
foreach ( $obj in $array ) {
Write-Host $obj
$subnode = New-Object System.Windows.Forms.TreeNode
$subnode.text = $obj
[void]$rootnode.Nodes.Add($subnode)
}
# Show Form // this always needs to be at the bottom of the script!
$Form.Add_Shown({$Form.Activate()})
[void] $Form.ShowDialog()
}
tree
Ответ 3
Самый лучший и понятный для меня способ:
PS P:\> Start-Transcript -path C:\structure.txt -Append
PS P:\> tree c:\test /F
PS P:\> Stop-Transcript
Ответ 4
Вы можете использовать команду Get-ChildItem -Path <yourDir> | tree >> myfile.txt
, которая выведет древовидную структуру каталога и запишет ее в файл "myfile.txt"
Ответ 5
В Windows
перейдите в интересующий каталог
Shift + щелчок правой кнопкой мыши → Open PowerShell window here
Get-ChildItem | tree /f > tree.log