xcopy dosyası, yeniden adlandır, baskılama “xxx bir dosya adı belirtiyor mu…” mesajı


404

Bu oldukça basit görünüyor ve belki de sadece uygun bayrağa bakıyorum, ama bir komutta bir dosyayı bir dizinden diğerine nasıl kopyalarım ve hedef dizinde nasıl yeniden adlandırırım? İşte benim emrim:

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"

Bana her seferinde şunları soruyor:

TestConnectionExternal \ bin \ Debug \ whee.config, hedefte bir dosya adı veya dizin adı belirtir mi (F = dosya, D = dizin)?

Bu istemi bastırmak istiyorum; cevap her zaman F.


15
echo f | xcopy ...
Cyclion

kopya istediğini yaparsa neden xcopy kullanıyorsun
barlop 15:18 '

3
Miscrosoft : "Kullanıcılarınız için kafa karıştırıcı hale getirdiğinizde neden basit bir şey yapıyorsunuz?". Bu sadece Linux dünyasında yapılanları cpkopyalamaları, etrafındaki dosyaları / dizinleri kopyalamak için hiçbir şeye bakmamaları gereken zamandır !
fduff


BATCH dosyasındaki cevabımı okumanızı , komut isteminin ne zaman gösterildiğini ve bir toplu iş dosyası OS dilinden bağımsız olarak nasıl otomatik olarak cevaplanabileceğini ayrıntılı olarak açıklayan dosya veya klasör sormanızı öneririm .
Mofi

Yanıtlar:


217

Kullanmayın xcopy, copybunun yerine kullanın, bu sorunu yoktur.

xcopygenellikle birden çok dosya / klasörün özyinelemeli kopyalarını gerçekleştirirken veya sunduğu doğrulama / yönlendirme özelliklerine ihtiyacınız olduğunda kullanılır. Tek dosya kopyaları için, copykomut gayet iyi çalışır.


97
copyhedefin tüm dizin yapısı zaten yoksa dosyayı kopyalamaz. xcopygerekli tüm dizinleri otomatik olarak oluşturur.
BQ.

41
Bu var şaşırtıcı xcopy bu ihmali olduğunu. Basitçe dizinler (/ I) için olduğu gibi dosyalar için bir seçenek olsaydı, bu çözülür ve xcopy kopya için harika bir yedek olabilir. Bunun yerine, bu kusur nedeniyle, bu durumlar için kopya seçmelisiniz.
rocketmonkeys

35
Diğerlerinin de belirttiği gibi, @ Arnshea'nın cevabı doğru. Bunun nedeni, a) OP'nin dizin yapısını halihazırda yerinde bulundurma özel durumunun bu soruda belirtilmemiş olması ve b) bu ​​sorunun gelecekteki okurları için buraya xcopydeğil, copy.
Mike Nakis

17
Peki @ Amshea'nın yanıtı da doğrudur çünkü soru xcopy'ye özgüdür ve bu cevap temelde "xcopy kullanma" dır. Xcopy ile ilgili soruya gerçekten cevap vermiyor, şimdi değil mi?
BrainSlugs83

9
Hedef için yolun sonuna bir yıldız ekleyin. Aşağıdaki cevaba bakınız. stackoverflow.com/a/26034267/1231
Donny V.

638

kullanırım

echo f | xcopy /f /y srcfile destfile

etrafta dolaşmak için.


17
@Arnshea - teşekkürler! Sessiz dizin kopyası için uyarlanmışecho d | xcopy srcdirectory destdirectory /S
Dr. ABT

8
+1 @Arnshea tam olarak orada ne yaptığını anlamak için biraz zaman aldı ve ben bir Alman windows kurulum üzerinde çalışıyorum beri echo d | xcopy ...benim için. Sen harikasın
Thomas

23
Xcopy'nin soracağı soruya bir kullanıcı yanıtı taklit ediyor.
John Munsch

