source

후행 공백이 있는 Windows 7(윈도우 7)에서 폴더를 삭제할 수 없습니다.

manysource 2023. 9. 17. 13:18

후행 공백이 있는 Windows 7(윈도우 7)에서 폴더를 삭제할 수 없습니다.

문제: 삭제할 수 없는 Windows 7(윈도우 7) 하위 디렉토리가 있습니다.

저는 여기에 있는 다른 사람들과 인터넷의 다른 많은 곳에 있는 많은 사람들이 이 일반적인 종류의 Windows 7 파일 시스템 문제에 대해 물었지만, 여기에 있는 제 질문은 특히 디렉토리 이름에 뒷줄 공간이 있는 Windows 7의 삭제할 수 없는 파일의 특정 클래스에 관한 것입니다.

파일 시스템을 검사 및/또는 편집할 수 있는 더 나은 도구(필요한 경우 16진수로 표시)가 있습니까?


OS: x64 프로페셔널을 실행하고 있는데 완전히 업데이트되었습니다.

시도된 내용:저는 이 주제에 대해 많은 웹페이지를 읽었고 많은 잠재적인 해결책을 시도했습니다.저는 시스템 내부를 충분히 처리할 수 있을 것으로 보이는 PowerShell을 사용하여 가장 최근에 문제를 연구하고 있습니다.이 시점에서 저는 파일 시스템용 헥스 에디터 같은 것을 찾고 있습니다.

원인이 아닌 것:

  • 긴 파일 이름, 또는
  • 긴 길에 위치함으로써

다음에 의해 해결되지 않는 사항:

  • 이전 DOS 파일 이름 지정 체계를 사용하여 이름 변경
  • 전체 파일 시스템의 CHKDSK 실행
  • 액세스할 수 있는 다른 모든 프로그램 종료
  • 바이러스 소프트웨어 실행 중지
  • Delinv 파일을 사용합니다.exe 4.5 유틸리티.참고: Delinvfile에서는 "이름이 짧은 파일 및 폴더에 잘못된 문자가 포함되어 있습니다.여기에는 [파일 이름에서 허용되지 않는] 문자가 포함됩니다.
<  -  Less than symbol
>  -  Greater than symbol
:  -  Colon
"  -  Quotation Mark
/  -  Forward Slash
|  -  Vertical Bar
?  -  Question mark
*  -  Asterisk

무슨 일이 일어났습니까?제 경우에는 삭제 불가능한 하위 디렉토리가 몇 달 전에 소스 트리 백업에 사용하는 사용자 지정 PHP 프로그램으로 생성되었습니다.이름에 띄어쓰기나 다른 나쁜 글자가 있는 것 같은데 확실하지는 않습니다.파일 디렉토리에는 표시되지만 삭제, 이름 변경, rmdir 등은 사용할 수 없습니다.

조사:파일 시스템에서 이동할 수 있으며 C:의 'holds bad subdir'라는 하위 디렉토리에 배치했습니다.

여기서 PowerShell로 확인할 수 있습니다.먼저 Get-ChildItem('dir'라는 별칭과 동일)과 함께 표시합니다.

PS C:\holds bad subdir> Get-ChildItem


    Directory: C:\holds bad subdir


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        1/9/2014   3:01   AM            20120530-04

del "2" + tab을 입력하여 cmd 창에서 삭제하려고 하면 del "20120530-04"와 같이 파일 이름 확장을 완료하여 디렉토리 이름 끝에 공백이 있음을 보여줍니다.이 명령을 실행하면 결과는 다음과 같습니다.

C를 찾을 수 없습니다:\holds bad subdir\20120530-04

del 2*로 삭제하려고 하면 시스템이 삭제한 것처럼 되돌아오지만, 그렇지 않습니다.

한 명령을 실행하는 한 을 할 에서 Force옵션은 "지정된 경로 C:\holds bad subdir\20120530-04에 있는 개체가 존재하지 않습니다"라고 보고합니다.

PS C:\holds bad subdir> Remove-Item 2* -Force  Remove-Item : An object at the specified path C:\holds bad subdir\20120530-04  does not exist.At line:1 char:1
+ Remove-Item 2* -Force
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Remove-Item], PSArgumentException
    + FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.RemoveItemCommand

이것은 디렉토리가 명확하게 볼 수 있기 때문에 약간 이상하지만, 분명히 어떤 방법도 볼 수 없거나 적용할 수 없습니다.

Windows 탐색기에서 삭제할 수 없는 하위 디렉터리도 볼 수 있습니다.검색하면 "이 폴더는 비어 있습니다"라고 표시됩니다.삭제하려고 하면 다음과 같은 결과가 나옵니다.

