2013-04-13 4 views
0

У меня есть текстовый файл со структурой папок:Cmd дерево Json

+---A Momentary Lapse of Reason 
+---A Saucerful of Secrets 
+---Animals 
+---Atom Heart Mother 
+---Delicate Sound Of Thunder 
+---Echoes- The Best of Pink Floyd 
| +---Echoes- The Best of Pink Floyd Disc 1 
| \---Echoes- The Best of Pink Floyd Disc 2 
+---Is There Anybody out There- The Wall- Live 1980-1981 Disc 1 
+---Is There Anybody out There- The Wall- Live 1980-1981 Disc 2 
\---Works 

Я получил его от windows CMD с помощью команды tree. Я хотел знать, есть ли простой способ конвертировать эту структуру в json?

Для чего-то вроде этого это не слишком сложно сделать вручную, но мне нужно сделать это для папки 12TB.

ответ

5

ОК, я не очень хорошо знаком с JSON. Я посмотрел на this поток и написал пакетный скрипт. Пожалуйста, дайте мне знать, если я могу что-то улучшить.

@echo off &setlocal 
if "%~1"=="" (set "root=.") else set "root=%~1" 
set "pre0=         " 

pushd %root% 
echo(data = [ 
call:dirtree "%CD%" "1" "1" 
popd 
echo(]; 
goto:eof 

:dirtree 
setlocal 
call set "pre=%%pre0:~-%~2%% 
set /a ccount=%~3 
set /a tcount=%~2+2 
set /a dcount=0 
for /d %%i in (*) do set /a dcount+=1 
echo(%pre%{ 
echo( %pre%"type": "folder", 
echo( %pre%"name": "%~nx1", 
set "fpath=%~f1" 
set "fpath=%fpath:\=/%" 
echo( %pre%"path": "%fpath%", 
echo( %pre%"childno": %ccount%, 
if %dcount% equ 0 echo( %pre%"subchilds": %dcount% 
if %dcount% gtr 0 (
    echo( %pre%"subchilds": %dcount%, 
    echo( %pre%"children": [ 
    for /d %%i in (*) do (
     for /f %%j in ('call echo "%%dcount%%"') do (
      cd "%%i" 
      call:dirtree "%%i" "%tcount%" "%%j" 
      cd .. 
     ) 
     set /a dcount-=1 
    ) 
    echo( %pre%] 
) 
if %ccount% equ 1 (echo %pre%}) else echo(%pre%}, 
endlocal 
goto:eof 

Использование: tree2json [startfolder] [>file.txt]

+0

КРАСИВАЯ! Все, что мне нужно было сделать, это добавить '' 'ко всем именам (IE' echo (% pre% type: "folder", '=' echo (% pre% "type": "folder", '), и мне нужно для запуска «заменить' \ 'на'/'. Большое спасибо: D –

+0

« replace »' \ 'с'/'** –

+0

Привет, но у меня нет« \ »в моем коде, что вы имеете в виду? ? – Endoro

Смежные вопросы