Всем привет. Подскажите есть ли решение данной задачи
Есть файл в котором есть 50000 строк
В каждой строке есть набор символов
Пример:
abDe2
abDr5
Нужно создать дерево папок на жестком диске и пустым файлом на конце.
Т.е. должно получиться так C:\a\b\!d\e\2
и для второго примера C:\a\b\!d\r\5
!d нужна для того, что бы отличить d маленькую от D большой
В итоге получиться папка с кучей подпапок на жестком диске (интересно от ~500 000 папок не умрет жесткий диск)
Подскажите есть ли готовые программы которые могут это сделать?
первый параметр имя файла со списком, второй каталог откуда начинает создавать иерархию каталогов.
В строках не должно быть пробелов и символов \|/ :?*"<>
@echo off
set sp=%~2
if ["%sp%"]==[""] set sp=.
for /f %%a in (%~1) do echo %%a&&set p=%sp%&&call :m %%a
exit
:m
set s=%~1
set b=%s:~0,1%
set o=%s:~1%
@echo %b%|findstr /R "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]" && set b=!%b%
set p=%p%\%b%
md %p% 1>nul 2>nul
if not ["%o%"]==[""] call :m "%o%"
goto :eof
Slait, "Пока не могу понять, какой из них первый sp=%~2. Как указать файл с данными?" - первым (и на самом деле последним) шагом в решении этой проблемы может быть попытка прочитать текст ответа: "первый параметр имя файла со списком, второй каталог откуда начинает создавать иерархию каталогов."
:m
set s=%~1
set b=%s:~0,1%
set o=%s:~1%
@echo %b%|findstr /R "[ABCDEFGHIJKLMNOPQRSTUVWXYZ]" && set b=!%b%
set p=%p%\%b%
if not ["%o%"]==[""] md "%p%" 1>nul 2>nul
if not ["%o%"]==[""] call :m "%o%"
if ["%o%"]==[""] type >"%p%"
goto :eof
Olgeir Хорошо!
Одно замечание - с рекурсией в строке:
if not ["%o%"]==[""] call :m "%o%"
могут быть проблемы при большой вложенности каталогов. Не помню точно сколько, но в cmd достаточно не большой стек вызовов. У меня был опыт с переполнением стека вызовов.
Я бы заменил call на goto:m, но просто так это не заработает, т.к. в goto не передаются параметры, нужно немного переделать процедуру :m.