xcopy: ย้ายไฟล์แทนการคัดลอก?


11

ฉันต้องการใช้xcopyเพื่อย้ายไม่ใช่คัดลอกไฟล์ข้ามเครือข่ายด้วยการตั้งค่าสถานะยืนยัน ฉันไม่พบสวิตช์บน xcopy เพื่อย้ายไฟล์มีการxmoveใช้ที่ฉันมีverifyหรือไม่

ในขณะที่ฉันกำลังใช้xcopy /D /Vแต่จำเป็นต้องกำจัดไฟล์ที่แหล่งที่มาเฉพาะเมื่อมีการตรวจสอบไฟล์ถูกคัดลอกไปยังปลายทางเรียบร้อยแล้ว


1
คุณควรระวังว่าแม้การใช้/vจะไม่รับประกันว่าไฟล์นั้นถูกเขียนอย่างถูกต้อง: ดิสก์และแคชระบบปฏิบัติการหมายความว่าไฟล์ในแคชการเขียนจะถูกดึงมาจากที่นั่นก่อนที่มันจะถูกส่งไปเรียบร้อยแล้ว ตัวเลือกที่ปลอดภัยเพียงอย่างเดียวคือการทำสำเนาและกำหนดเวลาการตรวจสอบและลบในอนาคต Heuristically ฉันจะบอกว่า 5 นาทีจะพอ แต่ไม่มีกฎที่ยากและรวดเร็ว: มันขึ้นอยู่กับกิจกรรมของดิสก์และขนาดของแคช (ฉันพูดเป็นคนที่ประสบความล้มเหลวในการเขียนแคช)
AFH

คำตอบ:


11

คุณควรตรวจสอบก็มีประสิทธิภาพมากขึ้นกว่าrobocopy xcopyคุณสามารถย้ายไฟล์ด้วยหรือ/MOV/MOVE

เมื่อต้องการย้ายไฟล์เท่านั้น (ลบจากแหล่งที่มาหลังจากการคัดลอก)

robocopy from_folder to_folder files_to_copy /MOV

เมื่อต้องการย้ายไฟล์และไดเรกทอรี (ลบจากแหล่งที่มาหลังจากการคัดลอก)

robocopy from_folder to_folder files_to_copy /MOVE

http://ss64.com/nt/robocopy.html


2
Robocopy ไม่ได้มีverifyเท่าที่ฉันเห็น
JBurace

@JBurace ถ้าคุณดูที่ลิงค์ที่ผมโพสต์มันฯ/MOVE : Move files and dirs (delete from source after copying): หากไม่ได้คัดลอกจะไม่ลบแหล่งที่มา
imtheman

2
จะเกิดอะไรขึ้นถ้าไฟล์ถูกย้าย แต่ขนาดไฟล์ไม่ตรงกัน? verifyนี่คือเหตุผลที่ผมต้องทำ ฉันไม่เห็นอะไรเลยในข้อมูล robocopy ที่จริงตรวจสอบทั้งสองขนาดไฟล์เพื่อให้แน่ใจว่ามันไม่เพียง แต่ย้าย แต่ย้ายอย่างถูกต้อง
JBurace

@JBurace ฉันไม่คิดว่ามันจะเป็นเช่นนั้น หากไม่ได้คัดลอกไฟล์ทั้งหมดมันจะทำหน้าที่เหมือนไม่มีสิ่งใดถูกคัดลอกเลยดังนั้นจะไม่ลบแหล่งที่มา
ทหารผ่านศึก

1

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

จากเอกสาร Xcopy :

Exit
code  Description
====  ===========
  0   Files were copied without error.
  1   No files were found to copy.
  2   The user pressed CTRL+C to terminate xcopy.
  4   Initialization error occurred. There is not
      enough memory or disk space, or you entered
      an invalid drive name or invalid syntax on
      the command line.
  5   Disk write error occurred.

ชุดตัวอย่าง:

Rem Attempt file copy...
xcopy /D /V %1 %2

Rem Check result code and if it was successful (0), delete the source.
if errorlevel 0 (
    echo Copy completed successfully
    del /Q %1
    exit /B
)

Rem Not Errorlevel 0...
echo Copy failed for some reason.

ไม่errorlevelยังคงทำงานถ้าฉันทำ: dir args && xcopy args >> logfile.txt? หรือจะerrorlevelเป็นผลมาจากdir?
JBurace

มันจะมีผลลัพธ์ของการรันคำสั่งล่าสุด คุณสามารถทดสอบกับไฟล์แบตช์ง่าย ๆ เช่น: pastebin.com/6GwNA7MP
Ƭᴇcʜιᴇ007

if errorlevel 0ทริกเกอร์เสมอ เพราะมันเป็นจริงการตรวจสอบเพื่อให้คุณแทนควรตรวจสอบกรณีข้อผิดพลาดif errorlevel >= 0 if errorlevel 1 ( ... failure case ... ) else ( ... success case ... )หรือถ้าคุณชอบสไตล์if not errorlevel 0 (... success case ... )หรือถ้าคุณชอบสไตล์if %ERRORLEVEL% EQU 0 ( ... success case ... )
เจสซีชิสโฮล์ม

ของหลักสูตรนี้จะมีประสิทธิภาพน้อยกว่ามาก (ย้ายราคาถูกสุดในฮาร์ดไดรฟ์เดียวกัน) ...
Ohad Schneider
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.