ไฟล์ xcopy ลงในไดเรกทอรีเดียว


21

ฉันต้องการใช้ xcopy บนเครื่อง Windows เพื่อดึงไฟล์ทั้งหมดที่มีนามสกุล. png ไว้ในไดเรกทอรีเดียว

ฉันพยายามxcopy C:\folder\*.png /s C:\png\แล้ว แต่มันเก็บไดเรกทอรีย่อยไว้ในโฟลเดอร์ \ (ตัวอย่างเช่นใน C: \ png มี C: \ png \ a \ b \ c \ img.png) ซึ่งฉันไม่ต้องการ ฉันเพียงต้องการ. png ทั้งหมดภายใน C: \ png โดยไม่ต้องเก็บโครงสร้างไดเรกทอรีที่อยู่ในโฟลเดอร์ C: \


คำตอบ:


39

สามารถทำได้ด้วยดีเก่าfor:

for /r C:\Folder %f in (*.png) do @copy "%f" C:\png

ไม่มีอะไรแฟนซี


มันได้ผล! สนใจที่จะอธิบายสิ่งที่%fมีไว้เพื่อ?
bobobobo

มันเป็นตัวแปรลูป
Joey

3
f" was unexpected at this timeเรื่องนี้ไม่ได้ทำงานสำหรับฉันฉันมีบางสิ่งบางอย่างเพื่อผลของ เปลี่ยน%fเป็น%%fทำงาน อย่างไรก็ตามฉันกำลังรันสิ่งนี้ในไฟล์แบตช์: หากคุณใช้คำสั่ง FOR ที่บรรทัดคำสั่งแทนที่จะใช้ในโปรแกรมแบตช์ให้ใช้เพียงเครื่องหมายเปอร์เซ็นต์เดียว:% G แทน %% G ss64.com/nt/for.html
ta.speot.is

1
อืมใช่ นั่นเป็นสิ่งที่คาดหวังและตรงตามที่คุณอ้าง ความสับสนของคุณมาจากไหน
Joey

1
@kayleeFrye_onDeck: เท่าที่ฉันรู้ว่าไม่มีตัวแปรพิเศษ สิ่งเดียวที่น้ำพุใจคือคนที่ไม่คุ้นเคยกับforอาจจะสับสนเกี่ยวกับสองที่แตกต่างกันในสิ่งที่ต้องการd เอกสารแนะนำให้ใช้ตัวพิมพ์ใหญ่ตัวอักษรสำหรับตัวแปรให้เกิดความสับสนหลีกเลี่ยง แต่แทนยังคงมีให้เห็นอย่างชัดเจนแตกต่างจากชื่อตัวแปรที่ฉันคิดว่า %~ddfor
Joey

1

หากคุณมี cygwin ติดตั้งแล้วนี่จะเป็นงานสำหรับการค้นหา:

cp `find /cygdrive/c/folder/* -name '*png'` /cygdrive/c/png/

(แม้ว่าจะมีปัญหาหากชื่อไฟล์ใดมีช่องว่างอยู่ในนั้น - คุณจะพบfindคำสั่งต่าง ๆ ที่จะทำงานได้ในทุกสถานการณ์)

หากคุณใช้งาน Vista, 2003 หรือ 2008 ดังนั้น "forfiles" ที่มีความยืดหยุ่นน้อยกว่า แต่ยังคงมีประโยชน์คือเพื่อนของคุณ สิ่งที่ต้องการ:

FORFILES /P c:\folder\ /M *.png /S /C "cmd /c copy @file c:\png\"

หมายเหตุ: ฉันไม่ได้ทดสอบคำสั่งข้างต้นอย่างใดอย่างหนึ่ง แต่ในทางทฤษฎีพวกเขาควรจะทำงาน ...


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