답변:
당신이 나 같은이 같은 문제를 해결하기 위해 추가 소프트웨어를 설치하는 마음에 들지 않으면, 내가 갈 것 XQYZ의 제안 과 사용 robocopy
문제를 해결하기 위해. (제 경우에는 robocopy가 / XJ를 robocopy에 제공하지 않고 재귀 연결 지점이있는 디렉토리를 복사하여 robocopy에 의해 문제가 발생했습니다).
c : \ subdir \ more \ offending_dir 에서 시작하는 디렉토리 트리를 삭제하려면 다음을 수행하십시오 .
전체 단계별 프로세스는 다음과 같이 간단합니다.
cd c:\subdir\more
부모 디렉토리로 들어갑니다.mkdir empty
빈 디렉토리를 만듭니다.robocopy empty offending_dir /mir
빈 디렉토리를 문제가되는 디렉토리로 미러링합니다.rmdir offending_dir
이제 빈 공세 디렉토리를 제거하고rmdir empty
중간의 빈 디렉토리를 제거하십시오.robocopy
접점과 혼동을 일으켰다. 엉망을 청소하는 방법을 보여 주셔서 감사합니다!
실제로 수정하는 것은 매우 간단합니다. 디렉토리 구조가 다음과 같다고 가정하십시오.
C:\Dir1\Dir1\Dir1\Dir1…
이 문제를 해결하려면 더 이상 삭제할 수 없을 때까지 각 폴더의 이름을 한 문자 폴더 이름으로 바꾸십시오.
C:\Dir1
로C:\D
C:\D\
C:\D\Dir1
로C:\D\D
C:\D\D\
다음은 프로세스를 자동화하는 배치 파일입니다 (이 간단한 버전은 질문에 설명 된 것과 같은 간단한 디렉토리, 특히 일회용 디렉토리에 가장 적합 함). 가능한 가장 높은 폴더를 전달하십시오 (예 : C:\Dir1
for C:\Dir1\Dir1\Dir1…
또는 C:\Users\Bob\Desktop\New Folder
for C:\Users\Bob\Desktop\New Folder\abcdefghi…
)
@echo off
if not (%1)==() cd %1
for /D %%i in (*) do if not %%i==_ ren "%%i" _
pushd _
%0
popd
기술 설명
다른 제안 된 솔루션은 거꾸로 있습니다. 가장 안쪽 디렉토리에서 바깥 방향으로 작업하여 문제를 해결할 수 없으므로 다른 방향으로 진행해야합니다.
디렉토리에 액세스하려고 할 때 명시 적이든 아니든 절대 경로를 사용하여 디렉토리에 온 모든 것을 포함합니다. 따라서와 같은 디렉토리 구조의 C:\Dir1\Dir1\Dir1\Dir1
경우 가장 안쪽 Dir1
에 대한 경로의 길이는 22입니다. 그러나 가장 바깥쪽에 대한 경로의 길이는 Dir1
7에 불과하므로 해당 디렉토리 경로의 내용에 따라 내용에 관계없이 여전히 액세스 할 수 있습니다. , 파일 시스템에는 포함 된 내용이나 파일이 하위 디렉토리의 전체 경로 길이에 미치는 영향에 대한 지식이 없으며 상위 디렉토리에만 있습니다. 전체 경로 길이가 너무 길면 디렉토리 이름을 바꿀 수 없습니다.
따라서 경로가 너무 길면 가능한 한 가장 높은 수준으로 이동하여 한 문자 이름으로 이름을 바꾸고 각 수준에 대해 반복해야합니다. 그렇게 할 때마다 경로의 총 길이가 이전 이름과 새 이름의 차이로 줄어 듭니다.
반대의 경우도 마찬가지입니다. 지원되는 최대 길이보다 큰 경로는 만들 수 없습니다 (DOS 및 Windows에서는 MAX_PATH = 260
). 그러나 가장 안쪽에서 바깥쪽으로 작업하여 더 긴 이름으로 디렉토리 이름을 바꿀 수 있습니다. 결과적으로 절대 경로가> 260 인 더 깊은 폴더에는 액세스 할 수 없습니다. (간단히 접근 할 수 있기 때문에 "숨겨 지거나"보안되지는 않습니다. 따라서이 방법을 사용하여 파일을 숨기지 마십시오.)
재미있는 사이드 노트
Windows 7 탐색기에서 폴더를 만드는 경우 탐색기를 사용하여 전체 길이가보다 긴 하위 디렉토리를 만들 수 MAX_PATH
있지만 실제로는 "DOS 8.3 파일 이름"을 사용하여 부정 행위를하는 것처럼 보일 수 있습니다 . 다음과 같은 트리를 작성하여이를 확인할 수 있습니다.
C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\
길이는 696 자이며 물론 260보다 깁니다. 또한 탐색기에서 가장 안쪽의 하위 디렉토리로 이동하면 초점이 맞지 않지만 주소를 클릭하면 주소 표시 줄에 예상대로 표시됩니다. 막대는 경로를으로 변경하며 길이 C:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\
는 102 자입니다.
XP에서는이 작업을 수행하지 않고 지원되는 것보다 긴 경로를 만드는 것을 꾸준히 거부합니다.
실제로 흥미로운 점은 NtfsDisable8dot3NameCreation
옵션이 설정 될 때 Windows 7 탐색기가 "너무 긴 경로"를 처리하는 방법을 찾는 것 입니다.
\\?` doesn't work with
rmdir`.
\\?\C:\dir\dir\dir\dir
말 그대로 MAX_PATH를 우회하는 경로 ; 관련된 "변수"는 없습니다. (그러나 내가 말했듯이, 어떤 이유로 든 rmdir
다른 cmd.exe
내장 시설 과는 작동하지 않습니다 .)
md C:\01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
십시오. 파일 시스템에 전체 경로 길이가 263 자임을 결정하기에 충분한 정보가 있으므로 작동하지 않으므로 실패합니다.
subst
가상 드라이브를 만드는 데 사용하여 경로를 단축 할 수 있습니다 .
C:\>subst Z: "C:\TEMP\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1"
가상 드라이브로 변경하십시오.
cd Z:
이제 파일을 삭제할 수 있습니다 :
del *.*
가상 드라이브를 제거하십시오.
cd C:\TEMP
subst Z: /d
디렉토리를 제거하십시오.
rd /s dir1
C:\TEMP\dir1\dir1\dir1
, 그것의 일부를 짧게하여 들어갈 수있게합니다. 이름 바꾸기에 대한 제안과 같지만 대신 매핑이 있습니다. ;)
:-)
부주의하게 Robocopy를 사용하고 Homeserver에서 백업하여 생성 된 유사한 매우 깊은 구조를 삭제하는 데 도움이되는 작은 C # 앱을 작성했습니다. 기본적으로 Robocopy는 관절 점을 일반 폴더로 취급합니다 ... :-( 눈치 채지 않고 큰 혼란으로 끝날 수 있습니다.
이 도구는 CodePlex에서 누구나 사용할 수있는 소스 파일과 함께 제공됩니다.
얼마 전에 저는 이 작업을 쉽게 수행하는 데 사용할 수 있는 작은 자체 포함 유틸리티 실행 파일 인 DeleteFiles 를 만들었습니다 .
이 자체 포함 된 유틸리티를 사용하면 간단하게 수행 할 수 있습니다.
deletefiles c:\yourfolder\subfolder\*.* -r -f
전체 폴더 구조를 삭제합니다. -r은 시작 디렉토리에서 아래로 폴더 계층 구조를 되풀이하고, -f는 비어있는 폴더를 삭제합니다 ( . 를 파일 스펙으로 사용하면 모든 폴더가됩니다 ). DeleteFiles는 Windows MAX_PATH 제한보다 긴 경로를 지원하므로 중첩 된 폴더에서 제대로 작동합니다.
DeleteFiles는 무료이며 오픈 소스이며 GitHub 에서 바이너리 또는 소스 코드를 얻 거나 Chocolatey를 사용하여 직접 설치할 수 있습니다
> NUL
끝에 추가 하면 프로세스가 더 빨라질 수 있습니다.
간단하고 쉬운 지금
폴더가 매우 중첩 된 node_modules로 오랫동안이 같은 문제에 직면했습니다. 결국 경로를 단축하여 폴더를 삭제할 수있는 스크립트를 수정했습니다.
https://github.com/dev-mraj/fdel
npm install fdel -g
fdel ./node_modules
Sikuli로 작업하는 동안 프로그램에서 Calculator.sikuli 재귀 루프를 사용하여 셀 수없이 많은 "calculator.sikuli.calculator.sikuli"dirs를 만들었습니다. 트리를 이동할 수는 있지만 경로 이름이 너무 길어서 삭제할 수 없습니다.
팝 루프로 여러 가지 솔루션을 시도한 후 디스크 검사를 수행하고 (어쩌면) 아무데도 가지 않습니다 ....
이 스크립트를 작성하여 재귀 된 dirs ( 'a'라는 디렉토리에 있음)에 '깊숙이 들어가서'( 'dir'이라는 디렉토리에) 이동 한 다음 잘린 나무를 삭제하고 다시 'a'로 이동합니다. 을 반복하십시오.
1)cd D:\a\calculator.sikuli\calculator.sikuli\calculator.sikuli\calculator.sikuli
.............go deeeeeep in dir *A*
2) move calculator.sikuli ---> D:\b
.............move the crazy tree to dir *B*
3) kill D:\a\calculator.sikuli <---KILL(rd)
.............wipe dir *A*'s tree
4) move D:\b\calculator.sikuli ---> D:\a\
.............move the crazy tree back to dir *A*
REPEAT
D:
cd D:\a\calculator.sikuli\calculator.sikuli\calculator.sikuli\calculator.sikuli
move /-Y calculator.sikuli D:\b
cd D:\b
rd /s/q D:\a\calculator.sikuli
move /-Y calculator.sikuli D:\a
call D:\remdirs2.bat
이것은 배치 파일을 다시 실행하기위한 호출입니다.
명령 프롬프트를 열고 실행하려고합니다.
rmdir /s <directory>
그래도 문제가 해결되지 않으면 디렉토리 트리에서 CD를 꺼내서 디렉토리의 하위 세트 (예 : 가장 안쪽의 20 개 디렉토리)를 삭제 한 다음 거기서 벗어나려고합니다.
;-)
명령 프롬프트를여십시오.
가장 높은 'dir1'이 포함 된 폴더 / 디렉토리로 이동합니다 (C : \라고 가정).
c:\> RD /s dir1
편집 (의견 추가 후) :
다른 아이디어 :
MS는 문제 (아이디어를 많이 시도하는)를 해결하는 방법에 대한 정보 제공 여기를 .
이 도구도 있습니다 (개인적으로 사용하지는 않음) -TooLongPath .
아마도 (이클립스가 있기 때문에) 모든 것을 탐색 한 다음 한 번에 하나의 폴더 레벨을 제거하여 삭제하는 무언가를 작성합니까?
삭제하려는 디렉토리에 대한 UNC 경로를 구성하여 명령 행 또는 배치 파일에서 직접 수행 할 수 있습니다.
그래서 대신
rmdir /s/q c:\mydirectory
사용하다
rmdir /s/q \\?\c:\myDirectory
이와 같은 UNC 스타일 경로는 훨씬 길 수 있으며 260 자 제한을 무시할 수 있습니다.
The path \\?\C:\temp\wqiyretiuqyertiuyqwteiyrutqwuiyertiqrqweirqyert\wqteriuwqyetriuqwteiryutwiuertiuyqerieerrt\IOQWUE~1\QIWUYE~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\ OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1 is too long.
Windows 7 64 비트
이 문제가 발생하면 폴더 이름 중 일부의 이름이 훨씬 짧아지고 전체 경로가 짧으면 확인이 삭제됩니다. 추가 도구가 필요하지 않습니다.
ren
명령이 실패 하므로 작동하지 않습니다 path too long
.
재귀적인 Cobian Backup 작업으로 생성 된 것을 제외하고는 같은 문제가있었습니다. 나는 밝혀 무료 Cobian 소프트웨어는 쉽게 매우 빠르게 이러한 성가신 중첩 된 폴더를 제거 할 수있는 Deleter가 응용 프로그램이 포함되어 있습니다.
도구 메뉴 아래에 있습니다.
일부 Java 응용 프로그램에서했던 5000+ 디렉토리 깊이의 폴더 엉망과 같은 문제가 발생 했으며이 폴더를 제거하는 데 도움이되는 프로그램을 작성했습니다. 전체 소스 코드는 다음 링크에 있습니다.
https://gitlab.imanolbarba.net/imanol/DiREKT
그것은 잠시 후에 모든 것을 제거했지만 일을 처리했습니다. 나는 그것이 같은 좌절감을 느끼는 사람들에게 도움이되기를 바랍니다.