遍历并输出文件清单
脚本目的
- 文件清单输出到控制台
- 文件清单输出到文本文件
脚本用法:
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
的批处理文件,然后执行,执行结果:
- 当前目录下新建了一个名字为
file_list_print.bat
的批处理文件 - 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脚本允许必须传入的第一个参数,需要根据自己脚本实际情况设置。