5
@Thomas Bu tekniği kullanan bir toplu iş dosyasının farklı yerel ayarlarda taşınabilir olmayacağı anlamına mı geliyor?
Max Nanasy

17
@MaxNanasy Bunun yerel ayarlar arasında taşınabilir olmadığını doğruladım. Almanca kurulumunda, bir dosya için D veya bir dizin için V iletirsiniz. :(
Matt

177

Başka bir seçenek de hedef joker karakter kullanmaktır. Bunun yalnızca kaynak ve hedef dosya adları aynı olacaksa işe yaradığını unutmayın, bu nedenle OP'nin belirli örneğini çözmezken, paylaşmaya değer olduğunu düşündüm.

Örneğin:

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

dosya veya dizin sormadan hedef dizinde "whee.config.example" dosyasının bir kopyasını oluşturur.

Güncelleme : @chapluck tarafından belirtildiği gibi:

Değişebilirsin "* "için "[newFileName].*". Dosya uzantısını devam ettirir, ancak yeniden adlandırmaya izin verir. Veya daha hacky: "[newFileName].[newExt]*"uzantıyı değiştirmek için


1
"Yankı f |" yol serin, ama bu ilk etapta sorunları bulmak için sık sık aradığım ekstra çıktıyı önler.
Richard Anthony Hein

6
@ Durden81 - zippycoder'ın işaret ettiği gibi, yanıtları OP'nin bir gereği olan dosyayı yeniden adlandırmaz.
Polyfun

6
Cevabı genişletmek için "*", "[newFileName]. *" Olarak değiştiririm. Dosya uzantısını devam ettirir, ancak yeniden adlandırmaya izin verir. Veya daha hacky: "[newFileName]. * [NewExt]" uzantısını değiştirmek için.
chapluck

Teşekkürler! Güncelleme bölümü, uzantıyı korurken ve dosya olduğunu varsayarak dosya adının değiştirilmesi gereken sorunumu çözdü. XCopy buna bir anahtar olarak sahip olmalıydı.
Stanislav

1
Sonunda yıldız işareti olmadan benim için çalıştı, sadece ters eğik çizgi.
tivnet

91

XCOPY'de bir çeşit belgelenmemiş özellik var. kullanabilirsiniz:

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

Sadece bugün test ettim. :-)


4
Çok teşekkürler. Hedef dosyanın sonuna "*" ekledim ve işe yaradı .. :) Hüner için +1
Rahul Patel

2
Mükemmel çözüm - temiz, zarif, mevcut xcopy bayrakları ile uyumlu farklı bir komut kullanmaz, kusursuz çalışır. Bu en çok oy alan cevap olmalı.
Brian Swift

7
Yanıt yanlış, komut eşleşmelerden whee.config.exampledolayı hedef klasörle sonuçlanacaktır . whee.config*whee.config.example
Miyav

2
Az önce bir dosya oluşturdum b.txtxtve sonra komutu başlattım xcopy a.txt b.txt* /F /Yve dosya beklendiği gibi a.txtkopyalandı b.txt. Bunun da /F /Yötesinde, anahtarları kullanırken gerçek kopya ekranda tam olarak beklendiği gibi gösterilir.
Dominique

1
@Meow: hayır, joker karakter kaynakta değil hedefte bulunduğundan.
ienaxxx

74

Http://technet.microsoft.com/en-us/library/bb491035.aspx adresine gitmeniz yeterlidir.

ANA SAYI şudur "... Hedef varolan bir dizini içermiyorsa ve ters eğik çizgi () ile bitmiyorsa , aşağıdaki mesaj görüntülenir: ...

Hedef, hedefte bir dosya adı veya dizin adı belirtiyor mu (F = dosya, D = dizin)?

Kaynak, birden fazla dosya veya dizinse, xcopy komutunun hedefin bir dizin olduğunu varsaymasına neden olan / i komut satırı seçeneğini kullanarak bu iletiyi bastırabilirsiniz.

