如何创建Windows资源管理器右键菜单导出选中文件路径到文本文件
方案1:优化原批处理逻辑规避资源抢占
原问题根源是Windows会为每个选中文件单独启动批处理进程,多进程同时写入文件时触发锁冲突,失败进程直接退出导致路径漏写。可给写入逻辑增加失败重试机制,确保每个路径都成功写入后进程再退出:
@echo off :write_retry echo "%~f1" >> "%~dp1filelist-selected.txt" 2>nul if %errorlevel% equ 1 goto write_retry
说明:2>nul会屏蔽写入失败的报错信息,一旦检测到写入错误就自动循环重试,无需额外依赖即可解决资源抢占问题。
方案2:借助系统剪贴板/单进程调用实现
该方案完全规避多进程写入冲突问题,稳定性更高,有两种实现思路:
- 直接调用PowerShell单进程处理所有选中文件,注册表右键菜单的命令填写如下内容即可:
powershell.exe -Command "$paths = $args; $savePath = Join-Path (Split-Path $paths[0].FullName -Parent) 'filelist-selected.txt'; $paths | ForEach-Object { "`"$($_.FullName)`"" } | Out-File $savePath -Encoding UTF8" %*
PowerShell支持一次性接收所有选中文件作为参数,单进程即可完成全部路径的写入,不存在资源抢占问题。
- 搭配「复制为路径」功能使用:先配置右键菜单常驻显示「复制为路径」选项,选中文件点击该选项复制所有路径到剪贴板后,再新增一个右键菜单项执行如下命令,直接读取剪贴板内容写入文件:
powershell.exe -Command "$paths = Get-Clipboard; $savePath = Join-Path (Split-Path $paths[0].Trim('"') -Parent) 'filelist-selected.txt'; $paths | Out-File $savePath -Encoding UTF8"
内容的提问来源于stack exchange,提问作者Hunnicatt
相关产品推荐
相关产品推荐

