xcopy file, rename, suppress pesan "Apakah xxx sebutkan nama file ..."

404

Ini kelihatannya cukup sederhana dan mungkin saya hanya mengabaikan flag yang tepat , tetapi bagaimana saya, dalam satu perintah, menyalin file dari satu direktori ke direktori lain dan mengganti namanya di direktori tujuan? Inilah perintah saya:

if exist "bin\development\whee.config.example"
  if not exist "TestConnectionExternal\bin\Debug\whee.config"
    xcopy "bin\development\whee.config.example"
          "TestConnectionExternal\bin\Debug\whee.config"

Ini meminta saya dengan yang berikut setiap saat:

Apakah TestConnectionExternal \ bin \ Debug \ whee.config menentukan nama file atau nama direktori pada target (F = file, D = direktori)?

Saya ingin menekan prompt ini; jawabannya selalu F.

Kapal Sarah
sumber
15
gema f | xcopy ...
Cyclion
downvote mengapa Anda bahkan menggunakan xcopy jika salin melakukan apa yang Anda inginkan
barlop
3
Miscrosoft : "mengapa membuat sesuatu yang sederhana ketika Anda dapat membuatnya benar-benar membingungkan bagi pengguna Anda?". Inilah saatnya mereka hanya menyalin apa yang sedang dilakukan di dunia Linux, lihat cptidak b ** t untuk menyalin file / dir sekitar!
fduff
Saya sarankan membaca jawaban saya pada file BATCH untuk meminta file atau folder yang menjelaskan secara rinci ketika prompt ditampilkan dan bagaimana hal itu dapat dijawab secara otomatis oleh file batch bahasa OS yang independen.
Mofi

Jawaban:

217

Jangan gunakan xcopy, gunakan copysaja, itu tidak memiliki masalah ini.

xcopyumumnya digunakan ketika melakukan salinan berulang beberapa file / folder, atau ketika Anda membutuhkan fitur verifikasi / mendorong yang ditawarkannya. Untuk salinan file tunggal, copyperintah itu berfungsi dengan baik.

LBushkin
sumber
97
copytidak akan menyalin file jika seluruh struktur direktori untuk tujuan belum ada. xcopysecara otomatis akan membuat semua direktori yang dibutuhkan.
BQ.
41
Sungguh menakjubkan bahwa xcopy memiliki penghilangan ini. Jika hanya memiliki opsi untuk file seperti itu untuk direktori (/ I), ini akan diselesaikan dan xcopy bisa menjadi pengganti yang bagus untuk menyalin. Sebagai gantinya, karena cacat ini, Anda harus memilih salinan untuk situasi ini.
rocketmonkeys
35
Seperti yang sudah ditunjukkan orang lain, jawaban @Arshea adalah jawaban yang benar. Ini karena a) keadaan OP tertentu yang sudah memiliki struktur direktori tidak disebutkan dalam pertanyaan, dan b) jauh lebih berharga bagi pembaca masa depan dari pertanyaan ini yang akan datang ke sini mencari jawaban mengenai xcopydan bukan hanya copy.
Mike Nakis
17
Yah @ jawaban Amshea juga yang benar karena pertanyaannya adalah khusus untuk xcopy, dan jawaban ini pada dasarnya "tidak menggunakan xcopy". Tidak benar-benar menjawab pertanyaan tentang xcopy sama sekali, sekarang bukan?
BrainSlugs83
9
Cukup tambahkan bintang di ujung jalan untuk target. Lihatlah jawaban di bawah ini. stackoverflow.com/a/26034267/1231
Donny V.
638

saya menggunakan

echo f | xcopy /f /y srcfile destfile

untuk menyiasatinya.