Enter image description here

또한 이 폴더의 속성을 보면 이름이 "20120530-04", 즉 마지막에 여분의 공간이 있는 것을 볼 수 있습니다.

Enter image description here

또한 흥미롭게도 보안 탭에는 "(X) 요청한 보안 정보를 사용할 수 없거나 표시할 수 없습니다."라고 표시됩니다.

읽기 전용도 아니고 숨겨진 것도 아닙니다.


발행범위:이제, 이것은 큰 문제가 아닙니다. 이 하위 디렉토리를 외부 하위 디렉토리에 저장하고 걱정하지 않는 것이 쉽습니다.

하지만 저는 이것이 지적인 문제로 바뀌었고, 부분적으로는 Windows 7의 장점에 대해 자세히 알아볼 수 있는 방법이 되었습니다.윈도우의 그런 버그가 이렇게 낮은 수준으로 존재할 수 있다는 것과 세상에 이렇게 많은 시스템이 설치되어 있다는 것이 놀랍다고 생각합니다.이 시점에서 이것이 Windows 버그인지, 잘못된 데이터인지(버그가 들여온 것인지), 아니면 단지 잘못된 데이터인지 알기가 어렵습니다.

NTFS 파일 시스템 볼륨의 파일 또는 폴더를 삭제할 수 없음(JavaScript를 표시해야 함)에 따르면 다음이 작동해야 합니다(UNC 경로를 사용함).

rd "\\?\C:\holds bad subdir\20120530-04 "

cmd.exe로 해야 합니다.PowerShell의 Remove-Item(rd)에서는 작동하지 않는 것 같습니다.

참고 항목:

몇 가지 제안이 있습니다.

방법 1: 기본값Pathcmdlet의 parameter는 특수문자에 문제가 있는 것으로 알려져 있습니다.LiteralPath그러나 모든 캐릭터를 지원해야 하며 종종 당신이 가지고 있는 것과 같은 문제를 해결합니다.

Get-ChildItem 2012* | % { Remove-Item -LiteralPath $_.FullName -Force }

방법 2: 폴더에 short name (8.3 filename)을 사용할 수 있습니다.이거는.cmd.exe접근.두 명령어를 안에 포장할 수도 있습니다.cmd /c " YOUR COMMAND "파워셸에서 실행할 수 있습니다.

D:\> dir /x
 Volume in drive D is Storage
 Volume Serial Number is *******

 Directory of D:\

12.01.2014  12:29    <DIR>          APPLEI~1     Apple iOS 7 GM


D:\> rd /s d:\APPLEI~1
 d:\applei~1, Are you sure (Y/N)? y

방법 3: WMI 접근 방식이 작동하는지 여부도 확인할 수 있습니다.

#Remember to use \\ instead of \ in the path
$fold = Get-WmiObject -Query "select * from Win32_Directory where Name = 'C:\\holds bad subdir\\20120530-04'"
$fold

아무것도 반환되지 않으면 파일 이름 끝에 공백을 추가합니다.개체를 반환하는 경우 다음을 실행합니다.

$fold.Delete()

공간이 있는 경우와 없는 경우 모두 개체를 반환하지 않는 경우 와일드카드를 사용하여 다음과 같은 접근 방식을 시도합니다(실행하는 데 1-15분이 걸릴 수 있습니다).

#Remember to use \\ instead of \ in the path
$fold = Get-WmiObject -Query "select * from Win32_Directory where Name like 'C:\\holds bad subdir\\20120530-04%'"
$fold

그리고 올바른 폴더를 반환할 경우 삭제합니다.

$fold.Delete()

해보셨습니까?

rd "C:\holds bad subdir\20120530-04 "

아니면

rd /s "C:\holds bad subdir"

당신은 당신이 노력해봤다고 말했습니다.del파일은 삭제했지만, 당신은 언급하지 않았습니다.rd또는 그 동의어.rmdir디렉토리를 제거합니다.

Live Linux Ubuntu CDROM을 부팅하고 해당 파일 관리자가 어떻게 작동하는지 확인합니다.

윈도우는 후행 공간은 지원하지 않지만 선행 공간은 지원합니다.

부모 디렉토리에서 유용한 번역을 속이기 위해 다음을 수행합니다.CMD작업 중:

for /f "delims=" %i in ('dir /b /ad') do rd /s /q "%i"

(당신이 그곳에 있는 동안, 시도해보는 것은 나쁘지 않을 것입니다."%~si"(대상으로서도...)

언급URL : https://stackoverflow.com/questions/21072767/cant-delete-a-folder-on-windows-7-with-a-trailing-space