이름이 C:\a.\
또는 C:\b.\
등 의 점으로 끝나는 맬웨어로 만든 폴더가 있습니다 .
명령으로 이러한 폴더를 제거 할 수있는 솔루션을 찾았 rd /q /s "C:\a.\"
지만 win API를 호출 RemoveDirectory
하면 반환 ERROR_FILE_NOT_FOUND
됩니다.
그런 디렉토리를 삭제하는 함수를 작성하는 방법이 궁금합니다.
내 자신의 Windows XP SP3 시스템에서 이와 같이 테스트합니다.
폴더를 생성하고 C:\>mkdir a..\\\
두 번 클릭하여이 폴더에 액세스 할 수 없습니다. 명령으로 제거 할 수 있습니다. rd /q /s "C:\a.\"
이 rd /q /s
명령이 호출 하는 Windows 시스템 API는 무엇 입니까?
답변
rd /s "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder."
답변
해결 방법 :
RemoveDirectory를 호출 할 때 경로 앞에 ” \\?\
” 문자열을 추가해야합니다 .
설명 :
점과 관련된 모든 것이 있습니다. MSDN에 따르면 NTFS 볼륨의 파일이나 폴더를 삭제할 수없는 특정 경우가 있습니다. 특히 Win32 네임 스페이스에서 파일 이름이 유효하지 않은 경우 (이 때문에 파일을 열 수 없습니다. Windows 탐색기의 일반적인 방법).
파일 이름에 유효하지 않은 이름이 포함 된 경우 파일을 삭제할 수 없습니다 (예 : 파일 이름 뒤에 공백이나 마침표가 있거나 파일 이름이 공백으로 만 구성됨). 이 문제를 해결하려면 적절한 내부 구문을 사용하는 도구를 사용하여 파일을 삭제하십시오. 다음과 같은 일부 도구와 함께 “\\? \”구문을 사용하여 이러한 파일에서 작업 할 수 있습니다.
del “\\? \ c : \ path_to_file_that contains a trailing space.txt”
이 문제의 원인은 원인 4와 유사합니다. 그러나 일반적인 Win32 구문을 사용하여 이름에 후행 공백이나 마침표가있는 파일을 열면 실제 파일이 열리기 전에 후행 공백이나 마침표가 제거됩니다. 따라서 “AFile.txt”와 “AFile.txt”(파일 이름 뒤의 공백)라는 동일한 폴더에 두 개의 파일이있는 경우 표준 Win32 호출을 사용하여 두 번째 파일을 열려고하면 대신 첫 번째 파일. 마찬가지로 이름이 “”(공백 문자) 인 파일이 있고 표준 Win32 호출을 사용하여 파일을 열려고하면 파일의 상위 폴더를 대신 엽니 다. 이 상황에서 이러한 파일의 보안 설정을 변경하려고하면이 작업을 수행 할 수 없거나 다른 파일의 설정이 예기치 않게 변경 될 수 있습니다.
답변
나는 이것을 SU에 게시했고 여기에도 게시하기로 결정했습니다. 이를 달성하는 가장 간단하고 빠르고 쉬운 방법입니다. 나는 그것이 얼마나 단순한 지 지금 웃고있다.
- WinRAR 설치
- 그림에서 단계별 절차를 따르십시오.
나도 WinRaR을 설치 했으므로 해결 방법을 설명하기로 결정했습니다.
이 해결 방법은 7zip을 사용하여도 가능합니다.
내가 언급해야 할 또 다른 한 가지는 Windows 탐색기를 사용하여 문제가 발생하는 것으로 보이므로 다른 파일 브라우저 (winrar 파일 브라우저 자체, ftp 탐색기 등)가이 파일을 정상적으로 처리한다는 것입니다.
파일 브라우저를 사용하여 파일을 삭제하고 보관하지 않아도됩니다. 건배!
답변
이름은 “a.”이지만 실제 이름은 “a ..”입니다.
이 시도:
rd /q /s "C:\a..\"
다음 코드로 폴더를 탐색 할 수 있습니다.
for /f "tokens=3 delims=<>" %%a in ('dir /ad /x "C:\*" ^| findstr " a\.\.$"') do (
for /f "tokens=1" %%b in ("%%a") do start "" "%%~fb"
)