【问题标题】:Cmd tree to JsonCmd 树到 Json
【发布时间】:2013-04-13 16:30:21
【问题描述】:

我有一个带有文件夹结构的文本文件:

+---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

我使用tree 命令从windows CMD 收到它。 我想知道是否有一种简单的方法可以将此结构转换为json

对于这样的事情,手动完成并不难,但我需要为 12TB 文件夹执行此操作。

【问题讨论】:

    标签: windows json command-line tree


    【解决方案1】:

    好的,我对 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]

    【讨论】:

    • 漂亮!我所要做的就是将" 添加到所有名称(即echo( %pre%type: "folder", = echo( %pre%"type": "folder",),我需要运行“替换` with /`。非常感谢:D
    • “替换”\ / **
    • 当您执行"%~f1" 时,它会提供文件夹的路径。该路径有\ ,显然Json 不喜欢它。 :P
    • 好的,我可以更改它并添加缺少的双引号(需要一些时间,我现在在平板电脑上).... :)
    猜你喜欢
    • 2017-09-03
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    相关资源
    最近更新 更多