Robocopy ไม่ได้คัดลอกโฟลเดอร์รากและการประทับเวลา


10

Robocopy ไม่ได้คัดลอกโฟลเดอร์รากและการประทับเวลาของมัน - มันจะคัดลอกไดเรกทอรีย่อยและไฟล์ทั้งหมด (เมื่อตั้งค่าตัวเลือกที่เหมาะสม) และดูเหมือนว่าจะไม่มีตัวเลือก / อาร์กิวเมนต์ที่จะบอก Robocopy ที่คุณต้องการให้รูทโฟลเดอร์นั้นเอง ที่จะคัดลอกคำต่อคำด้วย

ดังนั้นฉันต้องการฉันต้องการคัดลอก C: / Brush

Robocopy จะคัดลอกไดเรกทอรีย่อยและไฟล์ทั้งหมดไปยังปลายทาง แต่ไม่ใช่โฟลเดอร์แปรงเองพร้อมแอตทริบิวต์และการประทับเวลาที่เกี่ยวข้องทั้งหมด

คุณเข้าใจสิ่งที่ฉันถาม นี่เป็นพื้นฐานที่ค่อนข้างดีและ Robocopy ดูเหมือนจะไม่มีทางเลือก ผู้คนโพสต์คำถามก่อนหน้านี้ในฟอรัมต่างๆ แต่เท่าที่ฉันกังวลไม่มีใครตอบคำถาม

ป้อนคำอธิบายรูปภาพที่นี่


1
นี่คือใบปลิวตามประสบการณ์ของฉันrsyncแต่ถ้าคุณไม่มีเครื่องหมายสแลชท้ายท้ายโฟลเดอร์เป้าหมายของคุณ ลองปรับเปลี่ยนสคริปต์ที่ระดับบรรทัดคำสั่งแทนที่จะใช้ GUI ได้อย่างไร ฉันรู้ว่าเครื่องมือบรรทัดคำสั่งจะทำสิ่งที่คุณต้องการ

@ Randolph West: ปัจจุบันฉันไม่มีสแลชต่อท้ายที่ท้ายโฟลเดอร์เป้าหมาย ฉันยังคงไม่สามารถทำให้ Robocopy รวมโฟลเดอร์ต้นทางและคุณลักษณะของมันไว้ในงานถ่ายเอกสารจริงได้ ความคิดใด ๆ
ptrcao

หากไม่มีโซลูชันสำหรับ robocopy คุณสามารถดูxxcopy (มีรุ่นฟรีแวร์และเชิงพาณิชย์)
harrymc

ใช่ฉันเข้าใจอย่างสมบูรณ์และได้เพิ่มวิธีแก้ปัญหาการทำงานด้านล่าง ปัญหาที่แท้จริงคือคุณต้องระบุไฟล์และโฟลเดอร์ทั้งหมดในรูทไม่ให้คัดลอก
opsin

คำตอบ:


9
robocopy %1 "C:\DestinationDirectory\%~n1" /E /V /DCOPY:T /LOG:"C:\DestinationDirectory\Copied.txt" /R:10 /W:30 

วางโฟลเดอร์บนbatหรือใช้ในการส่งไปยัง มันจะสร้างโฟลเดอร์ที่มีชื่อและเวลาประทับของไดเรกทอรีต้นทางและคัดลอกไฟล์ทั้งหมด


ขอบคุณมากกำลังค้นหาผู้ให้บริการเวทมนตร์% ~ n1
hotzen

@hotzen สิ่งที่จะ%~n1ทำอย่างไร
Pacerier

1
พวกเขาอยู่ที่นี่: microsoft.com/resources/documentation/windows/xp/all/proddocs/ …
hotzen

"ขยาย% 1 เป็นชื่อไฟล์"
hotzen

ไมโครซอฟท์ยากจนการเชื่อมโยงทั้งหมดของพวกเขาที่นี่มีร้อยละหนอนเอกสารชุดen.wikibooks.org/wiki/Windows_Batch_Scripting#Percent_tilde
kevinf

3

ฉันเห็นด้วยกับ OP ไม่สามารถคัดลอกโฟลเดอร์รากเป็นข้อบกพร่องที่ใหญ่ของ robocopy วิธีการเกี่ยวกับการโกงและย้ายโฟลเดอร์นมัสการไปยังโฟลเดอร์ชั่วคราวการดำเนินการ robocopy ในโฟลเดอร์ชั่วคราวแล้วย้ายมันกลับมา?

