Bagaimana cara menyalin file ke direktori di DOS, dan membuat direktori jika perlu?

37

Bagaimana saya bisa menyalin file menggunakan perintah DOS ke dalam struktur direktori yang mungkin belum ada? Saya harus dapat memaksa pembuatan jalur direktori ke lokasi file target jika lokasi itu belum ada.

Misalnya, sudah ada file.txt di lokasi ini:

C:\file.txt

Dan saya ingin menyalinnya

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

tetapi saat ini

C:\example\

dan semua subdirektori mungkin atau mungkin belum ada.

Pada dasarnya, saya mencari perintah "salin dan buat jalur target jika perlu". Apa yang akan Anda rekomendasikan adalah cara terbaik untuk mencapai ini?

anggukan
sumber
Apakah pertanyaan ini sebenarnya tentang DOS (atau MS-DOS), atau apakah tentang baris perintah yang ditemukan dalam versi Windows berbasis NT (2000, XP, Vista, 7, 8, Server)?
Bob
Maksud saya CLI Windows seperti DOS. Apa yang Anda rekomendasikan adalah cara terbaik untuk menggambarkan "CLI Windows seperti DOS" untuk judul posting?
nodmonkey
Secara umum, saya akan menggunakan Windows command linejudul / badan, bersama dengan jendela tag dan baris perintah (perhatikan bahwa cmd.exe adalah sinonim tag baris perintah ). Tag ms-dos harus dihapus; dan tag dos tidak boleh digunakan sama sekali dalam kondisi apa pun.
Bob
Namun, dalam hal ini, dengan jawaban yang ada / diterima untuk DOS / MS-DOS, Anda dapat membiarkannya apa adanya. Untuk referensi di masa mendatang, DOS harus / harus diartikan sebagai sistem operasi. Sementara baris perintah Windows didasarkan pada mereka, ada beberapa perbedaan penting.
Bob
Anda dapat menyebutnya prompt cmd
barlop

Jawaban:

28

Ya, itu xcopy . Ini akan terlihat seperti:

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

Info XCOPY di

Anda mungkin juga ingin melihat ROBOCOPY , dalam kit sumber daya XP dan standar di Vista, Windows 7, dan Server 2008.

robocopy . c:\example\new\path\to\copy\of\file file.txt
bw
sumber
3
xcopy baik-baik saja jika Anda tidak perlu juga mengganti nama file Anda. Jika Anda melakukannya, sayangnya xcopy akan menanyakan kepada Anda apakah tujuannya adalah direktori atau nama file dan tidak ada saklar baris perintah untuk menentukan "itu file".
RomanSt
4
Lihat jawaban lain - gunakan pendahuluan echo f | dengan xcopy untuk menjawab prompt ini secara otomatis.
mcw0933
Perhatikan bahwa harus ada karakter garis miring, ``, di ujung jalur tujuan. Kalau tidak, perintah akan meminta pengguna tentang apakah tujuan adalah dir atau file jika tidak ada.
Lii
17

Saya mencoba menggunakan sesuatu seperti:

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

Tapi itu akan bertanya kepada saya apakah itu file atau direktori. Karena saya punya itu dalam file batch dengan 40000 file, itu akan menjadi tidak praktis. Solusi ini hanya menyelesaikan sebagian masalah saya: ini menciptakan struktur direktori, tetapi membutuhkan interaksi pengguna. Saya menemukan solusi untuk masalah saya di sini:

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

Yang pada dasarnya untuk menambahkan "*" di akhir file tujuan:

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

EDIT: seperti yang ditunjukkan oleh @romkyns, ini mungkin memiliki hasil yang tidak diinginkan jika Anda memiliki file yang memiliki nama yang sama ditambah sesuatu yang lain (seperti 'file.txt.bak'). Pada utas yang sama yang diposting di atas, solusi lain yang berfungsi adalah mem-pipkan "echo f" ke perintah Anda:

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

Di mana Anda harus mengganti "f" untuk huruf apa pun yang digunakan sistem Anda untuk file, jika Anda menggunakannya dalam bahasa lain ..

msb
sumber
1
Yang hanya berfungsi jika tidak ada file.txt.bakdalam direktori, tentu saja. Namun, ini mungkin berhasil dalam beberapa skenario.
RomanSt
@romkyns benar. beberapa bulan setelah saya memposting ini, saya menghadapi diri saya dengan masalah yang sama dan melakukan solusi "echo f", itu bekerja dengan baik juga. Mengedit jawaban saya ...
msb
1
Dengan echo f | , Anda tidak perlu lagi membuntuti *.
mcw0933
1
Nama file kedua adalah redundan jika itu sama. "xcopy file.txt c: \ example \ new \ path \ to \ copy \ of \ file \" akan berfungsi selama ada trailing slash di direktori (jika tidak ia menanyakan apakah file atau direktori yang kita maksudkan) .
FourtyTwo
3

DOS, wow! Pokoknya Anda menggunakan perintah XCOPY .

Dustin Laine
sumber
1
4 tahun berlalu: ya. DOS kita semua masih menggunakannya meskipun PowerShell ada ..
Mr AH
0

Apakah menggunakan copyatau xCopy, untuk menghindari kesalahan dari copyatau prompt dari xCopy, menguji keberadaan folder yang diperlukan dan membuatnya jika perlu:

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

atau gabungkan perintah dengan &&pada satu baris perintah:

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

Hal yang sama bisa dilakukan dengan movealih - alih copy. Saya belajar tentang teknik ini dari jawaban StackOverflow tentang cara melakukannya move.

NewSites
sumber