คัดลอกเนื้อหาจากไดเรกทอรีหนึ่งไปยังอีก [ซ้ำกัน]


0

ฉันกำลังคัดลอกโฟลเดอร์ / ไดเรกทอรีย่อยจำนวนมากจากไดรฟ์เครือข่ายหนึ่งไปยังอีกไดรฟ์อย่างไรก็ตามชื่อของไฟล์เหล่านี้ไม่เป็นที่รู้จักและฉันต้องการคัดลอกเนื้อหาของโฟลเดอร์ที่มีชื่อตรงกันเท่านั้น

ตัวอย่าง: srcdir มีโฟลเดอร์ f1, f3, f4, f9 และ destdir มีโฟลเดอร์ f3, f5 และ f9: เนื่องจากชื่อของโฟลเดอร์ f3 และ f9 ตรงกันเนื้อหา (ไฟล์และไดเรกทอรีย่อย) ของ f3 & amp; 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
  )
)

คำตอบ:


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 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.