แบตช์ไฟล์เพื่อคัดลอกไฟล์จากโฟลเดอร์หนึ่งไปยังโฟลเดอร์อื่น


235

ฉันมีโฟลเดอร์จัดเก็บข้อมูลบนเครือข่ายซึ่งผู้ใช้ทุกคนจะเก็บข้อมูลที่ใช้งานอยู่บนเซิร์ฟเวอร์ ตอนนี้เซิร์ฟเวอร์จะถูกแทนที่ด้วยเซิร์ฟเวอร์ใหม่เนื่องจากมีปัญหาดังนั้นฉันต้องคัดลอกไฟล์โฟลเดอร์ย่อยจากโฟลเดอร์เก็บข้อมูลเซิร์ฟเวอร์เก่าไปยังโฟลเดอร์เก็บข้อมูลเซิร์ฟเวอร์ใหม่ ฉันมีตัวอย่างด้านล่าง:

จาก \ Oldeserver \ storage \ data & files เป็น \ New server \ storage \ data & files


3
ฉันคิดว่าคุณกำลังพูดถึงสภาพแวดล้อมของ Windows?
Alan Plum


4
@ HugoM.Zuleta ฉันรู้ว่าไฟล์. bat แต่ "แบตช์ไฟล์" ไม่จำเป็นต้องรับประกันสภาพแวดล้อมของ Windows การใช้คำว่า pre-date Windows (เช่นเดียวกับไฟล์. bat) และฉันเคยเห็นผู้ใช้ใช้คำว่าหมายถึง "เชลล์สคริปต์" ในสภาพแวดล้อม * nix
Alan Plum

1
@pluma ฉันเห็นด้วยและส่วนใหญ่เป็นเพราะพวกเขาอ้างถึงการดำเนินการแบทช์ที่ทำโดยเครื่องมือการเขียนสคริปต์ของระบบปฏิบัติการ
Hugo M. Zuleta

คำตอบ:


441

xcopy.exeเป็นเพื่อนของคุณที่นี่แน่นอน มันสร้างไว้ใน Windows ดังนั้นจึงไม่มีค่าใช้จ่าย

แค่ xcopy /s c:\source d:\target

คุณอาจต้องการปรับแต่งบางสิ่ง; ตัวเลือกบางตัวที่เราเพิ่ม ได้แก่ :

  • /s/e - คัดลอกซ้ำรวมถึงการคัดลอกไดเรกทอรีว่าง
  • /v- เพิ่มสิ่งนี้เพื่อตรวจสอบสำเนากับต้นฉบับ ช้ากว่า แต่สำหรับคนหวาดระแวง
  • /h - คัดลอกระบบและไฟล์ที่ซ่อน
  • /k- คัดลอกคุณลักษณะอ่านอย่างเดียวพร้อมกับไฟล์ มิฉะนั้นไฟล์ทั้งหมดจะกลายเป็นอ่าน - เขียน
  • /x- ถ้าคุณดูแลเกี่ยวกับสิทธิ์ของคุณอาจต้องการหรือ/o/x
  • /y - ไม่ต้องแจ้งก่อนเขียนทับไฟล์ที่มีอยู่
  • /z- หากคุณคิดว่าการคัดลอกอาจล้มเหลวและคุณต้องการเริ่มใหม่ให้ใช้สิ่งนี้ มันวางเครื่องหมายบนแต่ละไฟล์ในขณะที่มันคัดลอกเพื่อให้คุณสามารถรันคำสั่ง xcopy เพื่อรับจากที่ที่เหลือ

หากคุณคิดว่า xcopy อาจล้มเหลวได้ครึ่งทาง (เช่นเมื่อคุณกำลังคัดลอกผ่านการเชื่อมต่อเครือข่ายที่ไม่สม่ำเสมอ) xcopy /s/z c:\source d:\targetหรือว่าคุณมีที่จะหยุดมันและต้องการที่จะดำเนินการได้ในภายหลังคุณสามารถใช้

หวังว่านี่จะช่วยได้


2
@Iavinio กำลังขอไฟล์หรือไดเรกทอรีเมื่อคัดลอกไฟล์เก็บถาวร มีวิธีที่จะระงับสิ่งนั้นหรือไม่?
Bitterblue

สวัสดี @ mini-me - ฉันพบว่าหากเป็นไดเรกทอรีคุณสามารถระบุอักขระ '/' ต่อท้ายและคุณจะไม่เห็นข้อความนั้น
DaveDev

2
/i- หากปลายทางไม่มีอยู่และคัดลอกมากกว่าหนึ่งไฟล์ถือว่าปลายทางนั้นต้องเป็นไดเรกทอรี
lavinio

1
วิธีคัดลอกไฟล์เดียวจากไดเรกทอรี?
Charan Raju CR

10
ที่จะได้รับรอบ "แฟ้มหรือไดเรกทอรี" ให้ทำคำสั่งเช่นดังนั้น ... echo f | xcopy /s /f srcfile destfile
wintondeshong

56

คนที่ฉันชอบในการสำรองข้อมูลคือ:

ROBOCOPY "C:\folder" "C:\new_folder" /mir

/ mir สำหรับกระจก นอกจากนี้คุณยังสามารถใช้ / mov เพื่อย้ายไฟล์ มันทำซ้ำโฟลเดอร์เดียวกันแน่นอน มันสามารถลบ / เขียนทับไฟล์ได้ตามต้องการ ใช้งานได้ดีสำหรับฉัน มันเร็วกว่า xcopy / copy มันสร้างขึ้นใน Windows เช่นกัน