Bana biraz zaman aldı, ama tek gereken RTFM.


7
Bu en iyi cevap olmalı! Sadece diğerleri için gerçekten açık olmak. ONE dosyasını bir yerden başka bir yere kopyalıyorsanız VE tam dizin yapısının oluşturulmasını istiyorsanız, aşağıdaki komutu kullanın: xcopy / "C: \ Data \ Images \ 2013 \ 08 \ 12 \ 85e4a707-2672-481b-92fb -67ecff20c96b.jpg "" C: \ Hedef Veriler \\ Görseller \ 2013 \ 08 \ 12 \ 85e4a707-2672-481b-92fb-67ecff20c96b.jpg \ ". Evet, dosya adının sonuna ters eğik çizgi koyun!
adudley

4
İyi cevap, ama sorunu çözmez. Xcopy hello.txt hello2 \ 'yi denedim. İstem yok. Şimdi xcopy hello.txt hello3 (ters eğik çizgi olmadan) deneyin. Dest dosya veya dir olup olmadığını soruyor. Bir komut dosyasında F veya D varsaymak için söylemek için bir yol gerekir.
RuntimeException

27
Bu çok garip bir cevap, özellikle upvotes, yararsız "RTFM" snark ve "popüler" cevaplar aşağı koyarak yorumları ... çünkü orijinal soruyu ele! Orijinal soru açıkça bir dosyayı "bir dizinden diğerine kopyala VE hedef dizinde yeniden adlandır" dedi. Yukarıda verilen denemenin cevabı, dosyayı hedef dosya adı ile kaynak dosya olarak AYNI ad olarak kopyalamanın farklı durumunu ele almaktadır. @Arnshea tarafından verilen "dağınık" geçici çözüm burada gördüğüm tek adımlı yanıttır - dolayısıyla "popülaritesi".
M.Bearden

3
Bay Bearden oldukça kibardı, ancak yukarı oyların sayısı göz önüne alındığında, bu cevaptaki sorunları açıkça listeleme ihtiyacını hissediyorum: 1) OP sorununa bir çözüm veriyor gibi görünen 1 paragraf (paragraf 4/5), yok değil OP kopyalama, çünkü çalışmak ve yeniden adlandırma bir dosya , değil bir dizin; 2) yok cevabın üstünde verilen bağlantı değil bir çözüm sağlamak; 3) ana meselenin açıklaması OP'nin sorusu için geçerli değildir ; ve 4) cevap rahatsız edici, 2. paragrafta bağırmak ve sonda hakaret etmek. Belki de Soruyu yeniden okumalıydı.
GlennFromIowa

2
Burada verilen tüm cevap, bir dizine kopyalamaktır, mümkün ve belgelenmemiş bir dosya hedefine kopyalamak değil, zippycoder, chapluck, LBushkin
pdem

27

Yani, bunun için basit bir düzeltme var. Kuşkusuz garip ama işe yarıyor. xcopy, yeni dosya (dosya adı) zaten varsa, hedefin bir dizin veya dosya olup olmadığını öğrenmek istemez. Xcopy komutunuzdan önce yeni dosya adına basit bir yankı eklerseniz, boş dosyanın üzerine yazılır. Misal

echo.>newfile.txt
xcopy oldfile.txt newfile.txt /Y

6

Bu Faturalar cevabından.

Sadece diğerleri için gerçekten açık olmak.

ONE dosyasını bir yerden başka bir yere kopyalıyorsanız VE tam dizin yapısının oluşturulmasını istiyorsanız, aşağıdaki komutu kullanın:

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\" 

Evet, dosya adının sonuna ters eğik çizgi koyun ve dosya veya dizin olup olmadığını sormaz. Kaynakta yalnızca BİR dosya olduğundan, bunun bir dosya olduğunu varsayar.


12
Bu yanlış. "Xcopy versionBase.txt asd \ versionBase.txt \" çalıştırıldığında ve asd dizini mevcut olmadığında, asd \ versionBase.txt \ versionBase.txt dosyasını alıyorum.
Cristian Niculescu

