이름이 점 ( ".")으로 끝나는 폴더를 삭제하는 방법은 무엇입니까?


89

이름이 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는 무엇 입니까?


나는 이것이 Windows 업데이트 자체에 의해 Windows 10에서 여전히 발생한다고 믿을 수 없습니다 (업데이트 후 Windows.old를 삭제할 수 없음).
Damn Vegetables

답변:


147

이 문제에 대한 해결책은 다음과 같습니다 .

rd /s "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder."

1
질문은 API 함수가 폴더를 제거하기를 원하며 rd.
JCL

4
충분히 공평합니다-아마도 그것이 허용되는 답변으로 표시되지 않은 이유 일 수도 있지만, 그럼에도 불구하고 동일한 문제를 안고 있지만 우리가 rd를 사용할 수있는 사람들에게는 매우 유용합니다.
david.barkhuizen 2015

2
당신은 내 신경을 구했습니다. 감사합니다! : D
Benny Neugebauer

8
이것은 PowerShell이 ​​아닌 CMD.exe에서만 작동합니다
Lorne K

2
CMD.exe관리자 모드에서도 실행 을 시도하십시오. 권한이 상승되지 않은 명령 프롬프트에서 작동하지 않는 경우
greg

63

해결 방법 : RemoveDirectory를 호출 할 때 경로 앞에 " \\?\" 문자열을 추가해야합니다 .


설명 : 점과 관련된 모든 것이 있습니다. MSDN에 따르면 NTFS 볼륨의 파일이나 폴더를 삭제할 수없는 특정 경우가 있습니다. 특히 Win32 네임 스페이스에서 파일 이름이 유효하지 않은 경우 (이 때문에 파일을 열 수 없습니다. Windows 탐색기의 일반적인 방법).

파일 이름에 유효하지 않은 이름이 포함 된 경우 파일을 삭제할 수 없습니다 (예 : 파일 이름 뒤에 공백이나 마침표가 있거나 파일 이름이 공백으로 만 구성됨). 이 문제를 해결하려면 적절한 내부 구문을 사용하는 도구를 사용하여 파일을 삭제하십시오. 다음과 같은 일부 도구와 함께 "\\? \"구문을 사용하여 이러한 파일에서 작업 할 수 있습니다.
del "\\? \ c : \ path_to_file_that contains a trailing space.txt"
이 문제의 원인은 원인 4와 유사합니다. 그러나 일반적인 Win32 구문을 사용하여 이름에 후행 공백이나 마침표가있는 파일을 열면 실제 파일이 열리기 전에 후행 공백이나 마침표가 제거됩니다. 따라서 "AFile.txt"와 "AFile.txt"(파일 이름 뒤의 공백)라는 동일한 폴더에 두 개의 파일이있는 경우 표준 Win32 호출을 사용하여 두 번째 파일을 열려고하면 대신 첫 번째 파일. 마찬가지로 이름이 ""(공백 문자) 인 파일이 있고 표준 Win32 호출을 사용하여 파일을 열려고하면 파일의 상위 폴더를 대신 엽니 다. 이 상황에서 이러한 파일의 보안 설정을 변경하려고하면이 작업을 수행 할 수 없거나 다른 파일의 설정이 예기치 않게 변경 될 수 있습니다.

