2017-04-07 18 views
-4

我已經發現在堆棧中像這樣sovelhing: Cmd tree to Json 我需要類似的東西,但也顯示子文件夾中的文件作爲孩子。 有誰知道如何改變它?與JSON的CMD樹與

+3

這是不是編碼問題,我們可以回答,而且是危險地接近*「請給我的代碼爲我」 * – abelenky

+0

這是一個不錯的代碼,有一個從我+1。你應該研究它並擴展自己。 – LotPings

回答

1

僅僅因爲我喜歡這個挑戰,我想我可以使用從JavaScript導入到JScript中的JSON方法作爲Batch + 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'));