สิ่งที่ต้องการ:

md "c:\verytemporary" && move "c:\brushes" "C:\verytemporary"||( echo Line 1 error occurred & goto :eof )
robocopy c:\verytemporary d:\ /MIR /DCOPY:T
move "c:\verytemporary\brushes" "c:\" && rd /q "c:\verytemporary"||echo Line 3 error occurred

2

ลองmd D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushesจากบรรทัดคำสั่งโดยแทนที่เส้นทางที่ถูกต้อง


3
ใช่ แต่คุณกำลังสร้างโฟลเดอร์ใหม่ซึ่งจะไม่มีคุณลักษณะของโฟลเดอร์ C: \ brushes ดั้งเดิม ... ?
ptrcao

2

เนื่องจากฉันไม่เห็นวิธีแก้ปัญหาที่ดีและง่ายในคำตอบใด ๆ :

หากไม่มีโซลูชันสำหรับ robocopy คุณสามารถดูxxcopy (มีรุ่นฟรีแวร์และเชิงพาณิชย์)

มีทางเลือกอื่น ๆ อีกมากมายแน่นอน robocopy บางมีการระบุไว้ที่นี่
ดูเพิ่มเติมฟรีที่ดีที่สุดคัดลอกไฟล์ยูทิลิตี้


1
xxcopyเป็นยูทิลิตี้ที่ยอดเยี่ยม แต่รุ่นฟรีแวร์มีพรอมต์ที่คุณต้องตอบกลับหากคุณใช้รายการสวิตช์บรรทัดคำสั่งขนาดใหญ่ การใช้xxcopyจากหน้าต่างคำสั่งการแจ้งเตือนพิเศษนี้จะทำให้เกิดการระคายเคือง แต่จะป้องกันการใช้งานxxcopyจากไฟล์แบตช์ที่ซับซ้อน
Kevin Fegan

1

คำตอบของ user105198 คือครึ่งทาง

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes จะสร้างโฟลเดอร์ใหม่ขึ้นมาจริงๆ คุณจะต้องผนวก/ MIRและ / DCOPY: Tกับมัน

ด้วยตัวเลือก/ mirหากมีไดเรกทอรีปลายทางอยู่การตั้งค่าความปลอดภัยไดเรกทอรีปลายทางจะถูกเขียนทับ เปอเรเตอร์

/DCOPY:T :: COPY Directory Timestamps.

รวมเข้าด้วยกันหมายถึง: แอตทริบิวต์ของไดเรกทอรีต้นทางและเวลาประทับจะถูกทำมิเรอร์ไปยังโฟลเดอร์ที่สร้างขึ้น

ดังนั้น:

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes /MIR /DCOPY:T

1

ฉันคิดว่าคุณจะพบว่า Robocopy ทำสิ่งที่คุณต้องการอย่างแน่นอนหากคุณบอกให้คัดลอกการประทับเวลาของโฟลเดอร์ (/ DCOPY: T) จากการทดลองของฉันฉันพบว่าพฤติกรรมแบบไม่มีเอกสารต่อไปนี้เป็นจริงสำหรับ Robocopy:

คุณสมบัติที่ระบุทั้งหมดของไดเรกทอรีต้นทางจะถูกนำไปใช้กับไดเรกทอรีปลายทางโดยไม่คำนึงว่าไดเรกทอรีปลายทางนั้นมีอยู่ไม่มีอยู่หรือมีชื่อแตกต่างจากไดเรกทอรีต้นทาง

คุณสมบัติที่ระบุสามารถรวม (อย่างน้อย) ข้อมูลความปลอดภัย (/ SEC) หรือการประทับเวลาของโฟลเดอร์ (/ DCOPY: T)

ดังนั้นในตัวอย่างต่อไปนี้ c: \ destination \ folder จะถูกกำหนดเวลาประทับเดียวกันกับ c: \ source \ folder

robocopy c:\source\folder C:\destination\folder /E /DCOPY:T

ฉันทดสอบสิ่งนี้กับ Robocopy เวอร์ชันที่มาพร้อมกับ Windows 7, Windows 8 และ Kit ทรัพยากร Windows 2003 (/ พารามิเตอร์ SEC เท่านั้น) โปรดทราบว่าRobocopy รุ่นใหม่กว่าเท่านั้น(XP026 ขึ้นไป) สนับสนุนพารามิเตอร์ / DCOPY: T


