Python 遍历文件夹并打印文件列表

2021年3月1日


遍历并输出文件清单

脚本目的

  1. 文件清单输出到控制台
  2. 文件清单输出到文本文件

脚本用法:

file_list_print.py -p d:/linux  //-p 输出到控制台
file_list_print.py -f d:/linux  //-f 输出到文本文件

代码

# 如果没有输入目录参数,则遍历打印脚本所在目录
# 如果输入了目录参数,则遍历打印输入目录所有目录和文件

import os
import sys
p_or_f = ""     # 打印 或者 输出到文件
str_list = ""   # 列表内容字符串

def func(filepath, n): 
    global str_list     # 声明 str_list 为全局,否则报错

    # 1,打开这个文件夹
    files = os.listdir(filepath)
    # 2. 拿到每一个文件名
    for file in files:  # 文件名
        # 3. 获取到路径
        f_d = os.path.join(filepath, file)
        # 4. 判断是否是文件夹
        if os.path.isdir(f_d):
            # 5. 如果是文件夹. 继续再来一遍
            if p_or_f == "-p":
                print("\t"*n, file,":") # 打印文件名
            else:
                str_list += "\t"*n + file + ":\n"
            func(f_d, n + 1)
        else:   #  不是文件夹. 普通文件
            if p_or_f == "-p":
                print("\t"*n, file)
            else:
                str_list += "\t"*n + file + "\n"

def f_tips():
    print("用法: file_list_print <参数1> <参数2>")
    print("参数1: -p   打印列表")
    print("       -f   输出列表到 文件列表.txt")
    print("参数2: 目录名,例如 f:\\linux")

# 测试 输入 参数
# sys.argv.extend(["-f",'f:\\linux'])
# 下面两行代码等同于上面一行代码
#sys.argv.append("-f")
#sys.argv.append("f:\\linux")

if len(sys.argv) < 3:
    f_tips()
    os._exit(0)
else:
    p_or_f = sys.argv[1]
    if  p_or_f not in ["-p","-f"]:
        f_tips()
        os._exit(0)

    path = sys.argv[2]
    if not os.path.exists(path):
        f_tips()
        os._exit(0)

func(path,0)

if p_or_f == "-f":
    with open(os.path.join(path, '文件列表.txt'),'w') as f:    #设置文件对象
        f.write(str_list)   #将字符串写入文件中
        f.close()

    print("文件列表已写入 文件列表.txt 文件.")

Python 脚本加入 Windows 右键菜单

如果要将上面的 Python 脚本加入到 Windows 右键菜单,不能直接把 python file_list_print.py 这样的命令加入右键菜单,需要首先把 Python 脚本先写入一个 Windows 批处理文件,在批处理文件中调用 Python 脚本,然后把这个批处理文件加入Windows 邮件菜单。

实现目标

在 `Windows 文件资源管理器`中点击文件夹或者文件夹背景,右键菜单中显示`生成文件列表`菜单项,选择`生成文件列表`项后,自动调用 上例 中的 Python 脚本,将所选目录下文件清单内容在当前目录下生成文本文件。
  • 自动生成调用批处理文件并加入Windows右键菜单的批处理文件内容
@ECHO OFF & PUSHD "%CD%" && CD /D "%~DP0"
>NUL 2>&1 REG.exe query "HKU\S-1-5-19" || (
    ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\Getadmin.vbs"
    ECHO UAC.ShellExecute "%~f0", "%1", "", "runas", 1 >> "%TEMP%\Getadmin.vbs"
    "%TEMP%\Getadmin.vbs"
    DEL /f /q "%TEMP%\Getadmin.vbs" 2>NUL
    Exit /b
)
echo **************************************************
echo 创建调用 Python 脚本的批处理文件 file_list_print.bat 
echo ************************************************** 
echo python %~dp0file_list_print.py %%1 %%2 > file_list_print.bat

SET /P ST=输入a添加右键菜单,输入d删除右键菜单:
if /I "%ST%"=="a" goto Add
if /I "%ST%"=="d" goto Remove
:Add
reg add "HKEY_CLASSES_ROOT\Directory\shell\file_list_print" /f /ve /d "生成文件列表" 
reg add "HKEY_CLASSES_ROOT\Directory\shell\file_list_print\command" /f /ve /d "\"%~dp0file_list_print.bat\" -f \"%%L\""
reg add "HKEY_CLASSES_ROOT\Directory\Background\shell\file_list_print" /f /ve /d "生成文件列表" 
reg add "HKEY_CLASSES_ROOT\Directory\Background\shell\file_list_print\command" /f /ve /d "\"%~dp0file_list_print.bat\" -f \"%%V\""
exit
:Remove
reg delete "HKEY_CLASSES_ROOT\Directory\shell\file_list_print" /f
reg delete "HKEY_CLASSES_ROOT\Directory\Background\shell\file_list_print" /f
exit

将上面的内容保存为后缀为.bat的批处理文件,然后执行,执行结果:

  1. 当前目录下新建了一个名字为 file_list_print.bat 的批处理文件
  2. Windows 文件资源管理器中目录和目录背景的右键菜单中增加生成文件列表选项。

说明:

// 关于脚本中重点内容说明
%~dp0file_list_print.py %%1 %%2
//由于上例中的 Python 脚本执行时需要传入两个参数,因此设置两个参数 `%1 %2`,
//需要根据自己脚本实际情况设置。 

"\"%~dp0file_list_print.bat\" -f \"%%L\"" 
"\"%~dp0file_list_print.bat\" -f \"%%V\""
//  \"%%L\""        传入参数:所选目录
//  \"%%V\""        传入参数:所选目录背景
//  -f              上例Python脚本允许必须传入的第一个参数,需要根据自己脚本实际情况设置。
慢读 慢生活

Slow Rhythm of Life.