Copie várias pastas para um único destino com robocopy

5

Estou procurando uma solução para usar o robocopy para copiar várias pastas de um diretório em um compartilhamento de rede distante. Eu quero escolher várias pastas de um diretório que contém centenas de pastas que eu não estou interessado. Eu quero fazer algo semelhante ao scp no Linux usando regex, mas isso não funciona em robocopy:

c:\robocopy "c:\results19_TC1.*" "\datastore\somefolder\"
    
por SDGuero 23.05.2011 / 23:22

6 respostas

4

Tente este:

gci C:\results19_TC1.* | foreach-object { robocopy $_.fullname (".\datastore\somefolder\" + $_.name) }

gci C:\results19_TC1.* get todos os arquivos / diretórios correspondentes primeiro e os coloca no canal onde foreach-object cuida de todos os resultados do primeiro comando. Ele fará o robocopy do caminho completo de cada resultado (caminho completo para os diretórios de resultados) e os colocará em. \ Datastore \ somefolder \ com seu nome de pasta original, por exemplo:
C:\results19_TC1.123456 - > C:\results\datastore\somefolder19_TC1.123456

Essa coisa entre chaves colocará esse nome de diretório de destino e o nome da pasta original juntos.

Editar:
Acabei de ver que seu diretório de destino deve ser um caminho UNC. O Robocopy aceita caminhos UNC (mesmo com nomes de caminho com mais de 256 caracteres). Você só precisa substituir (".\datastore\somefolder\" por ("\datastore\somefolder\" no meu comando. Então o comando certo seria:

gci C:\results19_TC1.* | foreach-object { robocopy $_.fullname ("\datastore\somefolder\" + $_.name) }

    
por 23.05.2011 / 23:35
2

Você faria isso em um arquivo de lote. Você precisará on-line por diretório.

Como alternativa, você pode fazer isso, copiar tudo e excluir o excesso, se for mais fácil: Robocopy z: \ diretório d: \ directory / MIR / COPYALL (Cuidado: MIR é para imagem espelhada e sobrescreve qualquer coisa em seu caminho, portanto, use apenas em um diretório em branco).

    
por 23.05.2011 / 23:33
1

Você não poderá fazer isso apenas com o Robocopy. Se você tiver acesso a uma máquina linux, seria trivialmente fácil usar find com a opção -exec . Ou você poderia usar o cygwin no windows (eu acho que ele tem o comando find), ou você poderia usar uma linguagem de script como Ruby ou Python no Windows.

    
por 23.05.2011 / 23:36
0

Um powershell rápido como este:

$Dir = get-childitem "c:\results\"  -recurse
$List = $Dir | where {$_.FullName -match "1319_TC1."}
$List | split-path FullName -parent | get-unique

Fornecerá uma lista de todos os arquivos que estão em uma pasta que corresponde a "1319_TC1". Então tudo que você precisa fazer robocopy de cada uma dessas pastas.

    
por 23.05.2011 / 23:51
0

Siga o seguinte:

for /d %d in (c:\results19_TC1.*) do robocopy "%d" "\datastore\somefolder\%~nxd" /E /W:0 /R:0 /XO /XJ

Aqui usamos o comando do Windows for com /d swith para percorrer todos os diretórios de 1319_TC1.* e o comando for armazenaria cada nome de diretório, o nome completo do caminho c:\results19_TC1.* .. um por um na variável %d .

Com a ajuda de %~nxd , separamos o nome da pasta e a extensão de todo o caminho e passamos para o robocopy para garantir que as mesmas pastas sejam criadas no destino de \datastore\somefolder .

Escolha seus interruptores robóticos ao seu gosto.

O comando for permite inserir e passar nomes explícitos para outro comando, robocopy neste caso. Aqui está um exemplo para copiar os perfis de usuário de john e paul para o datastore . Eu vou para a pasta de origem cd c:\users primeiro para listar os nomes das pastas de origem sem os nomes dos caminhos completos:

cd c:\users
for /d %d in (john,paul) do  robocopy "%d" "\datastore\somefolder\%d" /E /W:0 /R:0 /XO /XJ
    
por 23.04.2016 / 06:25
0

Eu sei que esta é uma resposta para uma pergunta de 6 anos de idade, mas todas as respostas anteriores foram kludges. Como esse é o melhor resultado no google, achei que seria a solução correta para a pergunta específica.

c:\robocopy "c:\results19_TC1.*" "\datastore\somefolder\"

Você não pode selecionar vários diretórios de origem. No entanto, os diretórios são arquivos.

Se você tiver uma estrutura de .\folder1\folder3\ , .\folder1\folder4 e .\folder2

A sintaxe correta para copiar folder3 e folder4 para folder2 com robocopy é:

robocopy folder1 folder2 folder* /e

onde / e moverá todos os diretórios.

Aqui é onde fica interessante. Para controlar quais diretórios são copiados, não inclua uma lista ou um caractere curinga para escolher aqueles que deseja copiar, use / XD e use uma lista ou curinga para excluir os que não deseja copiar.

    
por 15.11.2017 / 23:09