Dizinin tamamını (dizin klasörü dahil) başka bir dizine kopyalamak için komut satırı komutu


68

komut satırını kullanarak bir dizini diğerine kopyalamak istiyorum. Örneğin, dizin var C:/testve C:/test2.

Ben copy istediğiniz C:/testiçine C:/test2sonuç olacak şekildeC:/test2/test

Her şey şimdiye kadar sadece içerdiği dosya ve klasörleri kopyalar bulduk C:/testINTO C:/test2, ama üst dizini dışarıda bırakır.


1
xcopy kullanmaya çalışın

Yanıtlar:


50

Kullanmayı deneyin XCOPYile /Eanahtarı. Daha fazla bilgi burada .

Bu bilgilere beynimden yıllardır erişemedim !

GÜNCELLEME

Dokümantasyon oluşturmak zorunda kalacak, böylece kaynak dizinden halinin kopyası tüm dosyaları ve alt dizinleri, (üst dizin oluşturulmaz yani) diyor testiçinde C:\test2birinci ve ardından kullanmak XCOPY.


2
Xcopy üzerindeki '/ T' anahtarı, herhangi bir dosya içermeyen bir dizin ve alt dizin yapısını kopyalar.
mfg

2
robocopy /CREATE /COPYALL /DCOPY:T src dstYalnızca klasörü kopyalamak ve dosyaları boşaltmak, ancak tüm zaman damgalarını ve diğer özellikleri korumak için daha iyi bir kullanım .
user1016274 22:15

2
Bu aslında soruyu cevaplamıyor çünkü klasör testhala oluşturuluyor.
IGRACH

3
@ RGRACH Düşündüm md testve sonra kullanmak xcopyçok açıktı.
vivin

1
Aslında soru, copyklasörün yeni klasör oluşturmaması ve ardından içeriğin kopyalanması ile ilgilidir.
IGRACH

35
xcopy c:\test c:\test2\test /s /e /h

İşte XCOPY hakkında bilgi [ 1 , 2 ]


2
Benden "D" girmemi istemeyi nasıl durdurabilirim?
YumYumYum

2
@YumYumYum: / I anahtarını kullanabilirsiniz: "/ I Hedef mevcut değilse ve birden fazla dosya kopyalanıyorsa, hedefin bir dizin olması gerektiğini varsayar."
Thijs Tijsma

18

Yedekleme komut dosyaları oluşturuyorsanız ROBOCOPY kullanın. xcopy kullanımdan kaldırılmıştır ve yakın bir gelecekte kullanım dışı bırakılacaktır. robocopy, xcopy'nin yapabileceği her şeyi yapabilir. Aynı zamanda daha esnek ve güvenilirdir. Robocopy ile senaryolar oluşturmak onları daha sonra kanıtlayacak.


  1. Klasörleri kolayca kopyalamak için robokopi kullanın. Robocopy komutu, xcopy komutunun yerine geçiyor. İçeriği tanımlamak için endişelenmenize gerek kalmadan hızlı bir şekilde tüm klasörleri kopyalayabilir. Örneğin, C: \ tools dizininin tüm içeriğini D: \ backup \ tools yeni klasörüne kopyalamak için aşağıdakileri girin:

    robocopy C:\tools D:\backup\tools /e
    

    / E değiştiricisi, robokopiye tüm alt dizinleri içermesini söyler. Bu boş klasörler içerir. robokopi gizli ve sistem dosyalarını otomatik olarak kopyalar. Hedef konumda yoksa, yeni dizinler oluşturur.

  2. Bir dizini yansıt. Bir dizini yansıtmak, yedekleme yapmak için mükemmeldir. Robocopy'nin ayna seçeneği, tüm içerikleri kaynaktan hedefe kopyalayacaktır. Daha sonra hedefteki kaynağında olmayan herhangi bir şeyi silecektir. Bu, yedeklemenizin yalnızca dosyalarınızın en son sürümlerine sahip olmasını sağlar. Örneğin, C: \ Kullanıcılar \ Belgelerim'i D: \ yedekleme \ Belgelerim'e yansıtmak için aşağıdakini girin: [4]

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /mir
    

    Bu işlev orijinal dosyaların tüm izinlerini koruyacaktır.

  3. Yeniden başlatmayı etkinleştir. Bağlantının kopyasının ortasında kesilmesi durumunda işlemi yeniden başlatma özelliğini dahil etmek isteyebilirsiniz.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /z
    
  4. Kopyalama işlemini günlüğe kaydedin. robocopy, bir günlük dosyası oluşturmanıza olanak sağlar. Bu, sorunları belirlemenize veya kopyalananın arşivini oluşturmanıza yardımcı olabilir.

    robocopy "C:\Users\My Documents" "D:\backup\My Documents" /log+:<filename>.txt
    

    / Log + değiştiricisi, üzerine yazmak yerine mevcut günlük dosyasını ekler. Eski günlük dosyasının üzerine yazmayı tercih ederseniz, /log:.txt dosyasını kullanın.


8

Ben tavsiye Robocopy'nin üzerinde xcopy ben gerekli bulmak bozulmamış tutarak zaman damgaları dahil çok daha fazla seçeneğe sahip olması gibi.

Robocopy'nin XP / 2003'te eklenmesi gerekiyor, ancak Vista'dan itibaren standart.

Aslında, genellikle xxcopy kullanıyorum , ancak 64 bit sürümü ücretsiz değil.


1
robocopybir Windows programıdır. Soru DOS ile ilgiliydi.
Grawity

9
@grawity: Aslında 16-bit DOS kullanması olasılığı, gerçek dünyada olduğu gibi CMD 'DOS' olarak adlandırılma olasılığı yüksek olmasına kıyasla çok küçük.
paradroid

