最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python實現(xiàn)一個Windows Tree命令工具

 更新時間:2025年06月13日 11:14:41   作者:loveCode  
今天想要在Windows平臺的CMD命令終端窗口中使用像Linux下的tree命令,打印一下目錄結(jié)構(gòu)層級樹,然而還真有tree命令,但是發(fā)現(xiàn)似乎并不好用,支持的參數(shù)很少,比如基本的-l 指定打印層級的參數(shù)也不支持,所以想用Python簡單實現(xiàn)一個,需要的朋友可以參考下

引言

今天想要在Windows平臺的CMD命令終端窗口中使用像Linux下的tree命令,打印一下目錄結(jié)構(gòu)層級樹。然而還真有tree命令,但是發(fā)現(xiàn)似乎并不好用,支持的參數(shù)很少,比如基本的-l 指定打印層級的參數(shù)也不支持。

tree 命令格式和參數(shù):

tree[drive:][path] [/F] [/A]

  • /F 顯示每個文件夾中文件的名稱。(帶擴展名)
  • /A 使用 ASCII 字符,而不使用擴展字符。(如果要顯示中文,例如 tree /f /A >tree.txt)

于是就想著使用Python簡單實現(xiàn)一個。

實現(xiàn)代碼

import os
import argparse
from collections import deque

def tree(directory, max_level=None, show_files=True, skip_names=None, current_level=0, prefix=''):
    """
    遞歸生成目錄樹結(jié)構(gòu)
    
    :param directory: 要顯示的目錄路徑
    :param max_level: 最大顯示層級,None表示不限制
    :param show_files: 是否顯示文件
    :param skip_names: 要跳過的目錄或文件名列表
    :param current_level: 當(dāng)前層級(內(nèi)部遞歸使用)
    :param prefix: 前綴字符串(內(nèi)部遞歸使用)
    :return: None
    """
    if max_level is not None and current_level > max_level:
        return
    
    # 獲取目錄下的所有條目并排序
    try:
        entries = os.listdir(directory)
    except PermissionError:
        print(prefix + "└── [Permission Denied]")
        return
    
    entries = sorted(entries, key=lambda x: x.lower())
    
    # 過濾出目錄和文件,并跳過指定名稱
    dirs = []
    files = []
    
    for entry in entries:
        if skip_names and entry in skip_names:
            continue
        entry_path = os.path.join(directory, entry)
        if os.path.isdir(entry_path):
            dirs.append(entry)
        elif show_files:
            files.append(entry)
    
    all_entries = dirs + files
    entries_count = len(all_entries)
    
    for i, entry in enumerate(all_entries):
        is_last = i == entries_count - 1
        entry_path = os.path.join(directory, entry)
        
        # 當(dāng)前條目的前綴
        if is_last:
            connector = "└── "
            new_prefix = prefix + "    "
        else:
            connector = "├── "
            new_prefix = prefix + "│   "
        
        print(prefix + connector + entry)
        
        # 如果是目錄,遞歸顯示
        if os.path.isdir(entry_path):
            tree(entry_path, max_level, show_files, skip_names, current_level + 1, new_prefix)

def main():
    # 設(shè)置命令行參數(shù)解析
    parser = argparse.ArgumentParser(description='顯示目錄樹結(jié)構(gòu),類似Linux的tree命令')
    parser.add_argument('directory', nargs='?', default='.', help='要顯示的目錄(默認(rèn)為當(dāng)前目錄)')
    parser.add_argument('-l', '--level', type=int, help='限制顯示的目錄層級深度')
    parser.add_argument('-f', '--files', action='store_true', help='同時顯示文件')
    parser.add_argument('-s', '--skip', action='append', help='要跳過的目錄或文件名(可多次使用)')
    
    args = parser.parse_args()
    
    # 檢查目錄是否存在
    if not os.path.isdir(args.directory):
        print(f"錯誤: 目錄 '{args.directory}' 不存在")
        return
    
    # 顯示目錄樹
    print(args.directory)
    tree(args.directory, args.level, args.files, args.skip)

