Làm cách nào để sao chép một tập tin vào một thư mục trong DOS và tạo các thư mục nếu cần thiết?


37

Làm cách nào tôi có thể sao chép một tệp bằng các lệnh DOS vào cấu trúc thư mục có thể chưa tồn tại? Tôi cần có khả năng buộc tạo đường dẫn thư mục đến vị trí tệp đích nếu vị trí đó không tồn tại.

Ví dụ: đã có file.txt ở vị trí này:

C:\file.txt

Và tôi muốn sao chép nó vào

C:\example\new\path\to\copy\of\file\file.txt

nhưng tại thời điểm này

C:\example\

và tất cả các thư mục con có thể tồn tại hoặc chưa tồn tại.

Về cơ bản, tôi đang tìm kiếm một lệnh "sao chép và tạo đường dẫn đích nếu cần thiết". Những gì bạn muốn giới thiệu là cách tốt nhất để đạt được điều này?


Đây có phải là câu hỏi thực sự về DOS (hoặc MS-DOS), hay đó là về dòng lệnh được tìm thấy trong các phiên bản Windows dựa trên NT (2000, XP, Vista, 7, 8, Server)?
Bob

Tôi có nghĩa là Windows CLI giống như DOS. Bạn khuyên gì là cách tốt nhất để mô tả "Windows CLI giống như DOS" cho tiêu đề bài viết?
gật đầu

Nói chung, tôi sẽ sử dụng Windows command linetrong tiêu đề / nội dung, cùng với các cửa sổ thẻ và dòng lệnh (lưu ý rằng cmd.exe là từ đồng nghĩa thẻ của dòng lệnh ). Thẻ ms-dos nên được gỡ bỏ; và không nên sử dụng liều tag trong mọi trường hợp.
Bob

Tuy nhiên, trong trường hợp này, với các câu trả lời hiện có / được chấp nhận dành cho DOS / MS-DOS, bạn cũng có thể để nguyên như vậy. Để tham khảo trong tương lai, DOS được / nên được hiểu là (các) hệ điều hành. Trong khi dòng lệnh Windows dựa trên chúng, có một số khác biệt đáng chú ý.
Bob

bạn có thể gọi nó là dấu nhắc cmd
barlop

Câu trả lời:


28

Vâng, đó là xcopy . Đây là những gì nó sẽ trông như:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

Thông tin XCOPY tại

Bạn cũng có thể muốn xem xét ROBOCOPY , trong bộ tài nguyên XP và tiêu chuẩn trong Vista, Windows 7 và Server 2008.

robocopy . c:\example\new\path\to\copy\of\file file.txt

3
xcopy vẫn ổn nếu bạn không cần đổi tên tệp của mình. Nếu bạn làm như vậy, thật không may, xcopy sẽ hỏi bạn liệu đích đến là thư mục hay tên tệp và không có chuyển đổi dòng lệnh để chỉ định "đó là tệp".
RomanSt

4
Xem câu trả lời khác - sử dụng trước echo f | với xcopy để trả lời lời nhắc này tự động.
mcw0933

Lưu ý rằng cần có một ký tự gạch chéo, ``, ở cuối đường dẫn đích. Nếu không, lệnh sẽ nhắc người dùng về việc đích đến là một thư mục hay một tệp nếu nó không tồn tại.
Lii

17

Tôi đã thử sử dụng một cái gì đó như:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

Nhưng nó sẽ hỏi tôi nếu nó là một tập tin hoặc thư mục. Vì tôi đã có trong một tệp bó với 40000 tệp, nên nó không thực tế. Giải pháp này chỉ giải quyết được một phần vấn đề của tôi: nó tạo ra cấu trúc thư mục, nhưng nó đòi hỏi sự tương tác của người dùng. Tôi tìm thấy giải pháp cho vấn đề của mình ở đây:

https://stackoverflow.com/questions/4283312/batch-file- task-for-file-or-folder

Về cơ bản là thêm "*" vào cuối tệp đích:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt*

EDIT: như được chỉ ra bởi @romkyns, nó có thể có kết quả không mong muốn nếu bạn có các tệp có cùng tên cộng với một cái gì đó khác (như 'file.txt.bak'). Trong cùng một chủ đề được đăng ở trên, một giải pháp khác hoạt động là chuyển "echo f" sang lệnh của bạn:

echo f | xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt

Nơi bạn nên thay thế "f" cho bất kỳ chữ cái nào mà hệ thống của bạn sử dụng cho tệp, trong trường hợp bạn đang sử dụng nó trong ngôn ngữ khác ..


1
Tất nhiên chỉ hoạt động nếu không có file.txt.baktrong thư mục. Tuy nhiên, điều này có thể làm việc trong một số tình huống.
RomanSt

@romkyns đúng. Vài tháng sau khi tôi đăng bài này, tôi đã phải đối mặt với cùng một vấn đề và thực hiện giải pháp "echo f", nó cũng hoạt động rất tốt. Chỉnh sửa câu trả lời của tôi ...
msb

1
Với echo f | , bạn không còn cần dấu vết *.
mcw0933

1
Tên tệp thứ hai là dự phòng trong trường hợp giống nhau. "xcopy file.txt c: \ example \ new \ path \ to \ copy \ of \ file \" sẽ hoạt động miễn là dấu gạch chéo trong thư mục ở đó (nếu không nó sẽ hỏi liệu một tệp hoặc thư mục có nghĩa là gì không) .
FourtyTwo

3

DOS, wow! Dù sao bạn sử dụng lệnh XCOPY .


1
4 năm về: yup. DOS tất cả chúng ta vẫn sử dụng nó ngay cả khi PowerShell tồn tại ..
Mr AH

0

Cho dù sử dụng copyhoặc xCopy, để tránh lỗi từ copyhoặc nhắc nhở xCopy, hãy kiểm tra sự tồn tại của thư mục cần thiết và tạo nó nếu cần:

if not exist "NewPath" MkDir "NewPath"
copy "[path\]file.ext" "NewPath[\NewFileName.ext]"

hoặc kết hợp các lệnh với &&trên một dòng lệnh:

if not exist "NewPath" MkDir "NewPath" && copy "[path\]file.ext" "NewPath[\NewFileName.ext]"

Điều tương tự có thể được thực hiện với movethay vì copy. Tôi đã học về kỹ thuật này từ câu trả lời của StackOverflow về cách thực hiện move.

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.