我正在编写一个Windows脚本,而我正在尝试获取特定进程的打开文件列表。 Sysinternals的' handle.exe
似乎工作正常但仅用于ascii文件名。对于非ascii字符,它会打印问号。 cmd.exe如何显示内容并不是问题; handle.exe用"?"替换非ascii字符。 (字符0x3F)[1]。
注意[1] dir
在同一个cmd.exe上显示文件名就好了。要100%确定我已发出此命令handle.exe > c:\temp.txt
,然后使用十六进制编辑器查看temp.txt。它确实有字节0x3F代替非ascii字符。
答案 0 :(得分:0)
可以使用openfiles
执行此任务。默认情况下,openfiles仅报告由文件服务打开的文件,但在启用*称为维护对象列表的功能后,它将报告所有打开的文件。
它有两个缺点:
根据Microsoft "启用维护对象列表全局 flag可能会降低您的系统速度" 。
您可以告诉handle.exe仅查询特定的打开文件
进程但openfiles.exe始终查询所有内容。我找到了openfiles
在这种情况下,handle.exe
要慢几秒。
非常感谢eryksun提出openfiles。不幸的是,他无法发布答案。
备注强>
*:您需要运行openfiles /local on
并重新启动