Tập tin hàng loạt để sao chép tập tin từ thư mục này sang thư mục khác


235

Tôi có một thư mục lưu trữ trên mạng trong đó tất cả người dùng sẽ lưu trữ dữ liệu hoạt động của họ trên máy chủ. Bây giờ máy chủ đó sẽ được thay thế bởi một máy chủ mới do sự cố địa điểm, vì vậy tôi cần sao chép các tệp thư mục con từ thư mục lưu trữ máy chủ cũ sang thư mục lưu trữ máy chủ mới. Tôi có dưới đây:

từ \ Oldeserver \ Storage \ data & files đến \ New server \ Storage \ data & files.


3
Tôi giả sử bạn đang nói về một môi trường Windows?
Alan Plum


4
@ HugoM.Zuleta, tôi biết các tệp .bat. Nhưng "tệp bó" không nhất thiết phải đảm bảo môi trường Windows. Việc sử dụng thuật ngữ Windows trước ngày (cũng như các tệp .bat) và tôi thậm chí đã thấy người mới sử dụng thuật ngữ này có nghĩa là "tập lệnh shell" trong môi trường * nix.
Alan Plum

1
@pluma Tôi đồng ý và điều này chủ yếu là vì họ đề cập đến các hoạt động hàng loạt được thực hiện bởi các công cụ kịch bản của hệ điều hành của họ.
Hugo M. Zuleta

Câu trả lời:


441

xcopy.exe chắc chắn là bạn của bạn ở đây. Nó được tích hợp vào Windows, vì vậy chi phí của nó không là gì.

Chỉ xcopy /s c:\source d:\target

Bạn có thể muốn điều chỉnh một vài điều; một số tùy chọn chúng tôi cũng thêm vào bao gồm:

  • /s/e - sao chép đệ quy, bao gồm sao chép các thư mục trống.
  • /v- thêm phần này để xác minh bản sao so với bản gốc. chậm hơn, nhưng đối với người hoang tưởng.
  • /h - sao chép hệ thống và các tập tin ẩn.
  • /k- sao chép các thuộc tính chỉ đọc cùng với các tệp. mặt khác, tất cả các tệp trở thành đọc-ghi.
  • /x- nếu bạn quan tâm đến quyền, bạn có thể muốn /ohoặc /x.
  • /y - không nhắc trước khi ghi đè các tập tin hiện có.
  • /z- nếu bạn nghĩ rằng bản sao có thể thất bại và bạn muốn khởi động lại nó, hãy sử dụng bản sao này. Nó đặt một điểm đánh dấu trên mỗi tệp khi nó sao chép, vì vậy bạn có thể chạy lại lệnh xcopy để chọn từ nơi nó rời đi.

Nếu bạn nghĩ rằng xcopy có thể thất bại giữa chừng (như khi bạn sao chép qua kết nối mạng không ổn định) hoặc bạn phải dừng nó và muốn tiếp tục sau đó, bạn có thể sử dụng xcopy /s/z c:\source d:\target.

Hi vọng điêu nay co ich.


2
@Iavinio Đó là yêu cầu tập tin hoặc thư mục khi sao chép một kho lưu trữ. Có cách nào để trấn áp điều đó?
Bitterblue

Xin chào @ mini-me - Tôi thấy rằng nếu đó là một thư mục, bạn có thể chỉ định một ký tự '/' và bạn sẽ không thấy thông báo đó.
DaveDev

2
/i- Nếu đích không tồn tại và sao chép nhiều hơn một tệp, giả sử đích đó phải là một thư mục.
lavinio

1
Làm thế nào để sao chép một tập tin từ thư mục?
Charan Raju CR

10
Để di chuyển xung quanh dấu nhắc "tệp hoặc thư mục", hãy thực hiện lệnh như vậy ... echo f | xcopy /s /f srcfile destfile
wintondeshong

56

Yêu thích của tôi để sao lưu dữ liệu là:

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

/ mir là cho gương. Bạn cũng có thể sử dụng / Mov để di chuyển tập tin. Nó sao chép chính xác cùng một thư mục. Nó có thể xóa / ghi đè lên các tập tin khi cần thiết. Làm việc tuyệt vời cho tôi. Nó nhanh hơn xcopy / copy. Nó cũng được tích hợp sẵn trong Windows.

