【问题标题】:CMD tree to JSON with [closed]CMD 树到 JSON 与 [关闭]
【发布时间】:2017-09-03 02:32:03
【问题描述】:

我在堆栈中发现了类似的东西: Cmd tree to Json 我需要类似的东西,但也需要将子文件夹中的文件显示为子文件夹。 有人知道怎么改吗?

【问题讨论】:

  • 这不是我们可以回答的编码问题,并且危险地接近于“请为我编写代码”
  • 那是一段不错的代码,得到了我的 +1。你应该学习它并扩展自己。

标签: json batch-file command-line cmd tree


【解决方案1】:

仅仅因为我喜欢这个挑战,我想我可能会使用从 JavaScript 导入到 JScript 的 JSON 方法作为批处理 + JScript 混合来制作解决方案。正如其他人所说,对于未来的问题,我希望你能在代码中展示你的努力。

请注意,此脚本将在输出任何内容之前在内存中构建一个包含完整递归层次结构的对象。因此,它可能很慢。您在上面链接的纯文本解决方案可能会更快。我制作这个剧本的目的是为了满足我自己的好奇心。 :)

语法:

batfile.bat directory

directory 是可选的。如果省略,脚本会将当前目录视为层次结构的根目录。

脚本:

@if (@CodeSection == @Batch) @then
@echo off & setlocal

cscript /nologo /e:JScript "%~f0" "%~1"

goto :EOF
@end

var fso = WSH.CreateObject('Scripting.FileSystemObject'),
    htmlfile = WSH.CreateObject('htmlfile'),
    JSON = tree = Array = {},
    path = WSH.Arguments(0) || '.';

htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=9" />');
JSON = htmlfile.parentWindow.JSON;
Array = htmlfile.parentWindow.Array;
htmlfile.close();

function recurse(path) {
    var dir = fso.GetFolder(path),
        contents = new Array();

    for (var fc = new Enumerator(dir.SubFolders); !fc.atEnd(); fc.moveNext()) {
        var obj = {};
        obj[fc.item()] = recurse(fc.item());
        contents.push(obj[fc.item()]);
    }

    for (var fc = new Enumerator(dir.Files); !fc.atEnd(); fc.moveNext())
        contents.push(fso.GetFileName(fc.item()));

    var obj = {};
    obj[dir] = contents;
    return obj;
}

tree = recurse(path);

WSH.Echo(JSON.stringify(tree, null, '\t'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2014-01-26
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多