1
Bu sayfadaki diğer cevaplarda olduğu gibi, bu yazı orijinal soruyu ele almıyor. Soru, bir dosyanın nasıl kopyalanacağı ve yeniden adlandırılacağı (bir adımda) idi. Görünüşte şaşkın diğer cevaplarda olduğu gibi, bu, yeniden adlandırma OLMADAN dosyanın nasıl kopyalanacağı hakkında konuşuyor.
M.Bearden

Bir klasör değil, bu adla gerçekten bir dizin oluşturduğu gerçeğinden bahsetmiyorum bile . Test edin ve daha sonra bir dir "C:\Target Data\\Images\2013\08\12" 09/25/2015 10:48 AM <DIR> 85e4a707-2672-481b-92fb-67ecff20c96b.jpg
direk

3

xcopy src dest /I

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


2

Benzer bir sorunum vardı ve yorumları bastırmak ve farklı bir hedef dosya adı kullanmak istediğim için hem robokopi hem de xcopy yardımcı olmadı. buldum

type filename.txt > destfolder\destfilename.txt

benim ihtiyaçlarına göre çalışma.


2

Orijinal soruya geri dön:

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

iki komutla yapılabilir, örneğin:

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

Hedef dosyanın yoluna yalnızca "\ .." eklenerek, hedef dizin zaten yoksa oluşturulur. Bu durumda

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

var olmayan dizinin üst dizini olan

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

En azından WIN7 mkdir için dizinin

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

gerçekten var.


Dizin yoksa ilginç bir düzeltme. Ne yazık ki, sonraki satır (testlerimde) hala kullanıcıya soruyor.
GlennFromIowa

Haklısın xcopy "bin \ development \ whee.config.example" "c: \ mybackup \ TestConnectionExternal \ bin \ Debug \ whee.config \" olmalıdır. Yaklaşımımı dosyaları varolmayan bir dirotory'ye kopyalamak için kullandım. Yeniden adlandırma için sonunda bir ters eğik çizgi eklenmelidir.
grenix

2

Hedefte var olan ya da olmayan dosyaları kopyalamak için hedefin sonunda * bulunan XCOPY Hedefte bulunan ya da bulunmayan klasörleri ve içerikleri kopyalamak için hedefin sonunda bulunan * ile XCOPY

alternatif olarak

RoboForm KAYNAK DEST DOSYA dosyaları için


1

Veya robocopyyerine öneririm . Komut olarak veya istemcilerde veya sunucularda GUI'de kullanılır. Ağ duraklamalarına toleranslıdır ve kopyayı dosya özelliklerine göre kopyalarken dosya niteliklerini yok saymayı seçebilirsiniz. Oh, ve çok çekirdekli makineleri destekler, böylece dosyalar birbiri ardına yerine "paralel" olarak çok daha hızlı kopyalanır. MS TechNet'te bulunabilir.copyxcopyrobocopy


2
Her zaman robokopi kullanıyorum. Ancak, bu posterin sorusu için dosyaları yeniden adlandıramayacağı için çalışmaz. Bugün daha önce bilmediğim bir şey, xcopy'nin ağ duraklamalarına toleranslı bir / z anahtarına sahip olmasıdır!
GlennFromIowa

1

Yalnızca dosyayı kopyalamak ve hedefte adını değiştirmek istiyorsanız yapılacak doğru şey:

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

Ve iyi çalışacak


1

Büyük dosyaları çoğaltmak için / J anahtarlı xopy iyi bir seçimdir. Bu durumda, dosya için bir F veya dizin için bir D ekleyin. Ayrıca, ileride başvurmak üzere işleri bir diziye kaydedebilirsiniz. Örneğin:

$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

Biraz değişiklik yapan Chand sayesinde: https://stackoverflow.com/users/3705330/chand


0

Dosyaları kopyalarken xcopy yerine copy kullanın.

