Các tệp xcopy Windows XP có phần mở rộng đệ quy


3

Tôi có một tập lệnh một dòng sao chép tất cả các tệp ".ext1" từ thư mục hiện tại sang thư mục đích theo cách đệ quy:

xcopy *.ext1 D:\dest /s /d /y

Nó hoạt động hoàn hảo.

Bây giờ tôi cũng muốn sao chép tất cả * .ext2. Thay vì dán sao chép (hoạt động tốt):

xcopy *.ext1 D:\dest /s /d /y
xcopy *.ext2 D:\dest /s /d /y

Tôi muốn sử dụng một for chỉ huy:

for %%f in (*.ext1 *.ext2) do xcopy %%f D:\dest /s /d /y

Nhưng nó không hoạt động:

  1. Nó không sao chép thư mục con của thư mục nguồn
  2. Nó không sao chép các tệp có tên có khoảng trắng như "read me.ext1"

Tôi đã cố gắng sử dụng một /R Chìa khóa:

for /R %%f in (*.ext1 *.ext2) do xcopy %%f D:\dest /s /d /y

nhưng nó đã dẫn đến việc sao chép các tập tin nguồn phụ vào thư mục gốc của Dest. Và tên với không gian đã không đi.

Một hình thức chính xác của for lệnh sẽ là gì?


để sử dụng với tên tệp có không gian sử dụng ...xcopy "%%f%" ...
Stephan

Câu trả lời:


5

thử đi:

for %%f in (.ext1 .ext2) do xcopy *%%f D:\dest /s /d /y

1

Theo như tôi có thể nói với lựa chọn duy nhất của bạn để gọi xcopy nhiều lần. Nếu bạn muốn sử dụng lại một số loại mã, tôi thấy hai tùy chọn:

Xác định các tham số dưới dạng các biến và sử dụng chúng:

set dest=d:\dest
set options=/s /d /y

xcopy *.ext1 %dest% %options%
xcopy *.ext2 %dest% %options%

hoặc tạo một chương trình con để thực hiện sao chép:

call :do_copy ext1
call :do_copy ext2

goto :eof

:do_copy
   xcopy *.%1 d:\dest /s /d /y
   goto :eof

0

Bạn không thể bao gồm các ký tự đại diện thường xuyên for bởi vì chúng sẽ luôn được mở rộng (hoặc bỏ qua nếu không có kết quả khớp). Nếu câu trả lời của Endoro không phù hợp với bạn, bạn có thể đọc danh sách các ký tự đại diện từ một tệp hoặc từ đầu ra của lệnh. Thí dụ:

for /f %%f in ('echo *.ext1 ^& echo *.ext2') do xcopy %%f D:\dest /s /y
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.