Como copiar arquivos mantendo a estrutura de pastas original?

3

Gostaria de saber se posso ajudar a fazer o seguinte:

Pesquise no PC (todas as unidades) todos os arquivos de autocad (* .DWG) e word (* .doc) e copie-os para uma nova rota do meu servidor; a primeira vez que é executado deve ser um FULL e, em seguida, apenas mudou a data de arquivos completos são copiados.

Eu tentei usar o seguinte:

mkdir \server1\j$\bk_user\%computername%\FULL\%date:~6,4%-%date:~3,2%-%date:~0,2%\a_ofim\

FORFILES /P C:\ /S /M *.doc* /C "cmd /c COPY @file \server1\j$\bk_user\%computername%\FULL\%date:~6,4%-%date:~3,2%-%date:~0,2%\a_ofima\"

FORFILES /P C:\ /S /M *.dwg /C "cmd /c COPY @file \server1\j$\bk_user\%computername%\FULL\%date:~6,4%-%date:~3,2%-%date:~0,2%\a_ofim\"

O ponto é que eu não sei como:

  1. Pesquisar todos os discos rígidos, meu código atual pesquisa somente a unidade C: (I estava pensando em colocar uma linha com "se existir D: \ goto diskD" e então para cada disco, mas não tenho certeza se há outro mais eficientemente

  2. Cada vez que você encontrar e copiar o arquivo, copie-o e mantenha-o sua estrutura de pastas original, porque então ninguém sabe onde veio desse arquivo porque os lugares todos juntos.

Espero que você possa me ajudar ..

    
por Enrique Olaya 04.10.2016 / 03:33

3 respostas

0

Como faço para pesquisar todos os discos rígidos?

Para enumerar todas as suas unidades locais, use o seguinte arquivo em lotes (GetDrives.cmd):

@echo off
setlocal enabledelayedexpansion
for /f "skip=1" %%d in ('wmic logicaldisk get caption ^| findstr /r /v "^$"') do (
  set _drive=%%d
  echo !_drive!
  rem add search code here
  )
endlocal

Exemplo de saída:

> GetDrives.cmd
C:
add search code here
D:
add search code here
E:
add search code here
F:
add search code here

Para ignorar unidades de DVD / CD, use o seguinte arquivo em lote (GetDrives.cmd):

@echo off
setlocal enabledelayedexpansion
for /f "skip=1 tokens=1,2" %%d in ('wmic logicaldisk get caption^, drivetype  ^| findstr /r /v "^$"') do (
  if not [%%e]==[5] (
    set _drive=%%d
    echo !_drive!
    echo add search code here
    )
  )
endlocal

Exemplo de saída (a unidade d: é a minha unidade de DVD):

> GetDrives.cmd
C:
add search code here
E:
add search code here
F:
add search code here

>

Leitura Adicional

por 04.10.2016 / 09:44
1

A melhor maneira que encontrei para transferir esse tipo de dados, mantendo a estrutura de pastas, é através do Robocopy.

Com o Robocopy, você também pode usar o suporte multi-threading para ajudar a acelerar suas transferências.

EXEMPLO: Robocopy C: \ * .dwg \\ meu_servidor \ backup \ users_C_Drive / MT: 4

Isso manterá a estrutura da pasta. Você pode obter mais tarde e adicionar em exclusões personalizadas para arquivos temporários e pastas a serem ignoradas.

    
por 04.10.2016 / 03:44
0

Se você quiser criar uma duplicata exata, use a seguinte versão (o que equivale a adicionar / E e / PURGE:

robocopy c:\test d:\test /MIR

Se tudo o que você quer fazer é copiar os diretórios e subdiretórios, incluindo os vazios, use

robocopy c:\test d:\test /E

É a barra invertida na opção E que estava conseguindo você.

Para saber mais sobre o Robocopy, aqui está uma pesquisa prática:

link

Do meu post em Robocopy - Copie o diretório para outro diretório

    
por 29.05.2017 / 00:17