Como você automatiza o arquivo de cópia com problemas profundos demais no Windows?

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

  •  04-07-2019
  •  | 
  •  

Pergunta

Quero poder copiar seletivamente uma lista de arquivos e preservar sua estrutura de diretório. O problema é que existem alguns arquivos que seu caminho excede 256 caracteres. Como esse problema geralmente é tratado?

EDIT: Devo deixar claro que só quero copiar seletivamente arquivos, não pastas. Eu não acho que o robocopy possa ser usado com eficiência para copiar um arquivo individual e sua estrutura de pasta de maneira eficaz.

Foi útil?

Solução

Eu escrevi um VBScript que verifica o comprimento do caminho e liga subst, assim que um certo limite for alcançado. Essas chamadas são empilhadas umas sobre as outras para que, no meio de uma recursão, esse layout exista:

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"

Dessa forma, com cada nível de substitutos, um caminho mais curto é gerado. Isso também significa que você deve copiar suas pastas sequencialmente, para poder verificar se há caminhos longos antes de emitir o comando de cópia.

Depois que todos os arquivos em uma pasta são copiados, a recursão salta para trás um nível (subst /d), liberando uma carta de acionamento.

Usando 4-5 letras de acionamento, elas se submetem quando o caminho se aprofunda, eu consegui copiar os caminhos que tinham comprimentos waaaaay sobre o limite max_path.


EDITAR

Isso descreve o procedimento geral de fazê -lo com subst. Como você faz isso depende de suas necessidades, eu sempre usei esse pequeno truque sub -mínimo, "resolve esse único problema".

Por exemplo, copiar para um caminho de destino igualmente profundo significa que você precisa de outra pilha de letras de acionamento subindo.

Depacotar todos os arquivos .zip dentro de uma única estrutura de diretório profundamente aninhada pode exigir apenas na pilha, mas você precisa reduzir um pouco o limite para explicar as pastas no .zip, etc.

Outras dicas

Robocopy, parte do Kit de recursos do Windows, foi projetado para lidar com esses casos.

Deseja implementar o procedimento de cópia para si mesmo? Se sim, você tentou os caminhos da UNC? Eu nunca tive que trabalhar com eles, mas simplificar você usar um prefixo e o caminho pode ser muito mais longo que max_path, conforme descrito Neste artigo do MSDN.

Um hack dos velhos tempos é atribuir uma carta de unidade a parte do diretório.

Uma opção é o comando substitizado. Isso permitirá que você substitua uma letra de unidade por uma combinação de letra e caminho. Eu vi isso feito nos pacotes de instalação para obter uma versão mais curta do diretório.

Alternativo, você pode usar uma pasta compartilhada e mapeá -la para uma letra de unidade. Ou você pode usar o compartilhamento administrativo.

Mas, na verdade, se você tiver código que pode executar, lidar com ele é muito melhor do que esses hacks.

Como Sören sugeriu, tente robocopy:

robocopy empty_dir base_nested_dir /purge
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top