Войти

Показать полную графическую версию : Структура папок


JimmOnLine
15-07-2019, 18:36
Добрый день!
Подскажите пожалуйста. Необходимо реализовать скрипт (не важно на чем), который бы записывал в Excel структуру каталогов. Пример:

Folder1
Folder2
Folder3
Folder4
Folder4
Folder5
Folder6
Folder7
Folder8
... ... ... ... ... ... ... ... ... ... ... ... ... ...
и т.д.

Iska
15-07-2019, 19:16
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

it3
16-07-2019, 06:15
скрипт VBS, который записывает в Excel структуру каталогов. »
При запуске выходит ошибка [скриншот во вложении).

JimmOnLine
16-07-2019, 06:27
JimmOnLine, как именно записывал? Всё одну ячейку? Один каталог — одна строка таблицы? Отступы — пробелы, табуляция или следующий столбец таблицы?

Почему именно Excel?

1. Один каталог -> одна строка таблицы.
2. Следующий столбец.
3. Excel - более удобный инструмент для дальнейшей обработки сформированных данных.

Sham
16-07-2019, 08:58
При запуске выходит ошибка [скриншот во вложении) »
без BOM сохраняйте

it3
16-07-2019, 10:20
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'ить из документа в наименование Групп безопасности.

Busla
16-07-2019, 11:38
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

Busla
16-07-2019, 17:12
Остаётся вопрос с реализацией. »
обход дерева делается встроенными средствами, а дальше просто разбить строку по слэшу:
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++)="'$_"
}
}
}
}

YuS_2
16-07-2019, 18:07
который бы записывал в 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