Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Пакетная индексация содержимого папки (http://forum.oszone.net/showthread.php?t=346851)

ruslaw 27-10-2020 21:50 2937817

Пакетная индексация содержимого папки
 
Имеется код позволяющий в папке 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 2937952

нашлось решение этой интересной, на мой взгляд, задачи:
https://www.cyberforum.ru/vbscript-w...l#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 2937957

Цитата:

Цитата ruslaw
этой интересной, на мой взгляд, задачи: »

А на мой взгляд, эта задача интересна только извращенцам 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 2937959

Возможно Вы правы, но PS это целый мир ...

Vadikan 28-10-2020 22:25 2937962

ruslaw, и это повод его изучать, все равно вы WSH не владеете, судя по вопросу.

ruslaw 28-10-2020 22:37 2937963

у меня спорадические ограниченные задачи, для меня такое поведение было бы нерентабельным
Но Ваш пример убедителен ...


Время: 20:02.

Время: 20:02.
© OSzone.net 2001-