ที่มา: http://technet.microsoft.com/en-us/library/cc733145.aspx


2
ฉันสนับสนุนสิ่งนี้ มันเร็วจริงๆ เร็วกว่า xcopy
Ike

มีวิธีในการลบ thumbs.db แบบนี้ซ้ำ ๆ หรือไม่?
drooh

54

เพื่อให้ชัดเจนเมื่อคุณใช้xcopy /s c:\source d:\targetให้วาง "" รอบ ๆ c: \ source และ d: \ target มิฉะนั้นคุณจะได้รับข้อผิดพลาด

เช่นถ้ามีช่องว่างในเส้นทางเช่นถ้าคุณมี:

"C:\Some Folder\*.txt"

แต่ไม่จำเป็นถ้าคุณมี:

C:\SomeFolder\*.txt

1
เครื่องหมายอัญประกาศเป็นการหลอกลวง;) ขอบคุณฉันยังใช้ / Y เพื่อแทนที่ไฟล์หากมีอยู่ :) ตัวอย่าง:´´´xcopy / s "c: \ source" "d: \ target" / Y```
Joel Carneiro

18

คุณอาจต้องการดูXCopyหรือRoboCopyซึ่งเป็นโซลูชันที่ครอบคลุมสำหรับการคัดลอกไฟล์เกือบทั้งหมดใน Windows


3
ดูเหมือนว่า RoboCopy จะดีกว่า XCopy เพราะ xcopy ร้องขอไฟล์หรือการตัดสินใจของโฟลเดอร์ และฉันไม่สามารถปิดมันลง มันจะต้องสามารถทำงานได้อัตโนมัติเต็มรูปแบบ
Bitterblue

@ mini-me ฉันรู้ว่ามันสายมาก แต่ฉันไม่สามารถหาสวิตช์ที่เกี่ยวข้องได้ ฉันสิ้นสุดที่จะทำให้มันสร้างไฟล์เปล่าที่มีชื่อเดียวกับที่ฉันกำลังคัดลอกไปแล้วเขียนทับมัน หากไฟล์มีอยู่แล้วมันไม่รบกวนถามว่าไฟล์หรือไดเรกทอรี (ถ้าคุณต้องการไดเรกทอรีอัตโนมัติแล้วคุณสามารถผนวก '/' ไปยังเส้นทางและมันจะทำมัน) หวังว่านี่จะช่วยผู้คนในอนาคต!
Tom C

2
@Eve สำหรับการอ้างอิงecho f | xcopy source destination /yจะทำให้เป็นอัตโนมัติ มันกำหนดคำถามทั้งหมด "f" เป็นคำตอบ มันจะผ่านการร้องขอเขียนทับ (f เป็นใช่ฉันคิดว่า)
ndm13

14

หากต้องการข้าม 'ระบุชื่อไฟล์หรือชื่อไดเรกทอรีในเป้าหมาย (F = ไฟล์, D = ไดเรกทอรี)?' พรอมต์ด้วย xcopy คุณสามารถทำสิ่งต่อไปนี้ ...

echo f | xcopy /f /y srcfile destfile

หรือสำหรับพวกเราเพียงแค่คัดลอกโครงสร้าง / โฟลเดอร์ขนาดใหญ่:

ใช้ / i ซึ่งระบุปลายทางจะต้องเป็นไดเรกทอรีหากคัดลอกไฟล์มากกว่าหนึ่งไฟล์


(echo "f" สำหรับไฟล์หรือ "D" สำหรับไดเรกทอรี)
JinSnow

พยายามทำสิ่งนี้ในตอนนี้และมันก็ไม่ทำงาน - ฉันมักจะได้รับพรอมต์เมื่อพยายามคัดลอกไฟล์หนึ่งไปยังไดเรกทอรีอื่น ใช้ Win 10 หากมีผลกระทบกับมันเลย echo f | xcopy / f / y "My.dll" "C: \ myFolder \ My.dll" ฉันได้พยายามกับการรวมกันของสวิทช์อื่น ๆ จะไม่มีประโยชน์ (และ F ทุน)

3

หากคุณต้องการคัดลอกไฟล์ที่ไม่ได้ใช้พา ธ สัมบูรณ์พา ธ สัมพัทธ์ในคำอื่น ๆ :

อย่าลืมเขียนแบ็กสแลชในเส้นทางและอย่าเฉือน

ตัวอย่าง:

    copy children-folder\file.something .\other-children-folder

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

    @echo off
    echo %%~dp0 is "%~dp0"
    echo %%0 is "%0"
    echo %%~dpnx0 is "%~dpnx0"
    echo %%~f1 is "%~f1"
    echo %%~dp0%%~1 is "%~dp0%~1"

ตรวจสอบเอกสารเกี่ยวกับการทำสำเนาที่นี่: https://technet.microsoft.com/en-us/library/bb490886.aspx

และสำหรับเอกสารชุดพารามิเตอร์ได้ที่นี่: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true


ฉันคิดว่า \ ถูกเรียกว่าแบ็กสแลช
Leon Bohmann

2
@echo off

rem The * at the end of the destination file is to avoid File/Directory Internal Question.

rem You can do this for each especific file. (Make sure you already have permissions to the path)
xcopy /Y "\\Oldeserver\storage\data\MyFile01.txt" "\\New server\storage\data\MyFile01.txt"*
pause

rem You can use "copy" instead of "xcopy "for this example.

0

ดูrsyncที่ใช้ Windows เครื่องมือNASBackup มันจะเป็นโบนัสถ้าคุณคุ้นเคยกับคำสั่ง rsync

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