Eu tenho um grande conjunto de arquivos (mais de 45.000) em uma estrutura de pastas bastante complexa. Extraí um subconjunto de aproximadamente 13.000 arquivos e seus caminhos (relativo à pasta raiz) que desejo copiar com o caminho da pasta original.
Embora eu tenha pesquisado exaustivamente, não consegui encontrar uma maneira, com xcopy ou robocopy, de fazer o que quero. Eu poderia facilmente criar um arquivo em lote com um comando de cópia para cada entrada em minha lista. No entanto, não consegui encontrar nenhuma opção x/robocopy ou combinações de opções que gerem o caminho da pasta no destino a partir do meu arquivo de origem, por exemplo:
xcopy dir1\dir2\dir3\file.txt copy_folder /<some switches>
ou
xcopy dir1\dir2\dir3\file.txt copy_folder\dir1\dir2\dir3\file.txt /<some switches>
Eu gostaria que ele criasse o caminho dir1\dir2\dir3
se ele não existisse na pasta copy_folder
e colocasse uma cópia file.txt
lá. Eu entendo que, no Linux cp --parent
faz exatamente isso.
Qualquer sugestão sobre a melhor maneira de conseguir isso é muito bem-vinda!
O XCOPY criará as pastas se elas não existirem, mas primeiro perguntará se o destino é um arquivo ou diretório.
Portanto, você pode canalizar a resposta F para o comando XCOPY para que o comando não pare.
A
/Y
opção é usada caso você tenha duplicatas em sua lista - você não deseja que o comando XCOPY pergunte se deseja substituir.O redirecionamento de stderr para nul é necessário caso o caminho exista, caso em que o lado direito pode ser concluído antes do esquerdo, fazendo com que o esquerdo imprima a seguinte mensagem de erro para stderr -
The process tried to write to a nonexistent pipe.
O redirecionamento oculta a mensagem de erro indesejada.Outra opção é primeiro criar o caminho de destino antes de fazer o XCOPY. Simplesmente redirecione stderr para null para evitar ver uma mensagem de erro se o caminho já existir.
Com qualquer solução, se o caminho em sua lista incluir uma letra de unidade, você precisará usar
"copyFolder%%~pnxF"
em vez de"copyFolder\%%~F"
. Observe que o~p
modificador inclui o\
.