Я копирую множество папок / подкаталогов с одного сетевого диска на другой, однако имена этих файлов неизвестны, и я хочу скопировать только содержимое папок, имена которых совпадают.

Например: srcdir имеет папки f1, f3, f4, f9 и destdir имеет папки f3, f5 и f9: поскольку имена папок f3 и f9 совпадают, содержимое (файлы и подкаталоги) f3 и f9, найденные в srcdir, будут скопированы в соответствующие папки в destdir.

Я пытался использовать xcopy, но он только копирует файлы, и я также пытался

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

но это пропускает все.

Как мне скопировать содержимое папки с исходного сетевого диска в соответствующую папку на целевом диске? Вот код, который у меня есть до сих пор:

@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
  )
)

1 ответ1

0

Robocopy.exe

Надежное копирование файлов и папок.
По умолчанию Robocopy будет копировать файл только в том случае, если источник и место назначения имеют разные метки времени или разные размеры файлов.

robocopy C:\test1 C:\test2 /u /s вызовет ОШИБКУ ERROR : Invalid Parameter #3 : "/u" .

Вы можете использовать следующий фрагмент кода

@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
  )
)

Однако вам вообще не нужно перебирать целевую папку (читайте IF - Условно выполнить команду) и применять, 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
)

Обратите внимание на разницу (проверьте наличие файлов и папок):

    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 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .