2017-10-31 1 views
0

Windows 스크립트를 작성 중이며 특정 프로세스에 대한 열린 파일 목록을 가져 오려고합니다. Sysinternals의 handle.exe은 잘 작동하지만 ASCII 파일 이름은 인 것 같습니다. ASCII 문자가 아닌 문자의 경우 물음표가 인쇄됩니다. cmd.exe가 어떻게 표시하는지는 문제가 아닙니다. handle.exe는 비 ASCII 문자를 "?"로 바꿉니다. (문자 0x3F) [1].Windows : ASCII가 아닌 파일 이름에 대한 열린 파일 목록


참고 [1] 동일한 cmd.exe를 디스플레이에dir 잘는 파일 이름. 100 % 확실하게하려면이 명령을 handle.exe > c:\temp.txt으로 실행 한 다음 16 진수 편집기로 temp.txt를 봅니다. 비 ASCII 문자 대신 실제로 0x3F 바이트가 있습니다.

+0

이 보이는 재부팅해야합니다. –

+0

ASCII가 아닌 ANSI를 강조 표시합니다. 'chcp'로 가십시오. handle.exe는 해당 문자 집합의 모든 문자를 정상적으로 표시해야합니다. PowerShell을 사용해보십시오. –

+0

handle.exe는 ANSI 출력을 사용하도록 하드 코드되어 있습니다. 콘솔 코드 페이지를 사용하지 않습니다. – eryksun

답변

0

이 작업에는 openfiles을 사용할 수 있습니다. 기본적으로 openfiles는 파일 서비스에 의해 열린 파일 만보고하지만 객체 유지 관리이라는 기능을 활성화하면 모든 열린 파일을보고합니다.

그것은하지만 두 가지 단점이 있습니다

  1. Microsoft "시스템 속도가 느려질 수 있습니다 개체 목록을 유지 글로벌 플래그를 활성화"에 따르면합니다.

  2. 특정 프로세스의 열린 파일 만 쿼리하도록 handle.exe에 지시 할 수 있지만 openfiles.exe는 항상 모든 것을 쿼리합니다. 나는 openfiles가 그러한 경우 handle.exe보다 몇 초 더 느리다는 것을 알았습니다.

openfiles를 제안한 eryksun에게 감사드립니다. 불행히도 그는 답변을 게시 할 수 없었습니다.


참고

* : 당신은 openfiles /local on을 실행하고`handle.exe`는 ANSI-응용 프로그램이며, 유니 코드를 사용할 수 없습니다처럼

관련 문제