|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Как каталогизировать папки средствами JS ? |
|
|
VBS/WSH/JS - Как каталогизировать папки средствами JS ?
|
Пользователь Сообщения: 87 |
Имеется папка с множеством вложенных папок разных уровней вложения и файлы в каждой из них.
Необходимо методами JS разместить в каждой папке текстовый файл со списком содержащихся в ней файлов (но не папок) и именем папки в кодировке 1251. Прошу помощи. |
|
Отправлено: 13:52, 01-05-2018 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать ruslaw, VBScript устроит?
|
Отправлено: 14:03, 01-05-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать я в нем не разбираюсь совсем, а JS я смог бы потом модифицировать
|
Отправлено: 15:20, 01-05-2018 | #3 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать ruslaw, в таком виде задача выглядит бессмысленной деятельностью, т.к. содержимое директории на нижнем уровне практически и есть "текстовый файл со списком содержащихся в ней файлов"
Iska, с вашим опытом перенести перенести простой скрипт из VB в JS - всё равно, что почесаться. А вы продолжаете некромантию пропагандировать. |
Отправлено: 15:22, 01-05-2018 | #4 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать js
var AllDir = "D:\\CMD_Forum\\Муз"; // --------- Полное имя рабочего каталога (без слэжа \ на конце) var Maska = "^.*\\..*$"; var FSO = WScript.CreateObject("Scripting.FileSystemObject"); var RegMaska = new RegExp(Maska); RegMaska.IgnoreCase = true; AllFiles(AllDir); // ------------------------------------------- function AllFiles(WDir) { var Folds = FSO.GetFolder(WDir); var Finfo = FSO.OpenTextFile(WDir + "\\!!! " + Folds.Name + ".Info", 2, true); var SubF = new Enumerator(Folds.SubFolders); var Files = new Enumerator(Folds.Files); var jf; Finfo.WriteLine("+++ " + Folds.Name + " +++ " + WDir); while (!Files.atEnd()) { jf = Files.item().Name; if (RegMaska.test(jf)) { Finfo.WriteLine(jf); } Files.moveNext(); } Finfo.Close(); while (!SubF.atEnd()) { AllFiles(WDir + "\\" + SubF.item().Name); SubF.moveNext(); } } vbs
Public FSO, RegMaska AllDir = "D:\CMD_Forum\Муз" ' --------- Полное имя рабочего каталога (без слэжа \ на конце) Maska= "^.*\..*" Set FSO = CreateObject("Scripting.FileSystemObject") Set RegMaska = New RegExp RegMaska.Pattern = Maska RegMaska.IgnoreCase = True Call AllFiles(AllDir) MsgBox "Скрипт завершился" ' --------------------------------------------------------------------------- Sub AllFiles(WDir) Set Folds = FSO.GetFolder(WDir) Set SubF = Folds.SubFolders Set Files = Folds.Files Set Finfo = FSO.OpenTextFile(WDir + "\!!! " + Folds.Name + ".Info", 2, True) Finfo.WriteLine "+++ " + Folds.Name + " +++ " + WDir For Each jF In Files If RegMaska.Test(jf) Then Finfo.WriteLine FSO.GetFileName(jF) End If Next Finfo.Close For Each Folder In SubF Call AllFiles(WDir + "\" + Folder.Name) Next End Sub bat
@Echo Off chcp 1251 >nul Set "AllDir=D:\CMD_Forum\Муз" Set "Maska=*.*" Call :SpisFiles "%AllDir%" FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%AllDir%" /B /S /A:D`) DO Call :SpisFiles "%%d" GoTo :Eof :SpisFiles >"%~1\!!! %~nx1.Info" ( Echo +++ %~nx1 +++ %~1 FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%~1\%Maska%" /B /A:-D`) DO Echo %%f ) GoTo :Eof |
|
------- Последний раз редактировалось megaloman, 02-05-2018 в 06:48. Отправлено: 20:22, 01-05-2018 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Busla:
Цитата Busla:
![]() Цитата megaloman:
![]() |
|||
Отправлено: 21:31, 01-05-2018 | #6 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать megaloman, большое спасибо, JS-скрипт отработал отлично.
Кстати, батник создал только один индекс-файл - в указанной папке, а по подпапкам не пошел, но это не страшно, меня интересует именно JS. И еще вопрос. Можно ли исключить из индексации (на JS-скрипте) скрытые папки, причем у меня в таких папках находятся видимые (не скрытые) подпапки и файлы? |
Отправлено: 23:45, 01-05-2018 | #7 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать ruslaw,
ruslaw, а как насчет: а JS я смог бы потом модифицировать? :)
var AllDir = "D:\\CMD_Forum\\Box_In"; // --------- Полное имя рабочего каталога (без слэжа \ на конце)
var Maska = "^.*\\..*$";
var FSO = WScript.CreateObject("Scripting.FileSystemObject");
var RegMaska = new RegExp(Maska);
RegMaska.IgnoreCase = true;
AllFiles(AllDir);
// -------------------------------------------
function AllFiles(WDir) {
var Folds = FSO.GetFolder(WDir);
var FAttr = Folds.Attributes;
if (FAttr & 2 || FAttr & 4) {return}
var Finfo = FSO.OpenTextFile(WDir + "\\!!! " + Folds.Name + ".Info", 2, true);
var SubF = new Enumerator(Folds.SubFolders);
var Files = new Enumerator(Folds.Files);
var jf;
Finfo.WriteLine("+++ " + Folds.Name + " +++ " + WDir);
while (!Files.atEnd()) {
jf = Files.item().Name;
if (RegMaska.test(jf)) {
Finfo.WriteLine(jf);
}
Files.moveNext();
}
Finfo.Close();
while (!SubF.atEnd()) {
AllFiles(WDir + "\\" + SubF.item().Name);
SubF.moveNext();
}
}
![]() Цитата Iska:
Исправил решение в соответствии с предложением Busla. Отсекаются скрытые и системные папки. батник подправил |
|
------- Последний раз редактировалось megaloman, 02-05-2018 в 12:17. Отправлено: 07:30, 02-05-2018 | #8 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать megaloman, конечно, костыльное: надо проверять один единственный бит, а не перечислять все мыслимые комбинации:
и к языку программирования это не имеет отношения - оно везде так Attributes Property |
Последний раз редактировалось Busla, 02-05-2018 в 11:55. Отправлено: 11:27, 02-05-2018 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Busla, мысль правильная, но выражена не вполне точно. Проверять надо не один единственный бит, а все биты. К языку программирования это также имеет отношение — надо использовать именно битовые логические операторы/функции, а не просто логические (там, где они отличаются).
|
Отправлено: 12:14, 02-05-2018 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Node.js (JS+DB (на JSON) + VK_API | nexagns72 | Программирование и базы данных | 0 | 22-09-2017 20:02 | |
VBS/WSH/JS - Подскажите как копировать файлы js | vitalijch | Скриптовые языки администрирования Windows | 0 | 25-03-2012 18:00 | |
[решено] JS. Как установить onblur из JS? | Sanchos | Вебмастеру | 2 | 04-07-2010 13:16 | |
[решено] Перемещение папки Users и изменение букв дискам средствами WAIK | alcatraz | Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista | 10 | 28-02-2009 03:04 | |
VBS/WSH/JS - как создать VBArray в JS? | pva | Скриптовые языки администрирования Windows | 3 | 16-11-2008 21:21 |
|