我查看了类似帖子的答案,虽然问题看起来相同,但答案并不能满足我的需要。
我想要做的是通过关机时运行的批处理文件捕获打开的 Windows 资源管理器路径列表。
我的理由是,重启时重新打开 Explorer 进程的设置并不总是有效,尤其是当计算机在糟糕的状态下关闭时。在这种情况下,自动进程可能也不会运行,但上次关机时的列表将有助于重建打开的文件夹。
我通常使用 PERL 进行解析,使用 DOS 进行脚本编写,尽管我也使用过其他语言。我尝试执行的自然语言脚本如下:
a) 提取正在运行的 explorer.exe 命令行列表,包括作为子进程运行的命令行。
b) 将文件路径解析成列表(PERL)。
c) 保存带有日期戳的流程日志文件。
d) 通过在列出的路径前添加 explorer.exe 命令来创建批处理文件脚本。
无论操作系统是否无法重新打开文件夹,步骤 C 都会提供正在进行的工作的记录。
如果启动过程失败,则可以执行步骤 D,只需单击即可将文件夹重建为最新已知状态。
我尝试过的:
最近文件夹等 - 这些列表与日期相关,不包括正在进行的项目的文件夹,即使它们是前一天重新打开的。这些文件夹被包括的唯一方式是它们最近被手动打开。此外,重新打开文件夹是一项繁琐的手动任务,其中列表可以轻松转换为批处理文件以一次性打开它们。
CMD 中的任务列表 - 此功能用于从“详细信息”选项卡中提取信息,而不是“进程”选项卡。对于 Windows 资源管理器,这意味着每个作为其自己的进程打开的资源管理器都将显示,但除了最新的窗口外,共享进程的任何资源管理器窗口都将被忽略。尽管设置为始终在新进程中打开,但至少有些最终处于这种共享状态,因为“在新窗口中打开”忽略了该设置。这些共享进程资源管理器在“进程”选项卡上细分为子进程,每个子进程都有文件夹路径。任务列表会忽略该信息。
我搜索了注册表以查找列表的存储,但找不到。设置与注册表频繁交互的东西并不令人兴奋,但我尝试了所有能想到的方法。
我确实尝试过一些在网上找到的 VB 脚本,但无法让它们正常运行。我对 VB 的了解不够深入,无法弄清楚原因,而且我的尝试现在很混乱,所以我认为在这里发布任何脚本都不会有帮助。这是我愿意走的路。我只是没有找到任何成功的方法,也无法编写自己的程序。
注意:我目前使用截图工具来制作列表的图像,但这受到限制,因为它是手动的,所以依赖于记忆,而且因为我必须手动输入文件夹名称或在资源管理器中浏览每个文件夹才能恢复状态。
感谢您帮助我找到解决方案。我发现很多人都在问这个问题(无论是在 StackExchange 还是其他地方),所以这个答案应该不仅仅对我的情况有用。
答案1
那么使用 powershell 怎么样? 类似这样的操作可以捕获打开的 Explorer 位置...
(New-Object -ComObject 'Shell.Application').Windows() | ForEach-Object {
$_.Document.Folder.Self.Path
}