Nguồn: http://technet.microsoft.com/en-us/l Library / cc733145.aspx


2
Tôi ủng hộ điều này. Nó thực sự rất nhanh. nhanh hơn nhiều so với xcopy
Ike

Có cách nào để loại bỏ đệ quy ngón tay cái.db tương tự như thế này không?
drooh

54

Để rõ ràng, khi bạn sử dụng xcopy /s c:\source d:\target, hãy đặt "" xung quanh mục tiêu c: \ source và d: \, nếu không bạn sẽ gặp lỗi.

tức là nếu có khoảng trắng trong đường dẫn tức là nếu bạn có:

"C:\Some Folder\*.txt"

nhưng không bắt buộc nếu bạn có:

C:\SomeFolder\*.txt

1
Các dấu ngoặc kép đã lừa;) nhờ tôi cũng sử dụng / Y để thay thế các tập tin nếu nó tồn tại :) Ví dụ:'''xcopy / s "c: \ nguồn" "d: \ target" / Y```
Joel Carneiro

18

Bạn có thể muốn xem XCopy hoặc RoboCopy là những giải pháp khá toàn diện cho gần như tất cả các hoạt động sao chép tệp trên Windows.


3
RoboCopy dường như tốt hơn XCopy vì xcopy yêu cầu các quyết định về tệp hoặc thư mục. Và tôi không thể từ chối nó. Nó PHẢI có thể làm việc hoàn toàn tự động.
Bitterblue

@ mini-me Tôi biết điều này là rất muộn tuy nhiên tôi không thể tìm thấy công tắc tương tự. Cuối cùng tôi đã dùng đến việc làm cho nó tạo ra một tập tin trống có cùng tên tôi đang sao chép và sau đó ghi đè lên nó. Nếu tập tin đã tồn tại thì nó không bận tâm hỏi nó là tập tin hay thư mục. (Nếu bạn muốn thư mục tự động thì bạn có thể thêm '/' vào đường dẫn và nó sẽ thực hiện). Hy vọng điều này sẽ giúp những người tương lai!
Tom C

2
@Eve Để tham khảo, echo f | xcopy source destination /ysẽ làm cho nó tự động. Nó gán tất cả các câu hỏi "f" làm câu trả lời. Nó cũng sẽ vượt qua các yêu cầu ghi đè (f được coi là có, tôi nghĩ vậy).
ndm13

14

Để bỏ qua 'chỉ định tên tệp hoặc tên thư mục trên đích (F = tệp, thư mục D =)?' nhắc với xcopy, bạn có thể làm như sau ...

echo f | xcopy /f /y srcfile destfile

hoặc đối với những người trong chúng ta chỉ sao chép các cấu trúc / thư mục lớn:

use / i chỉ định đích phải là một thư mục nếu sao chép nhiều hơn một tệp


(echo "f" cho các tệp hoặc "D" cho các thư mục)
JinSnow

cố gắng làm điều này ngay bây giờ và nó chỉ không hoạt động - Tôi luôn nhận được lời nhắc khi cố gắng sao chép một tệp vào thư mục khác. Sử dụng Win 10 nếu điều đó ảnh hưởng đến nó ở tất cả echo f | xcopy / f / y "My.dll" "C: \ myFolder \ My.dll". Tôi đã thử nó với sự kết hợp của các công tắc khác nhưng không có kết quả (và vốn F)
Prof

3

nếu bạn muốn sao chép tệp không sử dụng đường dẫn tuyệt đối, đường dẫn tương đối nói cách khác:

đừng quên viết dấu gạch chéo ngược trong đường dẫn VÀ KHÔNG gạch chéo

thí dụ :

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

PS: đường dẫn tuyệt đối có thể được truy xuất bằng cách sử dụng các ký tự đại diện này được gọi là "tham số lô"

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

kiểm tra tài liệu ở đây về bản sao: https://technet.microsoft.com/en-us/l Library / bb490886.aspx

và cũng ở đây để xem tài liệu tham số hàng loạt: https://www.microsoft.com/resource/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true


Tôi nghĩ rằng \ được gọi là dấu gạch chéo ngược.
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

Nhìn vào rsynccông cụ Windows dựa trên NASBackup . Nó sẽ là một phần thưởng nếu bạn làm quen với các lệnh rsync.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.