Asıl soru şudur: robokopi Microsoft programı mıdır?
8'de bitti

@knocte evet öyle
yossico


3

Asıl soru, aradığım cevap ise, o zaman ben ve yukarıda açık bir şekilde hiç kimse açık bir çözüm üretmedi.

Aradığım şey, tekrar yazmak zorunda kalmadan test dizinini test2 klasörüne kopyalamak. Gibi bir şey

xcopy /isvy c:\test d:\test2

nerede d:\test2\testkopya önce var olmayan ama sonra yok. Bu, hedef yolda ikinci kez yapılan yanlış yazma testinde tasarruf sağlayacaktır. Yukarıdaki komut tüm dosyaları ve tüm dizinleri test2'ye kopyalar ancak test dizini oluşturmaz.

Şimdiye kadar

xcopy /isvy c:\test d:\test2\test

bu işi halletmenin tek yolu bu. Yine, yazım sorunlarınız varsa, kaynak ve hedef dizinlerinin eşleşeceği garantisi yoktur.

Bunu düzeltmek için bir alternatif

set mydir=test&&xcopy /isvy c:\%mydir% c:\test2\%mydir%

Bu, mydirdeğişkendeki hedef dizini ayarlar ve sonra bu değişkeni hem kaynak hem de hedef yolunda kullanır. Yanlış değişkeni yazarsanız, bir hata alırsınız veya hedef dizinde muhtemelen %başlangıç ​​ve bitiş bulunur.

Yazmak daha uzun ancak yanlış adlar alma şansınız azalıyor. Dikkat çekecekler.


Aslında bu xcopy /ievy c:\test d:\test2\testdizin ağaç yapısını korumak ve te set mydir=test&xcopy /isvy c:\%mydir% c:\test2\%mydir%sadece 1 & yeterli olacaktır, bir değeri ayarlayarak sonucu her zaman başarılı olduğundan.
NetwOrchestration

0
xcopy SWITCHES SOURCE DESTINATION

Nerede SWITCHESolabilir:

  • Tüm dizin yapısını kopyalamak için:

    /hiev

  • Hedefteki dosyaların üzerine yazmak için (hedef klasör zaten varsa):

    /hievry

  • Üzerine yazmak ve ACL + Özniteliği ile de kopyalamak için:

    /hievxok

Davanıza en uygun:

xcopy /hievry C:\test C:\test2\test


0

Klasör adları da dahil olmak üzere bir dizi klasörü bir hedef konuma kopyalamam gerektiği ve cevaplanmış olarak işaretlenmiş bu sorunun yardımcı olacağını umduğum benzer bir durum vardı.

Öncelikle, kesinlikle bu yeteneğe ihtiyaç duyacağımız durumlar var ve klasörleri C: \ Windows \ Assembly \ GAC_MSIL'den kopyalamak zorunda kaldığımda bunlarla karşılaştım. Windows Gezgini bu klasörü göstermeyi reddettiği için, komut istemini kullanmanız gerekir.

GAC klasörünü biliyorsanız, klasör adlarının önemsiz olduğunu ve yanlış yazarsanız yanlış yapmanın kolay olduğunu bilirsiniz.

Bu yüzden, dizini önceden oluşturmak gerçekten bir seçenek değildir - bir senaryo kullanmadığınız sürece - kullanmamın sonunda, tek gerçek çözüm budur.

Öncelikle, geçici bir dosyaya kopyalamak istediğiniz klasörleri boşaltın, bu genellikle bazı desenleri temel alır.

dir /B policy* > Folders.txt

Ardından, dökümdeki girişlerin üzerine gelin ve hedefe kopyalayın. Eğer hedef argümanı ters eğik çizgiyle (\) sonlandırırsanız, Xcopy bir klasör yaratmaya özen gösterir.

for /F "tokens=*" %%A in (Folders.txt) do xcopy /E /S %%A C:\Dest\%%A\

Her iki komutu da bir toplu iş dosyasına yerleştirin ve çalıştırın.

Şimdi eğer sadece xcopy veya robocopy varsa bu yerleşiktir.


0

XCOPY SourceDrive: Hedef Sürücü: / S / E


Süper Kullanıcıya Hoşgeldiniz! Bunu açıklayabilir misin? (özellikle /S /Ebayraklar)
bertieb

0

Sorunuz için işlevsel bir alternatif cevaba ulaştım.

Birincisi, kullanma FORFILESile /Sparametre, her alt dizin o sağladığını C:\testulaşılacaktır.

İkincisi, /Cparametreyle, hedefte aynı dizinleri oluşturmayı mümkün kılan yerel değişkenlerle bir komut zinciri başlatmak mümkündür ve ardından iki koşullu yapı kullanarak dosyaları içlerine kopyalar.

İlk koşullu yapı @isdir==TRUE(büyük harfleri kullandığınızdan emin olun), dizinleri yalnızca kaynaktan almayı, ardından MKDIR [path]\@relpathsonunda kaderinde oluşturmayı sağlar .

Son olarak, ikincisi sadece dosyalarla çalıştığından emin olur @isdir==FALSEve sonra COPY komutu [path]@relpath, sadece oluşturulan dizinlere dosyaları kopyalamak için hedef olarak ayarlayarak, FORFILES komutuyla ulaşılan tüm dosyalara ulaşılmasını sağlar .

forfiles /s /c " cmd /c ( if @isdir==TRUE mkdir C:\test\@relpath ) && ( if @isdir==FALSE copy @file C:\test2\@relpath)"

Buradaki herkese yardımcı olacağını umuyorum.


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.