Shea
sumber
17
@Arnshea - terima kasih! Diadaptasi untuk salinan direktori diamecho d | xcopy srcdirectory destdirectory /S
Dr. ABT
8
+1 @Arnshea saya butuh waktu untuk memahami apa yang sebenarnya Anda lakukan di sana dan karena saya bekerja pada instalasi windows Jerman echo d | xcopy ...untuk saya. Anda brilian
Thomas
23
Dia mensimulasikan respons pengguna terhadap pertanyaan yang akan ditanyakan xcopy.
John Munsch
5
@ Thomas Apakah itu menyiratkan bahwa file batch yang menggunakan teknik ini tidak akan portabel di berbagai daerah?
Max Nanasy
17
@ MaxNanasy Saya mengkonfirmasi bahwa ini tidak portabel di seluruh lokal. Dalam pengaturan bahasa Jerman, Anda memberikan D untuk file atau V untuk direktori. :(
Matt
177

Pilihan lain adalah menggunakan wildcard tujuan. Perhatikan bahwa ini hanya berfungsi jika nama file sumber dan tujuan akan sama, jadi sementara ini tidak menyelesaikan contoh spesifik OP, saya pikir itu layak untuk dibagikan.

Sebagai contoh:

xcopy /y "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\*" 

akan membuat salinan file "whee.config.example" di direktori tujuan tanpa meminta file atau direktori.

Pembaruan : Seperti yang disebutkan oleh @chapluck:

Anda bisa berubah "* "menjadi "[newFileName].*". Itu tetap ekstensi file tetapi memungkinkan untuk mengganti nama. Atau lebih banyak peretasan: "[newFileName].[newExt]*"untuk mengubah ekstensi

zippycoder
sumber
1
"Gema f |" caranya memang keren, tapi ini menghindari keluaran ekstra yang sering saya cari untuk menemukan masalah.
Richard Anthony Hein
6
@ Durden81 - seperti yang ditunjukkan zippycoder, jawaban mereka tidak mengubah nama file, yang merupakan persyaratan OP.
Polyfun
6
Untuk memperluas jawaban saya akan mengubah "*" menjadi "[newFileName]. *". Itu tetap ekstensi file tetapi memungkinkan untuk mengganti nama. Atau lebih banyak hacky: "[newFileName]. * [NewExt]" untuk mengubah ekstensi.
chapluck
Terima kasih! Bagian pembaruan adalah yang memecahkan masalah saya, di mana nama file perlu diubah, sambil menjaga ekstensi dan dengan asumsi bahwa itu adalah file. XCopy seharusnya memiliki ini sebagai saklar.
Stanislav
1
Bekerja untuk saya tanpa tanda bintang pada akhirnya, hanya garis miring terbalik.
tivnet
91

Ada semacam fitur tidak berdokumen di XCOPY. kamu bisa menggunakan:

xcopy "bin \ development \ whee.config.example" "c: \ mybackup \ TestConnectionExternal \ bin \ Debug \ whee.config *"

Saya mengujinya hari ini. :-)

ienaxxx
sumber
4
Terima kasih banyak. Saya menambahkan "*" di akhir file tujuan dan berhasil .. :) +1 untuk trik
Rahul Patel
2
Solusi luar biasa - bersih, elegan, tidak menggunakan perintah yang berbeda, kompatibel dengan flag xcopy yang ada, berfungsi dengan sempurna. Ini harus menjadi jawaban terpilih teratas.
Brian Swift
7
Jawabannya salah, perintah akan menghasilkan whee.config.examplefolder tujuan, karena whee.config*cocok whee.config.example.
Meow
2
Saya baru saja membuat file b.txtxt, dan kemudian saya meluncurkan perintah xcopy a.txt b.txt* /F /Ydan file a.txttersebut telah disalin ke b.txt, seperti yang diharapkan. Selain itu, saat menggunakan /F /Ysakelar, salinan aktual ditampilkan di layar, persis seperti yang diharapkan.
Dominique
1
@ Meow: tidak, karena wildcard ada di tujuan, bukan sumbernya.
ienaxxx
74

Cukup buka http://technet.microsoft.com/en-us/library/bb491035.aspx

Inilah yang menjadi MASALAH UTAMA "... Jika Tujuan tidak berisi direktori yang ada dan tidak diakhiri dengan garis miring terbalik (), pesan berikut ini muncul: ...

Apakah tujuan menentukan nama file atau nama direktori pada target (F = file, D = direktori)?

Anda dapat menekan pesan ini dengan menggunakan opsi baris perintah / i, yang menyebabkan xcopy berasumsi bahwa tujuan adalah direktori jika sumbernya lebih dari satu file atau direktori.

Butuh waktu beberapa saat, tetapi yang diperlukan hanyalah RTFM.

