Windows에서 너무 깊은 문제로 파일 복사 파일을 어떻게 자동화합니까?

StackOverflow https://stackoverflow.com/questions/236533

  •  04-07-2019
  •  | 
  •  

문제

파일 목록을 선택적으로 복사하고 디렉토리 구조를 보존 할 수 있기를 원합니다. 문제는 경로가 256 문자를 초과하는 파일이 상당히 많다는 것입니다. 이 문제는 일반적으로 어떻게 처리됩니까?

편집 : 폴더가 아닌 파일을 선택적으로 복사하고 싶다는 것을 분명히해야합니다. Robocopy가 개별 파일을 복사하는 데 효율적으로 사용될 수 없으며 폴더 구조를 효과적으로 복사 할 수 있다고 생각합니다.

도움이 되었습니까?

해결책

경로 길이와 전화를 확인하는 vbscript를 썼습니다. subst, 특정 임계 값에 도달하자마자. 이 호출은 서로 쌓여 재귀의 중간 에이 레이아웃이 존재합니다.

C:\a\very\long\path
subst K: "C:\a\very\long\path"

K:\another\very\long\path
subst L: "K:\another\very\long\path"

L:\yet\another\very\long\path
subst M: "L:\yet\another\very\long\path"

xcopy M:\*.* "D:\target"

이러한 방식으로 각 수준의 보강재로 더 짧은 경로가 생성됩니다. 또한 사본 명령을 발행하기 전에 긴 경로를 확인할 수 있도록 폴더를 순차적으로 복사해야합니다.

폴더의 모든 파일이 복사되면 재귀는 한 레벨을 뒤로 이동합니다 (subst /d), 하나의 드라이브 문자를 풀어냅니다.

4-5 드라이브 문자를 사용하여 경로가 깊어지면 서로를 바로 잡을 수 있습니다. 나는 max_path 한계에 걸쳐 길이가 waaaaay가있는 경로를 복사 할 수있었습니다.


편집하다

이것은 Subst로 수행하는 일반적인 절차를 설명합니다. 당신이하는 방법은 당신의 요구에 달려 있습니다. 나는 항상 그 작은 보체 트릭을 최소한으로 사용했습니다. "이 단일 문제를 해결합니다".

예를 들어, 똑같이 깊은 대상 경로에 복사하면 다른 구체적인 드라이브 문자 스택이 필요하다는 것을 의미합니다.

단일의 깊이 중첩 된 디렉토리 구조 내에서 모든 .zip 파일을 풀면 스택에서만 필요할 수 있지만 .zip 등의 폴더를 설명하기 위해 임계 값을 약간 단축해야합니다.

다른 팁

Robocopy, 일부 Windows 리소스 키트, 그러한 경우를 처리하도록 설계되었습니다.

직접 복사 절차를 구현 하시겠습니까? 그렇다면 UNC 경로를 시도 했습니까? 나는 그들과 함께 일할 필요가 없었지만, 단순하게 당신은 접두사를 사용하고 경로는 max_path보다 훨씬 길 수 있습니다. 이 MSDN 기사에서.

예전의 해킹은 디렉토리의 일부에 드라이브 레터를 할당하는 것입니다.

하나의 옵션은 subs 명령입니다. 이를 통해 드라이브 레터와 경로 조합으로 드라이브 레터를 대체 할 수 있습니다. 디렉토리의 짧은 버전을 얻기 위해 설치 패키지 에서이 작업을 수행하는 것을 보았습니다.

또는 공유 폴더를 사용하여 드라이브 문자에 매핑 할 수 있습니다. 또는 관리 지분을 사용할 수 있습니다.

그러나 실제로 실행할 수있는 코드가 있다면 처리하는 것이 해킹보다 훨씬 좋습니다.

Sören이 제안한 것처럼 Robocopy를 사용해보십시오.

robocopy empty_dir base_nested_dir /purge
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top