0

หากคุณรวม/IF :: Include the following Files.กับ/E :: copy subdirectories, including Empty ones.คุณได้รับ (ใกล้) ผลที่ต้องการ:

C:\Temp\Robocopy Source Root>robocopy . "C:\Temp\Robocopy Destination" /E /IF "Brushes*"

1
คุณหมายถึง "ใกล้" คุณกำลังพูดถึงข้อ จำกัด อะไร?
ptrcao

อันตรายจะโรบินสัน !!! คำแนะนำของคุณดูเหมือนว่าจะคัดลอกทุกโฟลเดอร์ในโฟลเดอร์ปัจจุบันไม่ จำกัด ไปยังโฟลเดอร์ที่ขึ้นต้นด้วย "Brush"
GlennFromIowa

0

Robocopy ไม่ได้ออกแบบมาให้ทำเช่นนั้นได้ง่ายนัก อย่างไรก็ตามมีวิธี

รูทโฟลเดอร์ประกอบด้วย 50 ไฟล์และ 40 โฟลเดอร์ คุณต้องการเฉพาะโฟลเดอร์ X (แต่คุณยังต้องการเวลาและวันที่ประทับด้วย)

ROBOCOPY c:\ d:\ /XF 50 root file names c:\boot.ini c:\bla.txt etc. /XD c:\windows c:\drivers c:\temp etc. /S /E /SEC /DCOPY:T

กระบวนการ / DCOPY: T บอกให้เก็บประทับเวลาของโฟลเดอร์ กระบวนการ / XF ระบุว่าจะไม่คัดลอกไฟล์ใด / XD ระบุว่าจะคัดลอกโฟลเดอร์ใด ไม่ต้องระบุโฟลเดอร์ c: \ X

ข้อเสียเปรียบหลักในการนี้คือการค้นคว้าโฟลเดอร์และชื่อไฟล์ทั้งหมดในรากและเรียกพวกเขาทั้งหมดที่นี่ หากคุณทำสิ่งนี้มากมายในระบบที่แตกต่างกันสคริปต์อาจถูกเขียนขึ้น

ตัวอย่างการทำงาน

robocopy c: \ testing c: \ abc / XF c: \ testing \ Testing.txt / XD "C: \ testing \ New Folder (2)" "C: \ testing \ New Folder (3)" / S / E / ก.ล.ต. / DCOPY: T

ตัวอย่างการทำงานของรูท

robocopy c: \ d: \ / XF c: \ Testing.txt / XD "C: \ โฟลเดอร์ใหม่ (2)" "C: \ โฟลเดอร์ใหม่ (3)" / S / E / SEC / DCOPY: T