Tagihan
sumber
7
Ini harus menjadi jawaban teratas! Agar benar-benar jelas bagi orang lain. Jika Anda menyalin SATU file dari satu tempat ke tempat lain DAN Anda ingin struktur direktori lengkap dibuat, gunakan perintah berikut: xcopy / "C: \ Data \ Images \ 2013 \ 08 \ 12 \ 85e4a707-2672-481b-92fb -67ecff20c96b.jpg "" C: \ Data Target \\ Gambar \ 2013 \ 08 \ 12 \ 85e4a707-2672-481b-92fb-67ecff20c96b.jpg \ ". Ya, beri backslash di akhir nama file!
adudley
4
Jawaban yang bagus, tetapi tidak menyelesaikan masalah. Saya mencoba xcopy hello.txt hello2 \. Tidak cepat Sekarang saya mencoba xcopy hello.txt hello3 (tanpa backslash). Ini meminta saya apakah dest adalah file atau dir. Saya perlu cara untuk mengatakannya untuk mengasumsikan F atau D dalam naskah.
RuntimeException
27
Ini adalah jawaban yang sangat aneh, terutama karena upvotes, snark "RTFM" yang tidak membantu, dan komentar yang meletakkan jawaban "populer" ... karena tidak menjawab pertanyaan awal! Pertanyaan aslinya dengan jelas mengatakan "salin file dari satu direktori ke direktori lain DAN RENAME IT di direktori tujuan". Jawaban yang dicoba diberikan di atas muncul untuk mengatasi kasus berbeda menyalin file dengan nama file tujuan menjadi nama SAMA sebagai file sumber. Solusi "berantakan" yang diberikan oleh @Arnshea adalah satu-satunya jawaban satu langkah yang saya lihat diberikan di sini - dengan demikian "popularitasnya".
M.Bearden
3
Tn. Bearden cukup sopan, tetapi mengingat jumlah suara yang naik, saya merasa perlu untuk secara jelas menyebutkan masalah dengan jawaban ini: 1) 1 paragraf yang tampaknya memberikan solusi untuk masalah OP (paragraf 4 dari 5), tidak tidak bekerja, karena OP adalah menyalin dan mengganti nama sebuah file yang , tidak direktori; 2) tautan yang diberikan di bagian atas jawaban tidak memberikan solusi; 3) pernyataan dari masalah utama tidak tidak berlaku untuk pertanyaan OP; dan 4) jawabannya tidak sopan, dengan berteriak di paragraf ke-2 dan penghinaan di akhir. Mungkin dia harus membaca kembali Pertanyaannya.
GlennFromIowa
2
Semua jawaban yang diberikan di sini adalah untuk menyalin ke direktori, bukan untuk menyalin dalam tujuan file, yang mungkin dan tidak berdokumen, lihat jawaban lain dari zippycoder, chapluck, LBushkin
pdem
27

Jadi, ada perbaikan sederhana untuk ini. Memang memang aneh, tapi berhasil. xcopy tidak akan meminta untuk mengetahui apakah tujuan adalah direktori atau file JIKA file baru (nama file) sudah ada. Jika Anda mendahului perintah xcopy Anda dengan gema sederhana ke nama file baru, itu akan menimpa file kosong. Contoh

echo.>newfile.txt
xcopy oldfile.txt newfile.txt /Y
DaveD
sumber
6

Ini dari jawaban Bills.

Agar benar-benar jelas bagi orang lain.

Jika Anda menyalin SATU file dari satu tempat ke tempat lain DAN Anda ingin struktur direktori lengkap dibuat, gunakan perintah berikut:

xcopy "C:\Data\Images\2013\08\12\85e4a707-2672-481b-92fb-67ecff20c96b.jpg" "C:\Target Data\\Images\2013\08\12\85e4a707-2672-481b-92fb-67ecff20c96b.jpg\" 

Ya, beri backslash di akhir nama file dan TIDAK akan menanyakan Anda apakah itu file atau direktori. Karena hanya ada SATU file di sumber, itu akan menganggap itu file.

adudley
sumber
12
Ini salah. Ketika menjalankan "xcopy versionBase.txt asd \ versionBase.txt \" dan direktori asd tidak ada, saya mendapatkan file asd \ versionBase.txt \ versionBase.txt.
Cristian Niculescu
1
Seperti jawaban lain di halaman ini, postingan ini tidak membahas pertanyaan awal. Pertanyaannya adalah bagaimana cara menyalin DAN mengganti nama file (dalam satu langkah) file. Seperti halnya jawaban lain yang kelihatannya membingungkan, ini berbicara tentang cara menyalin file TANPA mengganti nama.
M.Bearden
Belum lagi fakta bahwa itu benar-benar membuat direktori dengan nama itu, bukan folder. Uji, dan jalankan dir setelahnya, dan Anda akan melihat sesuatu seperti ini: dir "C:\Target Data\\Images\2013\08\12" 09/25/2015 10:48 AM <DIR> 85e4a707-2672-481b-92fb-67ecff20c96b.jpg
GlennFromIowa
3

