Добавил еще ведущие нули к миллисекундам, если кому-то еще когда-то этот код понадобится
log = function (text, color, define){ var id, time, thread, logHtml, textLog; define = (typeof define == 'string') ? define.split(/[\s,.|:;]+/g) : define; if(typeof define === 'object' && define !== null){ if(Array.isArray(define)){ id = define.indexOf('id') > -1; time = define.indexOf('time') > -1; thread = define.indexOf('thread') > -1; } else{ id = define.id == true; time = define.time == true; thread = define.thread == true; } } else id = time = thread = true; id = id ? '<a href="action://action' + ScriptWorker.GetCurrentAction() + '" style="color:gray;">[' + ScriptWorker.GetCurrentAction() + ']</a>' : ''; time = time ? ' ' + getTime() : ''; thread = thread ? ' Поток №' + thread_number() : ''; logHtml = (id || time || thread) ? id + '<span style="color: white">' + time + thread + ' : </span>' : ''; logHtml += '<span style="color:' + (color ? color : 'white') + '">' + text + '</span>'; textLog = '[' + ScriptWorker.GetCurrentAction() + ']' + time + thread + ' : ' + text function getTime(){ var checkTime = function(i){ return (i < 10) ? "0" + i : i; }; var checkMilliSeconds = function(ms){ if (ms < 10) { return "00" + ms; } else if (ms < 100) { return "0" + ms; } else { return ms; } }; var d = new Date(); var hh = checkTime(d.getHours()); var mm = checkTime(d.getMinutes()); var ss = checkTime(d.getSeconds()); var ms = checkMilliSeconds(d.getMilliseconds()); return '[' + hh + ':' + mm + ':' + ss + '.' + ms + ']'; }; Logger.WriteHtml(logHtml, textLog); }Найти пустую папку. Но находит последюю в списке.
-
Есть список [[SPISOK]] , каждый элемент списка- это путь к определённой папке.
Нужно найти первую пустую (меньше 1 мб) папку и записать путь к ней в перем [[ITOG]] , но должно выполняться условие что после неё в списке [[SPISOK]]
стоит папка размером 100мб или больше.Пробовал Nodejs 18 пакет get-folder-size и функция getFolderSize но не заработало.
Использую Nodejs 18. Реализую определение размера папок с помощью встроенных инструментов fs.
Но получаю в переменной itog просто самую последнюю папку в списке, она весит 41 мб. ..не подпадая под условия быть меньше 1 мб и после нее должна в списке стоять папка более 100 мб что также не выполняется т к после неё нет ни одного элемента в списке.Код:
// Step 1 const fs = require('fs'); const path = require('path'); const spisok = [[SPISOK]]; // Declare variables let pytkpystoypapke = ""; // path to found folder with size less than 1000000 bytes let itog = ""; // path to found folder will be saved in this variable // Loop through all folders in list "spisok" for (let i = 0; i < spisok.length; i++) { let folderSize = fs.statSync(spisok[i]).size; // get size of current folder if (folderSize < 1000000) { // check if size is less than 1000000 bytes if (i < spisok.length - 1) { // check if there is another folder in list "spisok" let nextFolderSize = fs.statSync(spisok[i + 1]).size; // get size of next folder if (nextFolderSize > 1000000) { // check if next folder size is greater than 1000000 bytes pytkpystoypapke = spisok[i]; // save path to current folder in "pytkpystoypapke" break; // exit the loop } } else { pytkpystoypapke = spisok[i]; // save path to current folder in "pytkpystoypapke" break; // exit the loop } } } itog = pytkpystoypapke; // save path to found folder in "itog" variable [[ITOG]] = pytkpystoypapke; // save path to found folder in "itog" variable // Output result console.log(itog); -
Сам разобрался, может кому-то будет полезно, вот готовый код, выполнять в кубике node.js (я выполнял в node18) .... кстати, больше 80% кода сгенерирована нейронкой https://chat.openai.com/chat
Задача выполняется двумя кубиками node.js
1) Сначала ищем из каталога все папки и переворачиваем этот список . Полученный список сохраняем в [[SPISOK]]
// Step 1 // Get the path to the "D:\\2 отправленое\\АНАЛИЗ" folder const path = "D:\\2 отправленое\\АНАЛИЗ"; // Create an empty list to store the paths to the folders inside the "creep-analysis" folder let spisok = []; // Use the fs (file system) module to read the contents of the "creep-analysis" folder const fs = require('fs'); const files = fs.readdirSync(path); // Loop through the contents of the "creep-analysis" folder and add the paths to the folders to the "spisok" list files.forEach((file) => { // Check if the current item is a folder if (fs.lstatSync(path + '/' + file).isDirectory()) { // Add the path to the folder to the "spisok" list spisok.push(path + '/' + file); } }); // Step 2 // Sort the "spisok" list in descending order by the number that each folder name starts with spisok.sort((a, b) => { // Get the folder name from the path of each item in the list const folderNameA = a.split('/').pop(); const folderNameB = b.split('/').pop(); // Extract the number that each folder name starts with const numberA = parseInt(folderNameA.match(/^\d+/)[0]); const numberB = parseInt(folderNameB.match(/^\d+/)[0]); // Compare the numbers and sort the list in descending order return numberB - numberA; }); // Step 3 // Save the sorted "spisok" list to the "itog" variable [[SPISOK]] = spisok;2) Далее ищем папку которая имеет вес меньше 1 мб и при условии что в каталоге где она лежит следующей будет папка с весом >=100мб
Готовый рабочий код, полный путь к итоговой папке сохраняется в [[PYT_K_PROSHLOY_PYSTOY_PAPKE]]:// Declare the list "spisok" let spisok = [[SPISOK]]; const fs = require('fs'); // Use a for loop to go through all elements of the list "spisok" for (let i = 0; i < spisok.length; i++) { let folderPath = spisok[i]; // Assign each value of the loop to the variable "folderPath" //console.log(folderPath); // Print the value of "folderPath" in the log // шаг 1. начитаем получать размер папки путь к ней лежит в folderPath function getFolderSize(path) { let totalSize = 0; const files = fs.readdirSync(path); for (let i = 0; i < files.length; i++) { const stats = fs.statSync(path + '//' + files[i]); if (stats.isFile()) { totalSize += stats.size; } else if (stats.isDirectory()) { totalSize += getFolderSize(path + '//' + files[i]); } } return totalSize; } const folderSize = getFolderSize(folderPath); // закончили получать размер папки "folderPath" // и размер записали в "folderSize" if (folderSize < 1000000); { // шаг 2. получаем размер папки лежащей ниже let nextElement = spisok[i + 1]; function getFolderSize(path) { let totalSize = 0; const files = fs.readdirSync(path); for (let i = 0; i < files.length; i++) { const stats = fs.statSync(path + '//' + files[i]); if (stats.isFile()) { totalSize += stats.size; } else if (stats.isDirectory()) { totalSize += getFolderSize(path + '//' + files[i]); } } return totalSize; } const nextFolderSize = getFolderSize(nextElement); // закончили получать размер папки лежащей ниже и запись // записали размер в "nextFolderSize" if (nextFolderSize > 100000000) { console.log(folderPath); //console.log(folderSize); //console.log(folderPath); [[PYT_K_PROSHLOY_PYSTOY_PAPKE]] = folderPath; break } } }