ไฟล์ Windows XP xcopy ที่มีนามสกุลเป็นแบบวนซ้ำ


3

ฉันมีสคริปต์บรรทัดเดียวที่คัดลอกไฟล์ ".ext1" ทั้งหมดจากโฟลเดอร์ปัจจุบันไปยังโฟลเดอร์ปลายทางซ้ำ:

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

มันทำงานได้อย่างสมบูรณ์

ตอนนี้ฉันต้องการคัดลอก * .ext2 ทั้งหมดด้วย แทนที่จะคัดลอกวาง (ใช้งานได้ดี):

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

ฉันต้องการใช้forคำสั่ง:

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

แต่มันไม่ทำงาน:

  1. มันไม่ได้คัดลอกส่วนย่อยของโฟลเดอร์ต้นทาง
  2. มันไม่ได้คัดลอกไฟล์ที่มีชื่อที่มีช่องว่างเช่น "read me.ext1"

ฉันพยายามใช้/Rรหัส:

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

แต่มันส่งผลให้มีการคัดลอกไฟล์ต้นฉบับย่อยไปยังโฟลเดอร์รากของปลายทาง และชื่อที่มีช่องว่างไม่ได้ไป

รูปแบบที่ถูกต้องของforคำสั่งจะเป็นอย่างไร


สำหรับใช้กับชื่อไฟล์ที่มีการใช้ช่องว่าง...xcopy "%%f%" ...
Stephan

คำตอบ:



1

เท่าที่ฉันบอกได้ตัวเลือกเดียวของคุณคือโทร xcopy หลาย ๆ ครั้ง หากคุณต้องการใช้รหัสซ้ำฉันเห็นสองตัวเลือก:

กำหนดพารามิเตอร์เป็นตัวแปรและใช้:

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

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

หรือสร้างโปรแกรมย่อยเพื่อทำการคัดลอก:

call :do_copy ext1
call :do_copy ext2

goto :eof

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

0

คุณไม่สามารถรวมสัญลักษณ์แทนในแบบปกติได้forเนื่องจากจะถูกขยายเสมอ (หรือถูกละเว้นหากไม่มีการจับคู่) หากคำตอบของ Endoro ไม่ได้ผลสำหรับคุณคุณสามารถอ่านรายการสัญลักษณ์แทนจากไฟล์หรือจากผลลัพธ์ของคำสั่ง ตัวอย่าง:

for /f %%f in ('echo *.ext1 ^& echo *.ext2') do xcopy %%f D:\dest /s /y
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.