xcopy src dest /I

REM This assumes dest is a folder and will create it, if it doesnt exists

jerryh91
sumber
2

Saya memiliki masalah yang sama dan kedua robocopy dan xcopy tidak membantu, karena saya ingin menekan komentar dan menggunakan nama file tujuan yang berbeda. saya menemukan

type filename.txt > destfolder\destfilename.txt

bekerja sesuai kebutuhan saya.

pengguna140185
sumber
2

Kembali ke pertanyaan awal:

 xcopy "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\whee.config"

bisa dilakukan dengan dua perintah mis:

mkdir "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.."
xcopy "bin\development\whee.config.example" "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"

Dengan hanya menambahkan "\ .." ke jalur file tujuan direktori tujuan dibuat jika belum ada. Pada kasus ini

"c:\mybackup\TestConnectionExternal\bin\Debug\"

yang merupakan direktori induk dari direktori yang tidak ada

"c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\.."

Setidaknya untuk Win7 mkdir tidak peduli jika direktori

"c:\mybackup\TestConnectionExternal\bin\Debug\whee.config\"

benar-benar ada.

granat
sumber
Perbaikan yang menarik jika direktori tidak ada. Sayangnya, baris berikutnya (dalam pengujian saya) masih meminta pengguna.
GlennFromIowa
Anda benar, itu harus xcopy "bin \ development \ whee.config.example" "c: \ mybackup \ TestConnectionExternal \ bin \ Debug \ whee.config \". Saya menggunakan pendekatan saya untuk menyalin file ke direktori yang mungkin tidak ada. Untuk mengganti nama sepertinya backslash harus ditambahkan di akhir.
grenix
2

XCOPY dengan * di akhir target untuk menyalin file apakah ada di tujuan XCOPY dengan \ di akhir target untuk menyalin folder dan konten apakah ada atau tidak di tujuan

kalau tidak

RoboForm SOURCE DEST FILE untuk file RoboForm SOURCE DEST untuk folder

Colin Hay
sumber
1

Saya sarankan robocopydaripada copyatau xcopy. Digunakan sebagai perintah atau dalam GUI pada klien atau server. Toleransi jaringan berhenti dan Anda dapat memilih untuk mengabaikan atribut file saat menyalin salinan berdasarkan atribut file. Oh, dan itu mendukung mesin multi-core sehingga file disalin lebih cepat dalam "paralel" satu sama lain, bukan secara berurutan. robocopydapat ditemukan di MS TechNet.

surferdj
sumber
2
Saya menggunakan robocopy sepanjang waktu. Namun, untuk pertanyaan poster ini, itu tidak akan berfungsi, karena tidak dapat mengganti nama file. Sesuatu yang saya tidak tahu sebelum hari ini adalah bahwa xcopy memiliki saklar / z, yang toleran terhadap jeda jaringan!
GlennFromIowa
1

Hal yang benar untuk dilakukan jika Anda ingin menyalin file dan mengubah namanya di tujuan adalah:

xcopy / f / y "bin \ development \ example.exe" "TestConnectionExternal \ bin \ Debug \ NewName.exe *"

Dan itu akan bekerja dengan baik

Terima kasih
sumber
1

Untuk menduplikasi file besar, xopy with / J switch adalah pilihan yang baik. Dalam hal ini, cukup pipa F untuk file atau D untuk direktori. Anda juga dapat menyimpan pekerjaan dalam array untuk referensi di masa mendatang. Sebagai contoh:

$MyScriptBlock = {
    Param ($SOURCE, $DESTINATION) 
    'F' | XCOPY $SOURCE $DESTINATION /J/Y 
    #DESTINATION IS FILE, COPY WITHOUT PROMPT IN DIRECT BUFFER MODE
}
JOBS +=START-JOB -SCRIPTBLOCK $MyScriptBlock -ARGUMENTLIST $SOURCE,$DESTIBNATION
$JOBS | WAIT-JOB | REMOVE-JOB

