PDA

Показать полную графическую версию : [решено] Пакетная индексация содержимого папки


ruslaw
27-10-2020, 21:50
Имеется код позволяющий в папке D:\test проиндексировать все содержащиеся в ней субпапки всех уровней вложения и выложить результат в файл scan_tree.txt помещаемый в папку где находится файл с кодом:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var fn = "scan_tree.txt";
var f = fso.CreateTextFile(fn,true,true);
var main_folder_path="D:\\test";
var main_folder = fso.GetFolder(main_folder_path);
DirWithSubFolders(main_folder);
// ================================================================
function DirWithSubFolders(_folder){
if(_folder.Attributes & 2) {return} //(пропускаем скрытые файлы)
var more_folders = new Enumerator(_folder.SubFolders);
for (;!more_folders.atEnd();more_folders.moveNext()){
OneFolder = more_folders.item();
f.writeline(OneFolder.Path);
DirWithSubFolders (OneFolder);
}}

Требуется преобразовать его в код исполняющий эту задачу пакетно т.е. в отношении набора папок, перечисленного в файле D:\test.txt:
-------------
D:\test
D:\xyz\abc
......
-------------
с размещением итогов по каждой такой папке в отдельном индексном файле:
D:\test\scan_tree.txt
D:\xyz\abc\scan_tree.txt
......

ruslaw
28-10-2020, 21:53
нашлось решение этой интересной, на мой взгляд, задачи:
https://www.cyberforum.ru/vbscript-wsh/thread2718893.html#post14951684

А вот это мое:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var list = fso.OpenTextFile("D:\\test.txt", 1, true);
var str = list.ReadAll();
//создается массив строк файла-списка
var elm = str.replace(/\r/g, '').split('\n');
list.Close();
var myEnum = new Enumerator(elm);
for (i=0; !myEnum.atEnd(); myEnum.moveNext()){
fScan(myEnum.item())
function fScan(main_folder_path) {
var fn = myEnum.item()+"\\scan_tree.txt";
var f = fso.CreateTextFile(fn,true,true);
var main_folder = fso.GetFolder(main_folder_path);
DirWithSubFolders(main_folder);
// ================================================================
function DirWithSubFolders(_folder){
if(_folder.Attributes & 2) {return} //(пропускаем скрытые файлы)
var more_folders = new Enumerator(_folder.SubFolders);
for (;!more_folders.atEnd(); more_folders.moveNext()){
OneFolder = more_folders.item();
f.writeline(OneFolder.Path);
DirWithSubFolders (OneFolder);
}}}}
WScript.Echo("Finish");

Vadikan
28-10-2020, 22:17
этой интересной, на мой взгляд, задачи: »
А на мой взгляд, эта задача интересна только извращенцам WSH. Потому что на PowerShell решается элементарным ванлайнером
Get-Content -Path input.txt | Foreach-Object {Get-ChildItem -recurse $_ | Out-File -Append -Path scan_tree.txt}
В нюансы опубликованного вами кода не вникал, только в описание задачи.

ruslaw
28-10-2020, 22:18
Возможно Вы правы, но PS это целый мир ...

Vadikan
28-10-2020, 22:25
ruslaw, и это повод его изучать, все равно вы WSH не владеете, судя по вопросу.

ruslaw
28-10-2020, 22:37
у меня спорадические ограниченные задачи, для меня такое поведение было бы нерентабельным
Но Ваш пример убедителен ...




© OSzone.net 2001-2012