Войти

Показать полную графическую версию : Как создать серию папок с папками внутри (10 входов по папкам)?


NLOLegion
08-01-2020, 11:44
Собственно суть задачи такова:
-создать 10 папок(например в диске "C" (в папке "test") с названием каждой "0","1","2","3","4","5","6","7","8","9";
-в каждой этой папке создать ещё 10 папок "0","1","2","3","4","5","6","7","8","9"
-в свою очередь в каждой новой папке ещё по 10 папок с такими же названиями
-создать до такого количества раз, чтобы в итоге можно было зайти на глубину 10 папок. Например зашёл в папку 3, далее в 5, потом 1, далее 0 и так далее 10 раз(входов)
-важным критерием является контроль глубины создания папок, чтобы в скрипте можно было выставить сколько создавать. (может кому то и 3 входа достаточно будет.
-если возможно так же иметь возможность контролировать количество созданных папок(не ограничиваться "девяткой" ,а использовать и меньшее количество папок с названиями, а так же продолжить использовать цифры далее цифры "9"(10,11,12 и т.д),или даже весть латинский алфавит вместо цифр(как вариант)

В чём цель? Собственно - например ваша мама родилась 02.03.1965 г. , используя эти цифры, и последовательно открывая папки с соответствующими номерами мы попадём в конечную папку 5 в которой будут храниться необходимые данные связанные именно с этим человеком(мама) или датой. Ну и любые другие комбинации цифр или слов.
Одним словом суть этой задачи - ХРАНИЛИЩЕ. Причём использование готовой серии папок любым даже самым простым человека без всяких паролей и шифрования.

Busla
08-01-2020, 11:55
02.03.1965 »
LOL, это, типа, пароль что ли получится для доступа к данным?

а "самый простой человек" против которого это задумывается совершенно не умеет поиском пользоваться?

NLOLegion
08-01-2020, 12:06
Busla, речь о скрытии данных не идёт. Плюс искать можно что-то конкретное, а не все типы файлов которые можно засунуть в одну папку.

Iska
08-01-2020, 12:38
NLOLegion, это никак не объясняет необходимости создания огромного дерева каталогов.

megaloman
08-01-2020, 13:07
Имена папок могут быть любыми, как и их количество. Насчет вложенности (здесь Set /A Nest=4) , для большого числа (вы указывали 10) предложенный код будет работать долго.
@Echo Off
Set /A Nest=4
Set "BoxIn=Z:\Test"

Set "@01=0"
Set "@02=1"
Set "@03=2"
Set "@04=3"
Set "@05=4"
Set "@06=5"
Set "@07=6"
Set "@08=7"
Set "@09=8"
Set "@10=9"

FOR /F "usebackq tokens=2 delims==" %%i IN (`2^>nul Set "@"`) Do 2>nul md "%BoxIn%\%%i"
FOR /L %%n IN (2,1,%Nest%) DO (
FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxIn%" /B /S /A:D`) Do Call :NestMD "%%d"
)
pause
Exit /B

:NestMD
FOR /F "usebackq tokens=2 delims==" %%i IN (`2^>nul Set "@"`) Do 2>nul md "%~1\%%i" ||Exit /B 1
Exit /B
Пример произвольных имен Set "@01=ku ku"
Set "@02=la la"
Set "@03=ой ё"

iglezz
08-01-2020, 16:52
Вариант на WSH JScript: MkFoldersRecurse.js // Папка:
var targetFolder = "d:\\xxTESTxx";
// Массив создаваемых папок:
var foldersList = [
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
];
// Глубина создаваемой структуры папок:
var foldersDepth = 2;

var newf = '';
var wsh = WScript.CreateObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
if (!TestWritable(targetFolder)) {
msg("Ошибка записи в папку " + targetFolder);
WScript.Quit(1);
}

if (wsh.Popup("Будет создано " + GetFoldersNumber(foldersList.length, foldersDepth) + " папок.\n\nПродолжить?", 0, "", 4) != 6 )
WScript.Quit(0);
var timeStart = new Date();
CreateFolders(targetFolder, foldersList, foldersDepth);
var timeFinish = new Date();
msg((timeFinish - timeStart) + " msec.")

function msg(s){WScript.Echo(s);}

function TestWritable(parentFolder) {
var testFolderName = parentFolder + "\\" + "testFolderName";
try {
fso.CreateFolder(testFolderName);
} catch(error) {
return false;
}
fso.DeleteFolder(testFolderName, true);
return true
}

function GetFoldersNumber(n, d) {
var sum = 0;
for (var i = 1; i <= d ; i++)
sum += Math.pow(n, i);
return sum;
}

function CreateFolders(parentFolder, foldersList, foldersDepth){
var depth = foldersDepth == undefined ? foldersList.length : foldersDepth;
if (depth == 0)
return;

for (var f in foldersList) {
newf = parentFolder + "\\" + foldersList[f]
if (!fso.FolderExists(newf)) fso.CreateFolder(newf);
CreateFolders(newf, foldersList, depth - 1)
}
}

-создать 10 папок(например в диске "C" (в папке "test") с названием каждой "0","1","2","3","4","5","6","7","8","9";
-в каждой этой папке создать ещё 10 папок "0","1","2","3","4","5","6","7","8","9"
-в свою очередь в каждой новой папке ещё по 10 папок с такими же названиями
-создать до такого количества раз, чтобы в итоге можно было зайти на глубину 10 папок. Н »
Жалко компа, он же сдохнуть может от такой нагрузки :)

10 миллиардов папок - занадта! »
NTFS вроде как лимит в 4,294,967,295 (2^32-1) имеет :)

NLOLegion
09-01-2020, 06:54
Жалко компа, он же сдохнуть может от такой нагрузки »
да, можно использовать осознанно и с этой целью;)

alhaos
15-01-2020, 09:54
Кто я чтобы мешать чужому счастью )))

param(
$workPath = 'c:\tmp\root'
)

cls
$iteration = 0

function makeFolderTree {
If ($iteration -eq 0)
{
(1..10) | ForEach-Object{
New-Item -ItemType Directory -Path (Join-Path -Path $WorkPath -ChildPath $_) | Out-Null
}
}
foreach ($leaf in (Get-ChildItem -Directory -Recurse -Path $workPath | Where-Object {!(Get-ChildItem $_.FullName -Directory)}).FullName){
(1..10) | ForEach-Object{
New-Item -ItemType Directory -Path (Join-Path -Path $leaf -ChildPath $_) | Out-Null
}
}
$iteration++
If ($iteration -eq 10){
break
}
$iteration
makeFolderTree
}

makeFolderTree




© OSzone.net 2001-2012