Terima kasih kepada Chand dengan sedikit modifikasi: https://stackoverflow.com/users/3705330/chand

MAZDA
sumber
0

Gunakan salin alih-alih xcopy saat menyalin file.

misal salin "bin \ development \ whee.config.example" "TestConnectionExternal \ bin \ Debug \ whee.config"

Peter
sumber
1
Saya mencoba menyalin file ke folder yang sama dengan nama yang berbeda dan xcopy tidak dapat berfungsi. Saya menggunakan copy /Y source destinationuntuk meneruskan konfirmasi timpa.
SandRock
0

Karena Anda tidak benar-benar mengubah nama file, Anda dapat mengambil nama file dari tujuan dan tidak akan ada pertanyaan.

xcopy bin\development\whee.config.example TestConnectionExternal\bin\Debug\  /Y

Pendekatan ini berfungsi dengan baik ketika direktori tujuan dijamin ada, dan ketika sumbernya bisa berupa file atau direktori.

simmo
sumber
1
@ downvoters: Mengapa jawaban ini bisa diturunkan ke bawah? Dalam konteks ini, Debugdirektori mungkin dijamin ada.
Jirka Hanika
4
Respons ini mengatakan "karena Anda tidak benar-benar mengubah nama file", sedangkan pertanyaan aslinya dengan jelas mengatakan "salin file dari satu direktori ke direktori lain DAN RENAME ITU di direktori tujuan". Jadi ini sepertinya tidak relevan dengan topik.
M.Bearden
0

Mengatasi Masalah, gunakan ReName ... dan Beri Nama Cryptic Name, kemudian Ubah Nama menjadi Proper Name

C:

CD "C: \ Users \ Public \ Documents \ My Web Sites \ AngelFire ~ Zoe \"

XCopy / D / I / V / Y "C: \ Users \ Public \ Documents \ My Web Sites \ HostGator ~ ZoeBeans \ cop.htm"

Ren "cop.htm" "christ-our-passover.htm"

JollyChollie
sumber
0

xcopy akan memungkinkan Anda untuk menyalin satu file ke folder tertentu itu hanya tidak akan memungkinkan Anda untuk menentukan nama tujuan. Jika Anda memerlukan nama tujuan, ganti nama saja sebelum Anda menyalinnya.

ren "bin \ development \ whee.config.example" whee.config

xcopy / R / Y "bin \ development \ whee.config" "TestConnectionExternal \ bin \ Debug \"

Chuck Emanuel
sumber
Dengan asumsi ini akan bekerja di lingkungan tertentu (yaitu, ada pasti tidak akan menjadi whee.config di folder sumber), untuk mereplikasi kode OP, tidakkah itu harus menyertakan ganti nama kembali ke nama asli? ren "bin\development\whee.config" whee.config.example
GlennFromIowa
0

Tempatkan tanda bintang (*) di ujung jalur tujuan untuk melewati sengketa D dan F.

Contoh:

xcopy "compressedOutput.xml" "../../Execute Scripts / APIAutomation / Libraries / rerunlastfailedbuild.xml *"

Iqra.
sumber
0

Apakah xxxxxxxxxxxx menentukan nama file atau nama direktori pada target

(F = file, D = directory)? D

if a File : (echo F)
if a Directory (echo D)
Dania al khalil
sumber
0

Saya bertemu masalah yang sama ketika mencoba menyalin file dengan nama baru hanya jika file tidak ada di tujuan atau ada (dengan nama baru), tetapi lebih tua. Solusinya adalah menambahkan *char di akhir nama file tujuan. Contoh:

xcopy "C:\src\whee.config.txt" "C:\dest\bee.config.txt*" /D /Y
Ivan Alexandrov
sumber
Ini bekerja seperti pesona, thx
E.Big
-2

Anda tidak dapat menentukan bahwa itu selalu berupa file. Jika Anda tidak membutuhkan fitur lain dari xcopy, mengapa tidak menggunakan fitur biasa saja copy?

Gabe
sumber
5
Salah satu alasannya adalah copy, sebagai perintah internal, tidak mengatur ErrorLevel. Jika Anda ingin dapat memengaruhi jalur file batch jika terjadi kesalahan penyalinan, Anda perlu menggunakannya XCOPY.
rossmcm
2
Alasan lain adalah jika Anda ingin menggunakan fitur xcopy lainnya, seperti / d
Victoria