วิธีคัดลอกไฟล์ไปยังไดเรกทอรีใน DOS และสร้างไดเรกทอรีหากจำเป็น?


37

ฉันจะคัดลอกไฟล์โดยใช้คำสั่ง DOS ไปยังโครงสร้างไดเรกทอรีที่อาจไม่มีอยู่ได้อย่างไร ฉันต้องสามารถบังคับให้สร้างเส้นทางไดเรกทอรีไปยังตำแหน่งไฟล์เป้าหมายได้หากตำแหน่งนั้นไม่มีอยู่

ตัวอย่างเช่นมี file.txt อยู่ในตำแหน่งนี้:

C:\file.txt

และฉันต้องการคัดลอกไปที่

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

แต่ในเวลานี้

C:\example\

และไดเรกทอรีย่อยทั้งหมดอาจมีหรือไม่มีก็ได้

โดยทั่วไปฉันกำลังมองหาคำสั่ง "คัดลอกและสร้างเส้นทางเป้าหมายหากจำเป็น" สิ่งที่คุณจะแนะนำคือวิธีที่ดีที่สุดในการบรรลุเป้าหมายนี้?


คำถามนี้เกี่ยวกับ DOS (หรือ MS-DOS) จริง ๆ หรือเป็นเรื่องเกี่ยวกับบรรทัดคำสั่งที่พบใน Windows รุ่นที่ใช้ NT (2000, XP, Vista, 7, 8, เซิร์ฟเวอร์) หรือไม่
Bob

ฉันหมายถึง DOS-like Windows CLI คุณแนะนำอะไรเป็นวิธีที่ดีที่สุดในการอธิบาย "DOS-like Windows CLI" สำหรับชื่อโพสต์
nodmonkey

โดยทั่วไปฉันจะใช้Windows command lineในชื่อ / เนื้อหาพร้อมกับแท็กwindowsและบรรทัดคำสั่ง (โปรดทราบว่าcmd.exeเป็นคำพ้องความหมายของแท็กของบรรทัดคำสั่ง ) แท็กms-dosควรถูกลบ และไม่ควรใช้แท็กโดไม่ว่าในกรณีใด ๆ
Bob

อย่างไรก็ตามในกรณีนี้ด้วยคำตอบที่มีอยู่ / เป็นที่ยอมรับสำหรับ DOS / MS-DOS คุณอาจปล่อยให้เป็นไปได้ สำหรับการอ้างอิงในอนาคต DOS คือ / ควรถูกตีความว่าเป็นระบบปฏิบัติการ แม้ว่าบรรทัดคำสั่งของ Windows จะขึ้นอยู่กับสิ่งเหล่านั้น แต่ก็มีความแตกต่างที่น่าสังเกต
Bob

คุณสามารถเรียกมันว่า cmd prompt
barlop

คำตอบ:


28

ใช่ว่าxcopy นี่คือลักษณะ:

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

ข้อมูล XCOPY ที่

คุณอาจต้องการค้นหาROBOCOPYในชุดทรัพยากร XP และมาตรฐานใน Vista, Windows 7 และ Server 2008

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

3
xcopy ใช้ได้ถ้าคุณไม่จำเป็นต้องเปลี่ยนชื่อไฟล์ด้วย หากคุณทำเช่นนั้นโชคไม่ดีที่ xcopy จะถามคุณว่าปลายทางนั้นเป็นไดเรกทอรีหรือชื่อไฟล์และไม่มีสวิตช์บรรทัดคำสั่งเพื่อระบุ "ไฟล์"
RomanSt

4
ดูคำตอบอื่น ๆ - ใช้echo f | คำสั่ง xcopy เพื่อตอบคำถามนี้โดยอัตโนมัติ
mcw0933

โปรดทราบว่าควรมีอักขระสแลช `` ที่ส่วนท้ายของเส้นทางปลายทาง มิฉะนั้นคำสั่งจะแจ้งให้ผู้ใช้เกี่ยวกับว่าปลายทางเป็น dir หรือไฟล์ถ้ามันไม่มีอยู่
Lii

17

ฉันลองใช้สิ่งที่ชอบ:

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

แต่มันจะถามฉันว่ามันเป็นไฟล์หรือไดเรกทอรี เนื่องจากฉันมีในไฟล์แบตช์ที่มีไฟล์ 40000 มันจะทำไม่ได้ โซลูชันนี้แก้ไขปัญหาของฉันได้เพียงบางส่วนเท่านั้น: สร้างโครงสร้างไดเรกทอรี แต่ต้องมีการโต้ตอบกับผู้ใช้ ฉันพบวิธีแก้ปัญหาของฉันที่นี่:

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

ซึ่งโดยทั่วไปแล้วจะเพิ่ม "*" ที่ท้ายไฟล์ปลายทาง:

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

แก้ไข: ตามที่ชี้โดย @romkyns อาจมีผลลัพธ์ที่ไม่พึงประสงค์หากคุณมีไฟล์ที่มีชื่อเหมือนกันบวกอย่างอื่น (เช่น 'file.txt.bak') ในเธรดเดียวกันที่โพสต์ไว้ด้านบนโซลูชันอื่นที่ใช้งานได้คือไพพ์ "echo f" ไปยังคำสั่งของคุณ:

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

ที่ซึ่งคุณควรแทนที่ "f" สำหรับตัวอักษรใด ๆ ที่ระบบของคุณใช้สำหรับไฟล์ในกรณีที่คุณใช้มันในภาษาอื่น ..


1
ซึ่งใช้ได้เฉพาะในกรณีที่ไม่มีfile.txt.bakอยู่ในไดเรกทอรีเท่านั้น ถึงกระนั้นสิ่งนี้อาจใช้ได้ในบางสถานการณ์
RomanSt

@romkyns จริง สองสามเดือนหลังจากที่ฉันโพสต์สิ่งนี้ฉันพบว่าตัวเองมีปัญหาเดียวกันและใช้วิธี "echo f" ก็ใช้งานได้ดีเช่นกัน กำลังแก้ไขคำตอบของฉัน ...
msb

1
ด้วยecho f | คุณไม่จำเป็นต้องติดตาม*อีกต่อไป
mcw0933

1
ชื่อไฟล์ที่สองซ้ำซ้อนกันในกรณีที่เหมือนกัน "xcopy file.txt c: \ example \ new \ path \ to \ copy \ of \ file \" จะทำงานตราบเท่าที่เครื่องหมายสแลชต่อท้ายในไดเรกทอรีอยู่ที่นั่น (ไม่เช่นนั้นจะถามว่าไฟล์หรือไดเร็กตอรี่นั้นหมายถึงอะไร) .
FourtyTwo


0

ไม่ว่าจะใช้copyหรือxCopyเพื่อหลีกเลี่ยงข้อผิดพลาดcopyหรือแจ้งให้xCopyทดสอบการมีอยู่ของโฟลเดอร์ที่จำเป็นและสร้างมันถ้าจำเป็น:

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

หรือรวมคำสั่งที่มี&&ในบรรทัดคำสั่งอย่างใดอย่างหนึ่ง:

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

สิ่งเดียวที่สามารถทำได้ด้วยการแทนmove copyผมได้เรียนรู้เกี่ยวกับเทคนิคนี้จากStackOverflowคำตอบmoveเกี่ยวกับวิธีการทำมันด้วย

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