Copiando conteúdo de um diretório para outro [duplicado]

0

Estou copiando muitas pastas / subdiretórios de uma unidade de rede para outra, no entanto, os nomes desses arquivos não são conhecidos e eu só quero copiar o conteúdo das pastas que têm uma correspondência de nomes.

Ex: srcdir possui as pastas f1, f3, f4, f9 e o destino possui as pastas f3, f5 e f9: como os nomes das pastas f3 e f9 correspondem, o conteúdo (arquivos e subdiretórios) de f3 & f9 encontrados no srcdir serão copiados em suas respectivas pastas no destino.

Eu tentei usar o xcopy, mas ele apenas copia os arquivos e eu também tentei

robocopy C:\test1 C:\test2 /u /s

mas isso pula tudo.

Como eu iria copiar o conteúdo de uma pasta da unidade de rede de origem para a pasta correspondente na unidade de destino? Aqui está o código que eu tenho até agora:

@ECHO OFF
setlocal EnableDelayedExpansion
for /d %%i in ("C:\test1\*") do (
  for /d %%j in ("C:\test2\*") do (
    set srcdir="%%~nxi"
    set destdir="%%~nxj"
    if !srcdir! == !destdir! ( robocopy C:\test1 C:\test2 ) else (echo Notsame!)
    echo %srcdir%
    ping 130.11.160.2
  )
)
    
por Santiago 24.05.2016 / 17:52

1 resposta

0

ROBOCOPY.exe

Robust File and Folder Copy.
By default Robocopy will only copy a file if the source and destination have different time stamps or different file sizes.

robocopy C:\test1 C:\test2 /u /s aumentaria ERROR : Invalid Parameter #3 : "/u" .

Você pode usar o próximo snippet de código

@ECHO OFF
SETLOCAL EnableExtensions
set "source=C:\test1"
set "target=C:\test2"
for /d %%i in ("%source%\*") do (
  for /d %%j in ("%target%\*") do (
    if "%%~nxi"=="%%~nxj" ( 
        robocopy "%source%\%%~nxi" "%target%\%%~nxi" * /s /e  
    ) else (
        echo "%%~nxi" Notsame! "%%~nxj"
    )
    rem please do not apply load global network    ping 130.11.160.2
    timeout /T 10
  )
)

No entanto, você não precisa repetir a pasta de destino (leia IF - Condicionalmente execute um comando ) e aplique if exist :

@ECHO OFF
SETLOCAL EnableExtensions
set "source=C:\test1"
set "target=C:\test2"
for /d %%i in ("%source%\*") do (
    if exist "%target%\%%~nxi\*" ( 
        robocopy "%source%\%%~nxi" "%target%\%%~nxi" * /s /e  
    ) else (
        echo "%%~nxi" Notsame!
    )
    rem please do not apply load global network    ping 130.11.160.2
    timeout /T 10
)

Observe a diferença (teste a existência de arquivos e pastas):

    rem test a folder existence
if exist "%target%\%%~nxi\*" (echo folder exists)         else (echo no such folder)

    rem test a folder OR file existence
if exist "%target%\%%~nxi"   (echo file OR folder exists) else (echo no such file/folder)

    rem test a file (NOT folder) existence would be a bit more complex
    rem (off current question topic) do it yourself in case of such demand 
    
por 24.05.2016 / 21:56