if __name__ == '__main__':
    main()

使用說明

  • 將上述代碼保存為 tree.py
  • 通過命令行運行:
python tree.py [目錄路徑] [選項]

:warning: 需要注意的是,前提是你的電腦環(huán)境需要安裝Python解釋器。

可用選項

  • -l LEVEL--level LEVEL: 限制顯示的目錄層級深度
  • -f--files: 同時顯示文件(默認(rèn)只顯示目錄)
  • -s--skip 參數(shù),可以指定要跳過的目錄或文件名
    • 該參數(shù)可以多次使用,跳過多個名稱
    • 跳過規(guī)則同時適用于目錄和文件(如果 -f 參數(shù)啟用)

示例用法

顯示當(dāng)前目錄樹結(jié)構(gòu)(只顯示目錄):

python tree.py

顯示指定目錄的樹結(jié)構(gòu)(顯示文件和目錄):

python tree.py C:\Users -f

顯示當(dāng)前目錄的2層深度:

python tree.py -l 2

顯示指定目錄的3層深度并包含文件:

python tree.py C:\Projects -l 3 -f

跳過 node_modules 目錄:

python tree.py -s node_modules

跳過多個目錄/文件:

python tree.py -s node_modules -s .git -s .DS_Store

組合使用多個參數(shù):

python tree.py C:\Projects -l 3 -f -s bin -s obj -s test

功能特點

  • 支持類似Linux的tree命令輸出格式
  • 支持限制顯示層級深度(-l參數(shù))
  • 可選擇是否顯示文件(-f參數(shù))
  • 正確處理權(quán)限問題(遇到無權(quán)限訪問的目錄會標(biāo)注)
  • 輸出結(jié)果按字母順序排序
  • 美觀的樹形結(jié)構(gòu)顯示

這個工具在Windows平臺上提供了類似Linux tree命令的功能,可以根據(jù)需要顯示目錄結(jié)構(gòu),并且通過-l參數(shù)可以限制顯示的層級深度等。

添加到環(huán)境變量

通過以上代碼我們就可以實現(xiàn)了一個基本的tree命令工具,但是在Windows平臺上的cmd控制臺中使用時,每次都需要python tree.py這樣使用也太麻煩了吧,可不可以像在Linux那樣直接就可以使用tree命令呢?當(dāng)然!

要將Python tree腳本添加到環(huán)境變量中,使其可以在任何目錄下直接通過tree命令調(diào)用,需要完成以下幾個步驟:

方法一:創(chuàng)建批處理文件并添加到PATH

1. 創(chuàng)建批處理文件

  • 創(chuàng)建一個新的文本文件,命名為tree.bat
  • 編輯內(nèi)容如下(根據(jù)你的Python安裝路徑調(diào)整):
@echo off
python "C:\path\to\your\tree.py" %*

或者如果你想要確保使用特定的Python解釋器:

@echo off
"C:\Python39\python.exe" "C:\path\to\your\tree.py" %*

%*表示傳遞所有參數(shù)給Python腳本

2. 將批處理文件放入系統(tǒng)目錄

tree.bat文件放入以下任一目錄:

  • C:\Windows\System32 (需要管理員權(quán)限)
  • C:\Windows (需要管理員權(quán)限)
  • 或者任何已在PATH環(huán)境變量中的目錄

3. 或者添加到PATH環(huán)境變量