การทดสอบของฉันใช้งานได้ฉันสร้างโฟลเดอร์และโฟลเดอร์ย่อยสองสามตัว c: \ test เป็น root ในกรณีนี้ c: \ abc เป็นรากของไดรฟ์อื่น (เห็นได้ชัดว่าพวกเขาไม่ได้จริงๆ โฟลเดอร์ที่ฉันต้องการจากรูทนั้นถูกเรียกว่า "โฟลเดอร์ใหม่" อย่างที่คุณเห็นฉันไม่ได้ระบุไว้ใน / XD ตรวจสอบให้แน่ใจว่าคุณระบุ c: \ หรือชื่อที่คุณใช้จะเป็นชื่อโกลบอล กล่าวอีกนัยหนึ่งถ้าฉันไม่ได้ระบุ c: \ test จากไฟล์ Testing.txt มันจะตัดมันออกจากโฟลเดอร์ย่อยทั้งหมดที่กำลังคัดลอก / SEC จะคัดลอกความปลอดภัยของไฟล์และการประทับเวลาทั้งหมด


อืมฉันคิดว่าคุณสามารถใช้ / XF c: *. * เพื่อแยกไฟล์รูททั้งหมด ฉันจะทดสอบว่าเมื่อฉันอยู่หน้าเครื่องและไม่ได้ใช้โทรศัพท์
opsin

ไม่, c: *. * ไม่ถูกต้อง, คุณจะต้องแสดงรายการไฟล์ทั้งหมดด้วยตนเอง
opsin

0

ในทางทฤษฎีแล้วการใช้/DCOPY:Tควรแก้ปัญหาทั้งหมดของคุณ

แต่ฉันได้เห็นสิ่งนี้เกิดขึ้นและฉันไม่แน่ใจว่าฉันเรียกมันว่า "บั๊ก" แต่เป็นผลมาจากลำดับของการดำเนินการ (ตกลงบั๊ก)

คำสั่งนี้ควรใช้เพื่อคัดลอกไฟล์ทั้งหมดจากC:\BrushesไปยังD:\NEWBrushesและ/DCOPY:Tควรทำให้การประทับเวลาของโฟลเดอร์ต้นทางถูกคัดลอกไปยังโฟลเดอร์ปลายทาง:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

สิ่งที่ฉันเห็น (อย่างน้อยในบางเวอร์ชันของ Robocopy) คือคำสั่งสำเร็จ แต่การประทับเวลาของD:\NEWBrushesโฟลเดอร์ถูกตั้งค่าเป็นวันที่และเวลาปัจจุบัน

ดังนั้นจึงปรากฏว่า/DCOPY:Tคุณสมบัตินี้ใช้ไม่ได้กับโฟลเดอร์ "base" (บนสุด) ที่คุณกำลังคัดลอก

ฉันเชื่อว่ามันใช้งานได้ แต่การประทับเวลาของโฟลเดอร์ปลายทางกำลังถูก "เหยียบ" โดยการดำเนินการที่จะตามมาในลำดับการดำเนินการ

สิ่งที่ฉันเชื่อว่าเกิดขึ้นสำหรับคำสั่งนี้:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

เป็นอะไรเช่นนี้:

  1. สร้างโฟลเดอร์D:\NEWBrushesหากยังไม่มีอยู่
  2. คัดลอกการประทับเวลาจากC:\BrushesไปยังD:\NEWBrushes
  3. คัดลอกไฟล์และโฟลเดอร์ย่อยจากC:\BrushesไปยังD:\NEWBrushes

ปรากฏว่าขั้นตอนที่ 3 การปรับเปลี่ยนเนื้อหาของโฟลเดอร์D:\NEWBrushesทำให้การประทับเวลาของD:\NEWBrushesการเปลี่ยนแปลง

สำหรับฉัน "การแก้ไขปัญหา" ได้ถูกเรียกใช้robocopyคำสั่งเพื่อคัดลอกไฟล์และโฟลเดอร์จากนั้นเรียกใช้robocopyคำสั่ง(เดียวกัน) ครั้งที่สอง

ดังนั้นครั้งแรกที่คุณเรียกใช้:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

ไฟล์และโฟลเดอร์ทั้งหมดจะถูกคัดลอก จากนั้นเรียกใช้อีกครั้ง:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T
  (or)
robocopy "C:\Brushes" "D:\NEWBrushes" /DCOPY:T

การrobocopyรันครั้งที่สองจะไม่มีการแก้ไขไฟล์หรือโฟลเดอร์ภายในD:\NEWBrushesและ/DCOPY:Tตัวเลือกจะบอกrobocopyให้คัดลอกการประทับเวลาจากC:\BrushesไปยังD:\NEWBrushes(เว้นแต่จะมีโฟลเดอร์ / ไฟล์ในC:\Brushesที่มีการเปลี่ยนแปลงนับตั้งแต่การเรียกใช้ครั้งแรกrobocopy)


-1

ตอนนี้ฉันกำลังแก้ไขโฟลเดอร์รูทสำหรับสคริปต์สำรองข้อมูลที่รวดเร็วและง่ายดายด้วย robocopy มีตัวอย่างหนึ่ง ควรช่วยทุกคน:

$Destination="F:\Backup" #change destionation backup drive and foder
$BackupDirs="d:\folder1", "d:\folder2", "d:\folder3\subfolder", "d:\fodler4\subfolder\subsubfodler" #change source folders

#make a loop for every source folder
foreach ($Backup in $BackupDirs) {

#split folder name
$fdname = Split-Path $Backup -leaf

#define folder to create in destionation
$dirtocreate = Join-Path $Destination $fdname

#make directory, yes, some extra script to skip when exist should be in place, but -erroraction solved this in lazy mode :)
md $dirtocreate -ErrorAction SilentlyContinue 

#copy with subfolders and log
robocopy $backup $dirtocreate  /s /nfl /ndl /log:c:\scripts\backup.log

}

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