Показать полную графическую версию : Структура папок
JimmOnLine
15-07-2019, 18:36
Добрый день!
Подскажите пожалуйста. Необходимо реализовать скрипт (не важно на чем), который бы записывал в Excel структуру каталогов. Пример:
Folder1
Folder2
Folder3
Folder4
Folder4
Folder5
Folder6
Folder7
Folder8
... ... ... ... ... ... ... ... ... ... ... ... ... ...
и т.д.
JimmOnLine, как именно записывал? Всё одну ячейку? Один каталог — одна строка таблицы? Отступы — пробелы, табуляция или следующий столбец таблицы?
Почему именно Excel?
megaloman
15-07-2019, 21:43
AllDir = "Z:\Box_In" ' Полное имя рабочего каталога (без слэжа \ на конце)
Range1 = "C3" ' C какой ячейки стром дерево
ColWidth = 3 ' Ширина колонок
Set XL = CreateObject("Excel.Application")
XL.Visible = True
XL.Workbooks.Add
XL.Cells.ColumnWidth = ColWidth
Row1 = 0
Col1 = 0
XL.Range(Range1).FormulaR1C1 = "=""" + AllDir + """"
Set FSO = CreateObject("Scripting.FileSystemObject")
Call AllFolders(FSO, AllDir, Range1, Col1, Row1, XL)
' ---------------------------------------------------------------------------
Sub AllFolders(FSO, WDir, Range1, C1, R1, XL)
Set F = FSO.GetFolder(WDir)
Set SubF = F.SubFolders
For Each Folder In SubF
R1 = R1 + 1
XL.Range(Range1).Offset(R1, C1 + 1) = "=""" + Folder.Name + """"
Call AllFolders(FSO, WDir + "\" + Folder.Name, Range1, C1 + 1, R1, XL)
Next
C1 = C1 + 1
End Sub
скрипт VBS, который записывает в Excel структуру каталогов. »
При запуске выходит ошибка [скриншот во вложении).
JimmOnLine
16-07-2019, 06:27
JimmOnLine, как именно записывал? Всё одну ячейку? Один каталог — одна строка таблицы? Отступы — пробелы, табуляция или следующий столбец таблицы?
Почему именно Excel?
1. Один каталог -> одна строка таблицы.
2. Следующий столбец.
3. Excel - более удобный инструмент для дальнейшей обработки сформированных данных.
При запуске выходит ошибка [скриншот во вложении) »
без BOM сохраняйте
JimmOnLine, Переименуйте Ваш 1.vbs в 1.txt и приложите к сообщению. Кстати, VBS надо сохранять в 1251 кодировке. Мой скрипт прилагаю (в переименованном виде). »Работает.
JimmOnLine
16-07-2019, 10:22
При запуске выходит ошибка [скриншот во вложении) »
без BOM сохраняйте
Почему то не все каталоги выводятся в Excel.
megaloman
16-07-2019, 10:26
JimmOnLine, Прикрепляю свой файл со скриптом (в переименованном виде). При наличии кириллицы в пути, скрипт надо сохранять в 1251 кодировке (например, в стандартном блокноте). Переименуйте свой скрипт в txt и приложите к сообщению.Excel - более удобный инструмент для дальнейшей обработки сформированных данных. »Как именно обрабатывать Вы их хотите? Что в результате должно получиться?
JimmOnLine
16-07-2019, 10:34
JimmOnLine, Прикрепляю свой файл со скриптом (в переименованном виде). При наличии кириллицы в пути, скрипт надо сохранять в 1251 кодировке (например, в стандартном блокноте). Переименуйте свой скрипт в txt и приложите к сообщению.Excel - более удобный инструмент для дальнейшей обработки сформированных данных. »Как именно обрабатывать Вы их хотите? Что в результате должно получиться? Собственно суть в том, что необходимо организовать матрицу доступа к сетевым каталогам, для этого необходимо создать группы безопасности. Для того, чтобы это реализовать, хочу сперва построить это схематично (путем Excel), далее "Транслитерировать" наименования каталогов в Excel, ну а затем CopyPast'ить из документа в наименование Групп безопасности.
Excel - более удобный инструмент для дальнейшей обработки сформированных данных. »
это если уметь им пользоваться, а у вас какое-то рисование по клеточкам
по уму надо заполнять так:
Folder1 | Folder2 | | |
Folder1 | Folder3 | | |
Folder1 | Folder4 | Folder4 | |
Folder1 | Folder4 | Folder5 | Folder6 |
тогда и фильтры работают, и полный путь извлекается без танцев с бубном
JimmOnLine
16-07-2019, 11:49
и полный путь извлекается без танцев с бубном
Хм. Наверное в этом есть смысл. Остаётся вопрос с реализацией.
megaloman
16-07-2019, 13:02
JimmOnLine, Хм. Остаётся вопрос с реализацией. »
AllDir = "Z:\Box_In" ' --------- Полное имя рабочего каталога (без слэжа \ на конце)
Range1 = "C3"
Set XL = CreateObject("Excel.Application")
XL.Visible = True
XL.Workbooks.Add
Row1 = 0
XL.Range(Range1).FormulaR1C1 = "=""" + AllDir + """"
Set FSO = CreateObject("Scripting.FileSystemObject")
Call AllFolders(FSO, AllDir, AllDir, Range1, Row1, XL)
XL.Cells.EntireColumn.AutoFit
' ---------------------------------------------------------------------------
Sub AllFolders(FSO, AllDir, WDir, Range1, R1, XL)
Set F = FSO.GetFolder(WDir)
Set SubF = F.SubFolders
For Each Folder In SubF
R1 = R1 + 1
MName = Split(Replace(WDir + "\" + Folder.Name, AllDir + "\", "", 1, 1), "\")
C1 = 0
XL.Range(Range1).Offset(R1, C1) = "=""" + AllDir + """"
For Each jName In MName
C1 = C1 + 1
XL.Range(Range1).Offset(R1, C1) = "=""" + jName + """"
Next
Call AllFolders(FSO, AllDir, WDir + "\" + Folder.Name, Range1, R1, XL)
Next
' C1 = C1 + 1
End Sub
Остаётся вопрос с реализацией. »
обход дерева делается встроенными средствами, а дальше просто разбить строку по слэшу:
Get-ChildItem -Path c:\temp -Directory -Recurse `
| % { Write-Output ($_.FullName -split '\\') -NoEnumerate } `
| .{
begin {
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$workBook = $excel.Workbooks.Add()
$folderList = $workBook.Worksheets.Item(1)
$row=1
}
process {
$_ | .{
begin {
$row++
$column = 1
}
process {
$FolderList.Cells.Item($row,$column++)="'$_"
}
}
}
}
который бы записывал в Excel структуру каталогов. Пример: »
powershell
$root = 'd:\111'
$file = "$psscriptroot\out.xlsx"
$ids = ps excel -ea 0|%{$_.id}
$excel = new-object -com excel.application
$excelid = ps excel|%{$_.id}|?{$excelids -notcontains $_}
$excel.visible = $false
$workbook = $excel.workbooks.add()
$worksheet = $workbook.worksheets.item(1)
$row,$col=1,1
$worksheet.cells.item($row, $col) = $root
$content = dir -lit $root -dir -rec|sort fullname
foreach ($item in $content){
$row++
[array]$arr = $item.fullname -split "$([regex]::escape($root))|\\"|
?{$_ -ne ''}
$col = $arr.length + 1
$worksheet.cells.item($row, $col) = $item.name
}
$usedrange = $worksheet.usedrange
$usedrange.entirecolumn.autofit()|out-null
$workbook.saveas($file)
$excel.quit()
kill -id $excelid -force -ea 0
хочу сперва построить это схематично (путем Excel), далее "Транслитерировать" наименования каталогов в Excel, ну а затем CopyPast'ить из документа в наименование Групп безопасности. »
сомневаюсь, что это удобнее... скорее powershell-ом это проще сделать, в том числе и транслитерацию...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.