如果你不想放入系統(tǒng)目錄,可以:

  • 創(chuàng)建一個專用目錄存放你的自定義腳本(如C:\MyScripts
  • 將此目錄添加到PATH環(huán)境變量中:
    • 右鍵"此電腦" → 屬性 → 高級系統(tǒng)設(shè)置 → 環(huán)境變量
    • 在"系統(tǒng)變量"部分找到"Path",點擊編輯
    • 點擊"新建",添加你的目錄路徑(如C:\MyScripts
    • 點擊確定保存所有對話框

方法二:直接創(chuàng)建可執(zhí)行文件(推薦)

1. 使用PyInstaller打包成exe

安裝PyInstaller:

pip install pyinstaller

打包你的腳本:

pyinstaller --onefile --name mtree.exe tree.py

打包完成后,在dist目錄下會生成mtree.exe文件

2. 將exe文件放入PATH目錄

將生成的mtree.exe文件放入:

  • C:\Windows\System32
  • 或任何已在PATH環(huán)境變量中的目錄

方法三:創(chuàng)建Python包并安裝(高級)

1. 添加shebang和設(shè)置可執(zhí)行權(quán)限

  • tree.py文件開頭添加shebang行:
#!/usr/bin/env python
  • 將文件重命名為tree(無擴展名)
  • 將文件放入PATH目錄中

2. 或者創(chuàng)建setup.py安裝為Python包

創(chuàng)建setup.py文件:

from setuptools import setup

setup(
    name='tree-cmd',
    version='1.0',
    scripts=['tree.py'],
)

安裝:

pip install --editable .

驗證安裝

:tipping_hand_man: 需要說明的是,我僅嘗試使用了方法二直接創(chuàng)建可執(zhí)行文件的方式,并且測試可行,其它方式有興趣的你可以試試。

  • 打開新的命令提示符窗口(重要,使環(huán)境變量生效)
  • 在任何目錄下輸入:
tree
  • 或測試帶參數(shù)的命令:
tree -l 2 -f -s node_modules

注意事項

  • 如果使用Python方法,確保Python已添加到PATH環(huán)境變量
  • 修改環(huán)境變量后需要重啟命令提示符才能生效
  • 如果遇到權(quán)限問題,可能需要以管理員身份運行命令提示符
  • 方法二(打包成exe)是最獨立的方式,不依賴Python環(huán)境

這樣設(shè)置后,你就可以像使用系統(tǒng)命令一樣在任何位置使用你的tree腳本了。

Tree for Windows

補充一下,先是在網(wǎng)絡(luò)找了一下可能有的成熟工具或者解決方案,這里看的了這個工具,但是我沒用。因為上面的腳本滿足了我的需求并且可以自行擴展。

安裝Tree for Windows工具:

  • 打開進(jìn)入 Tree for Windows 頁面,選擇下載 Binaries zip 文件。
  • 解壓壓縮包,找到壓縮包內(nèi)的 bin 目錄,將 bin 目錄下的 tree.exe 復(fù)制
  • 找到 C:\\Program Files\Git\usr\bin 目錄,將 tree.exe 粘貼到該目錄下,安裝即完成

tree命令行參數(shù):

  • -a 顯示所有文件和目錄。
  • -A 使用ASNI繪圖字符顯示樹狀圖而非以ASCII字符組合。
  • -C 在文件和目錄清單加上色彩,便于區(qū)分各種類型。
  • -d 顯示目錄名稱而非內(nèi)容。
  • -D 列出文件或目錄的更改時間。
  • -f 在每個文件或目錄之前,顯示完整的相對路徑名稱。
  • -F 在執(zhí)行文件,目錄,Socket,符號連接,管道名稱名稱,各自加上"*","/","=","@","|“號。
  • -g 列出文件或目錄的所屬群組名稱,沒有對應(yīng)的名稱時,則顯示群組識別碼。
  • -i 不以階梯狀列出文件或目錄名稱。
  • -I 不顯示符合范本樣式的文件或目錄名稱。
  • -l 如遇到性質(zhì)為符號連接的目錄,直接列出該連接所指向的原始目錄。
  • -n 不在文件和目錄清單加上色彩。
  • -N 直接列出文件和目錄名稱,包括控制字符。
  • -p 列出權(quán)限標(biāo)示。
  • -P 只顯示符合范本樣式的文件或目錄名稱。
  • -q 用”?"號取代控制字符,列出文件和目錄名稱。
  • -s 列出文件或目錄大小。
  • -t 用文件和目錄的更改時間排序。
  • -u 列出文件或目錄的擁有者名稱,沒有對應(yīng)的名稱時,則顯示用戶識別碼。
  • -x 將范圍局限在現(xiàn)行的文件系統(tǒng)中,若指定目錄下的某些子目錄,其存放于另一個文件系統(tǒng)上,則將該子目錄予以排除在尋找范圍外。

以上就是基于Python實現(xiàn)一個Windows Tree命令工具的詳細(xì)內(nèi)容,更多關(guān)于Python Windows Tree命令工具的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于python內(nèi)置函數(shù)與匿名函數(shù)詳解

    基于python內(nèi)置函數(shù)與匿名函數(shù)詳解

    下面小編就為大家分享一篇基于python內(nèi)置函數(shù)與匿名函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • python實現(xiàn)連連看輔助之圖像識別延伸

    python實現(xiàn)連連看輔助之圖像識別延伸

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)連連看輔助之圖像識別延伸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 在Python的Flask框架中構(gòu)建Web表單的教程

    在Python的Flask框架中構(gòu)建Web表單的教程

    Flask框架中自帶一個Form表單類,通過它的子類來實現(xiàn)表單將相當(dāng)愜意,這里就為大家?guī)鞵ython的Flask框架中構(gòu)建Web表單的教程,需要的朋友可以參考下
    2016-06-06
  • 使用Python刪除Word中表格的方法

    使用Python刪除Word中表格的方法

    在處理Word文檔時,我們經(jīng)常會遇到需要刪除表格的情況,無論是為了簡化文檔結(jié)構(gòu),還是為了更新內(nèi)容,刪除表格都是一個常見的操作,本文將介紹如何使用Python通過編程刪除Word中的表格,需要的朋友可以參考下
    2024-11-11
  • Pandas之Fillna填充缺失數(shù)據(jù)的方法

    Pandas之Fillna填充缺失數(shù)據(jù)的方法

    這篇文章主要介紹了Pandas之Fillna填充缺失數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • python 如何設(shè)置守護進(jìn)程

    python 如何設(shè)置守護進(jìn)程

    這篇文章主要介紹了python 如何設(shè)置守護進(jìn)程,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-10-10
  • python中random隨機函數(shù)詳解

    python中random隨機函數(shù)詳解

    大家好,本篇文章主要講的是python中random隨機函數(shù)詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • python 裝飾器的實際作用有哪些

    python 裝飾器的實際作用有哪些

    這篇文章主要介紹了python 裝飾器的實際作用有哪些,幫助大家更好的理解和學(xué)習(xí)python裝飾器,感興趣的朋友可以了解下
    2020-09-09
  • Python 2.7.x 和 3.x 版本的重要區(qū)別小結(jié)

    Python 2.7.x 和 3.x 版本的重要區(qū)別小結(jié)

    這篇文章主要介紹了Python 2.7.x 和 3.x 版本的重要區(qū)別小結(jié),需要的朋友可以參考下
    2014-11-11
  • 使用python制作一個解壓縮軟件

    使用python制作一個解壓縮軟件

    這篇文章主要介紹了python制作一個解壓縮軟件的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11

最新評論

辽宁省| 汶川县| 望奎县| 台前县| 安义县| 土默特右旗| 东海县| 米泉市| 汨罗市| 西峡县| 龙江县| 防城港市| 五大连池市| 汨罗市| 涟源市| 华坪县| 巴里| 凤城市| 南投市| 昌黎县| 镇原县| 遵义县| 宜章县| 桑植县| 弥勒县| 大厂| 通许县| 宝清县| 青神县| 吉林市| 济源市| 南昌县| 宣汉县| 金堂县| 南涧| 水城县| 长阳| 福安市| 海林市| 陈巴尔虎旗| 临沧市|