(출처 : http://support.microsoft.com/?kbid=320081 )


이름이 "."로 끝나는 파일을 삭제하도록 노력했습니다. 대단히 감사합니다!
AFract 2015 년

1
이 같은 번째로 델 전환 일rd "\\?\C:\Users\ahmed\Desktop\buggy."
guneysus

이것은 cmd에서 훌륭하게 작동하지만 PowerShell에 상응하는 것이 있습니까? rdpwsh에서 remove-item`\\? \`를 지원하지 않는 별칭입니다 .
Kagami Sascha Rosylight

1
물론입니다. 방금 PowerShell의 rd를 사용하여 이러한 파일을 삭제했는데 제대로 작동했습니다. 구문을 다시 확인하십시오.
SilverbackNet

와. 데이터 세트 (데이터 세트의 모든 파일 이름이 {IncrementalNumber}.) 에서 일부 자연어 처리를 시도하는 동안이 문제를 발견했으며 데이터 처리 스크립트가 실패한 이유에 대해 매우 혼란 스러웠습니다. 이것은 이제 의미가 있지만,이 동작이 너무 예상치 못한 것 같아서 응용 프로그램이 공백이나 마침표로 끝나는 파일 이름을 잘못 처리하기 때문에 보안에 영향을 미칠 수 있습니다.
Spencer D

46

나는 이것을 SU에 게시했고 여기에도 게시하기로 결정했습니다. 이를 달성하는 가장 간단하고 빠르고 쉬운 방법입니다. 나는 그것이 얼마나 단순한 지 지금 웃고있다.

  1. WinRAR 설치
  2. 그림에서 단계별 절차를 따르십시오.
  3. 여기에 이미지 설명 입력
  4. 여기에 이미지 설명 입력
  5. 여기에 이미지 설명 입력
  6. 여기에 이미지 설명 입력

나도 WinRaR을 설치 했으므로 해결 방법을 설명하기로 결정했습니다.
이 해결 방법은 7zip을 사용하여도 가능합니다.

내가 언급해야 할 또 다른 한 가지는 Windows 탐색기를 사용하여 문제가 발생하는 것으로 보이므로 다른 파일 브라우저 (winrar 파일 브라우저 자체, ftp 탐색기 등)가이 파일을 정상적으로 처리한다는 것입니다.
파일 브라우저를 사용하여 파일을 삭제하고 보관하지 않아도됩니다. 건배!


6
얼마나 창의적인 솔루션입니까!
Nosgoroth

8

이름은 "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"
)

8

git이 설치되어 있다면 ( 여기 에서 ir를 얻을 수 있습니다 ) 다음과 같이 간단합니다.

  1. 파일 탐색기를 문제가있는 폴더가있는 위치로 이동합니다.
  2. 컨텍스트 메뉴 (마우스 오른쪽 버튼)> Git Bash Here.
  3. rm -rf Foldername./

rm: cannot remove ‘.bin’: Directory not empty
Green

@Green 폴더 내용을 삭제할 수있는 권한이 있으면 해당 -rf부분에서 폴더 내용을 처리해야합니다.
Laurynas Lazauskas

5

나는 " WinRar "를 사용했다. 간단한 RAR, ZIP 프로세서. 모든 종류의 파일 이름 편집기를 사용할 수 있습니다. WinRar에 파일이있는 디렉토리를 열고 이름을 바꿀 파일 / 폴더를 마우스 오른쪽 버튼으로 클릭 한 후 이름 바꾸기를 선택하고 새 이름을 입력합니다.


그게 어떻게 도움이 될까요?
Tavo

1
파일 / 폴더를 찾아보고 파일 이름을 변경하는 데 도움을줍니다.
Aryan

1
이것은 실제로 나를 도왔습니다. WinRar를 사용하여 여러 파일의 압축을 푼 적이 있는데 그중 하나는 마침표로 끝나는 폴더를 포함합니다. Windows는 삭제하거나 이름을 바꿀 수 없지만 WinRar에서 문제없이 이름을 변경 한 다음 Windows 탐색기 (win 10)에서 삭제할 수 있습니다. 감사!
Nick May

2

잠금 해제 프로그램 을 사용 하여 정상적으로 삭제할 수없는 파일 및 폴더를 삭제하십시오.


3
언락 커가 어떻게 할 수 있는지 궁금합니다!
jerry.liu 2010

0

Windows 10의 Ubuntu에서 bash rm 명령 사용


rm: cannot remove ‘.bin’: Directory not empty
Green

0

파일을 유지하려면 bash에도 옵션이 있습니다.
Linux 용 Windows 하위 시스템 패키지가 필요합니다 (Ubuntu가 설치되어 있음).

파일을 보관합니다. 명령 프롬프트를 열고 파일 또는 폴더가있는 위치로 이동합니다.
이제 " bash"를 입력
하면 프롬프트에서 bash가 열립니다. 이제 입력하십시오 mv '[folder or file you want to move]' '[new name (can include path)]'(theres more to mv so if you want to read up
the all of its options use 'man mv'this will open its manual page ( the then use q to return to bash)) mv command is short for move, but its 이름을 바꾸는 보조 기능이 있습니다.
또한 bash에서는 bash가 '작은 따옴표'를 예상하므로 일반 "큰 따옴표"가 아닌 '작은 따옴표'를 사용합니다.

여기에 예가 있습니다. 폴더 이름이 " data 1."에 있다고 가정합니다 c:\users(따라서 오류 폴더의 전체 경로는 c:\users\data 1.
1 입니다 . 임의의 방법을 사용하여 명령 프롬프트를 엽니 다
. 2. cd c:\users
3을 입력합니다. 이제 3을 입력합니다. 이제 bash이전에 있던 폴더에 bash를로드합니다 .
4. 마지막으로 mv 'data 1.' 'data 1'
5를 입력 합니다. 이제 폴더에 액세스 할 수 있으며 삭제하도록 선택할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.