örneğin "bin \ development \ whee.config.example" "TestConnectionExternal \ bin \ Debug \ whee.config" dosyasını kopyalayın


1
Bir dosyayı farklı bir adla aynı klasöre kopyalamaya çalışıyorum ve xcopy çalışamıyor. copy /Y source destinationÜzerine yazma onayını iletmek için kullanıyorum .
SandRock

0

Gerçekte dosya adını değiştirmediğiniz için, dosya adını hedeften çıkarabilirsiniz ve soru kalmaz.

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

Bu yaklaşım, hedef dizinin varolduğu garanti edildiğinde ve kaynak eşit derecede bir dosya veya dizin olabiliyorsa iyi çalışır.


1
@downvoters: Bu cevap neden reddedilmiş olabilir? Bu bağlamda, Debugdizinin büyük olasılıkla varolduğu garanti edilir.
Jirka Hanika

4
Bu yanıt, "gerçekte dosya adını değiştirmediğiniz için" yazarken, orijinal soru "dosyayı bir dizinden diğerine kopyala VE hedef dizinde IT RENAME" dedi. Yani bu konu ile alakasız görünüyor.
M.Bearden

0

Üste Çözüm, ReName kullanın ... ve bazı şifreli ad adlandırın, sonra doğru adıyla yeniden adlandırın.

C:

CD "C: \ Kullanıcılar \ Herkese Açık \ Belgeler \ Web Sitelerim \ AngelFire ~ Zoe \"

XCopy / D / I / V / Y "C: \ Kullanıcılar \ Genel \ Belgeler \ Web Sitelerim \ HostGator ~ ZoeBeans \ cop.htm"

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


0

xcopy tek bir dosyayı belirli bir klasöre kopyalamanıza izin verir, sadece bir hedef adı tanımlamanıza izin vermez. Hedef adına ihtiyacınız varsa, kopyalamadan önce yeniden adlandırın.

ren "bin \ development \ whee.config.example" Instagram Hesabındaki Resim ve Videoları whee.config

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


Bunun belirli bir ortamda işe yarayacağını varsayarsak (yani, kaynak klasörde hiçbir zaman whee.config olmayacağından emin olabilirsiniz), OP kodunu çoğaltmak için, orijinal isme geri bir yeniden adlandırma içermemelidir? ren "bin\development\whee.config" whee.config.example
GlennFromIowa

0

D ve F anlaşmazlığını atlamak için hedef yolun sonuna bir yıldız işareti (*) koyun.

Misal:

xcopy "compressedOutput.xml" "../../Mükemmel Komut Dosyaları / APIAutomation / Kütüphaneler / rerunlastfailedbuild.xml *"


0

Xxxxxxxxxxxx hedefte bir dosya adı veya dizin adı belirtir mi

(F = file, D = directory)? D

if a File : (echo F)
if a Directory (echo D)

0

Yalnızca hedefte dosya yoksa veya (yeni adla), ancak eski ise, yeni adla dosya kopyalamaya çalıştığınızda aynı sorunla karşılaştım. Çözüm, *hedef dosya adının sonuna karakter eklemektir . Misal:

xcopy "C:\src\whee.config.txt" "C:\dest\bee.config.txt*" /D /Y

Bir cazibe gibi çalışıyor, thx
E.Big

-2

Her zaman bir dosya olduğunu belirtemezsiniz. Xcopy'nin diğer özelliklerine ihtiyacınız yoksa, neden sadece düzenli kullanmıyorsunuz copy?


5
Bunun bir nedeni, copydahili bir komut olmanın ErrorLevel ayarlamamasıdır. Bir kopyalama hatası oluşursa bir toplu iş dosyasının yolunu etkileyebilmek istiyorsanız, kullanmanız gerekir XCOPY.
Rossmcm

2
Başka bir neden, xcopy gibi diğer özellikleri kullanmak istiyorsanız, / d
Victoria
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.