Robocopy kök klasörü ve zaman damgasını kopyalamaz


10

Robocopy kök klasörü ve zaman damgasını kopyalamaz - tüm alt dizinleri ve dosyaları kopyalar (uygun seçenekler ayarlandığında) ve Robocopy'ye kök klasörün kendisini ve zaman damgasını veya niteliklerini istediğinizi söyleyen bir seçenek / argüman yok gibi görünüyor aynen kopyalanacak.

Diyelim ki C: / Brushes'ı kopyalamak istiyorum

Robocopy tüm alt dizinlerini ve dosyalarını hedefe kopyalar, ancak Fırçalar klasörünün kendisini değil, ilişkili tüm öznitelikler ve zaman damgasıyla kopyalar.

Ne istediğimi anlıyor musun? Bu oldukça basit ve Robocopy bunun için bir seçenek yok gibi görünüyor. İnsanlar soruyu daha önce çeşitli forumlarda sordular, ancak endişelendiğim kadarıyla kimse soruyu cevaplamadı.

resim açıklamasını buraya girin


1
Bu, deneyimlerime dayanarak bir el ilanı, rsyncancak hedef klasörünüzün sonunda bir eğik çizgi yoksa? GUI kullanmak yerine komut dosyasını komut satırı düzeyinde değiştirmeye ne dersiniz? Komut satırı aracının ihtiyacınız olanı yapacağını biliyorum.

@Randolph West: Şu anda hedef klasörün sonunda bir eğik çizgi yok. Robocopy'nin kaynak klasörü ve özniteliklerini vb. Gerçek kopyalama işine dahil etmesini sağlayamıyorum. Herhangi bir fikir?
ptrcao

Robokopi için bir çözüm yoksa, xxcopy'ye bakabilirsiniz (ücretsiz ve ticari sürümler vardır).
harrymc

Evet, tamamen anlıyorum ve aşağıya çalışan bir çözüm ekledim. Asıl sorun, kopyalamak için kökteki tüm dosya ve klasörleri belirtmeniz gerektiğidir.
opsin

Yanıtlar:


9
robocopy %1 "C:\DestinationDirectory\%~n1" /E /V /DCOPY:T /LOG:"C:\DestinationDirectory\Copied.txt" /R:10 /W:30 

Bir klasöre bırak batveya Gönder öğesinde kullanın . Kaynak dizinin adı ve zaman damgası ile klasör oluşturacak ve tüm dosyaları kopyalayacaktır.


çok teşekkür ederim, o sihirli% ~ n1 operatörünü
arıyordu

@hotzen, Ne yapar %~n1?
Pacerier


Msgstr "% 1'i bir dosya adına genişletir."
hotzen

Microsoft tüm bağlantılarını kırdı, burada toplu iş için yüzde tilde belgeleri var, en.wikibooks.org/wiki/Windows_Batch_Scripting#Percent_tilde
kevinf

3

OP'ye katılıyorum, kök klasörü kopyalayamama, robokopinin büyük bir eksikliği. Fırçalar klasörünü kopyalayıp geçici bir klasöre taşımaya, geçici klasörde robokopi işlemini gerçekleştirmeye ve sonra geri taşımaya ne dersiniz?

Gibi bir şey:

md "c:\verytemporary" && move "c:\brushes" "C:\verytemporary"||( echo Line 1 error occurred & goto :eof )
robocopy c:\verytemporary d:\ /MIR /DCOPY:T
move "c:\verytemporary\brushes" "c:\" && rd /q "c:\verytemporary"||echo Line 3 error occurred

2

md D:\Backup\Brushes && robocopy C:\brushes D:\Backup\BrushesDoğru yolları değiştirerek komut satırından deneyin .


3
Evet, ama orijinal C: \ brush klasörünün niteliklerine sahip olmayacak yeni bir klasör oluşturuyorsunuz ...?
ptrcao

2

Cevapların hiçbirinde iyi ve kolay bir çözüm göremediğim gibi:

Robokopi için bir çözüm yoksa, xxcopy'ye bakabilirsiniz (ücretsiz ve ticari sürümler vardır).

Elbette robokopiye başka alternatifler de var, bazıları burada listeleniyor .
Ayrıca bkz. En İyi Ücretsiz Dosya Kopyalama Yardımcı Programı .


1
xxcopybüyük bir yardımcı programdır, ancak ücretsiz sürümün, komut satırı anahtarlarının büyük bir listesinden herhangi birini kullanıyorsanız yanıt vermeniz gereken bir istemi vardır. Kullanma xxcopyKomut penceresinden, bu ekstra istemi tahriş edicidir. Ancak xxcopybir toplu iş dosyasından kullanımını engeller (karmaşıklaştırır) .
Kevin Fegan

1

user105198'in cevabı yarı yolda,

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes sadece yeni bir klasör oluşturacak. Sen ekleme gerekecektir / MIR ve / T: DCOPY kendisine

İle / mir Hedef dizin varsa seçeneği, hedef dizin güvenlik ayarları üzerine yazılır. Technet

/DCOPY:T :: COPY Directory Timestamps.

bir araya getirildiğinde, kaynak yöneticinin nitelikleri ve zaman damgaları oluşturulan klasöre yansıtılacaktır.

yani:

D:\Backup\Brushes && robocopy C:\brushes D:\Backup\Brushes /MIR /DCOPY:T

1

Klasör zaman damgalarını (/ DCOPY: T) kopyalamasını söylemeniz koşuluyla, Robocopy'nin tam olarak istediğinizi yaptığını düşünüyorum. Deneylerimden, aşağıdaki (görünüşte belgelenmemiş) davranışın Robocopy için doğru olduğunu gördüm:

Hedef dizinin var olup olmamasına, var olmamasına veya kaynak dizinden farklı bir adı olmasına bakılmaksızın, kaynak dizinin belirtilen tüm özellikleri hedef dizine uygulanır.

Belirtilen özellikler (en azından) güvenlik bilgilerini (/ SEC) veya klasör zaman damgalarını (/ DCOPY: T) içerebilir.

Bu nedenle, aşağıdaki örnekte, c: \ destination \ klasörüne c: \ source \ klasörü ile aynı zaman damgaları atanacaktır.

robocopy c:\source\folder C:\destination\folder /E /DCOPY:T

Bunu Windows 7, Windows 8 ve Windows 2003 Kaynak Seti'nde bulunan Robocopy sürümleriyle (yalnızca / SEC parametresi) test ettim. Robocopy'nin (XP026 ve üstü) yalnızca daha yeni sürümlerinin / DCOPY: T parametresini desteklediğini unutmayın.


0

Eğer birleştirirseniz /IF :: Include the following Files.ile /E :: copy subdirectories, including Empty ones.size (yakın) istenen etkiyi elde:

C:\Temp\Robocopy Source Root>robocopy . "C:\Temp\Robocopy Destination" /E /IF "Brushes*"

1
Ne demek "yakın"? Bahsettiğiniz sınırlama nedir?
12'de ptrcao

Tehlike Will Robinson !!! Öneriniz mevcut klasördeki her klasörü kopyalayıp "Fırçalar" ile başlayan klasörlerle sınırlı değil gibi görünüyor
GlennFromIowa

0

Robocopy bunu kolayca yapmak için tasarlanmamıştır. Ancak, bir yolu var.

Kök klasör 50 dosya ve 40 klasör diyelim içerir. Yalnızca X klasörünü istiyorsunuz (ancak bunun zaman ve tarih damgası olmasını da istiyorsunuz).

ROBOCOPY c:\ d:\ /XF 50 root file names c:\boot.ini c:\bla.txt etc. /XD c:\windows c:\drivers c:\temp etc. /S /E /SEC /DCOPY:T

/ DCOPY: T klasör zaman damgalarını tutmasını söyler. / XF hangi dosyaların kopyalanmayacağını, / XD hangi klasörlerin kopyalanmayacağını belirtir. Sadece c: \ X klasörünü belirtmeyin.

Bunun en büyük dezavantajı, kökteki tüm klasörleri ve dosya adlarını araştırmak ve özellikle hepsini buraya çağırmaktır. Bunu farklı sistemlerde çok yapıyorsanız bir senaryo yazılabilir.

Çalışma Örneği

robocopy c: \ test c: \ abc / XF c: \ testing \ Testing.txt / XD "C: \ test \ Yeni Klasör (2)" "C: \ test \ Yeni Klasör (3)" / S / E / SEC / DCOPY: T

Kök Çalışma Örneği

robocopy c: \ d: \ / XF c: \ Testing.txt / XD "C: \ Yeni Klasör (2)" "C: \ Yeni Klasör (3)" / S / E / SEC / DCOPY: T

Testim çalıştı, birkaç klasör ve alt klasör oluşturdum, bu durumda c: \ test kökü, c: \ abc başka bir sürücünün kökü idi (açıkçası gerçekten değiller, ancak bu amaçla mantıklı olmalı). Kökten istediğim klasöre "Yeni Klasör" adı verildi, çünkü / XD'de belirtmediğimi görebilirsiniz. Ayrıca, c: \ 'yi belirttiğinizden emin olun, aksi takdirde kullandığınız adlar genel olacaktır. Başka bir deyişle, Testing.txt dosyasından c: \ testing belirtmediysem, kopyalanan alt klasörlerin TÜMÜNDEN atlar. / SEC tüm dosya güvenliğini ve zaman damgalarını kopyalar.


Hmmm, tüm kök dosyaları hariç tutmak için / XF c: *. * Kullanabilirsiniz. Bunu bir makinenin önünde olduğumda ve telefonda olmadığımda test edeceğim.
opsin

Hayır, c: *. * Geçersiz, tüm dosyaları manuel olarak listelemeniz gerekecek.
Opsin

0

Teorik olarak, kullanmak /DCOPY:Ttüm sorunlarınızı çözmelidir.

Ancak, bunun olduğunu gördüm ve buna "hata" diyeceğimden emin değilim, daha ziyade işlem dizisinin bir sonucu (Tamam, hata).

Bu komut tüm dosyaları kopyalamak için çalışmalıdır C:\Brushesiçin D:\NEWBrushesve /DCOPY:Tkaynak klasörün damgaları hedef klasöre kopyalanacak neden olmalıdır:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

Gördüğüm şey (en azından bazı Robocopy sürümlerinde) komutun başarılı olması, ancak D:\NEWBrushesklasörün zaman damgasının geçerli tarih ve saate ayarlanmış olmasıdır.

Dolayısıyla, /DCOPY:Tözellik kopyaladığınız "temel" (en üstteki) klasör için çalışmıyor gibi görünüyor .

Çalıştığına inanıyorum, ancak hedef klasörün zaman damgasının daha sonra işlem sırasında yer alan işlemler tarafından "üzerine basıldığını" düşünüyorum.

Bu komut için olduğuna inandığım şey:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

şuna benzer:

  1. D:\NEWBrushesZaten mevcut değilse klasör oluştur
  2. Dan damgası Kopya C:\BrushesiçinD:\NEWBrushes
  3. Dosyaları ve alt klasörleri C:\Brushes-D:\NEWBrushes

Adım 3'te, klasör içeriğinin değiştirilmesi D:\NEWBrusheszaman damgasının D:\NEWBrushesdeğişmesine neden olduğu görülmektedir .

Benim için "geçici çözüm" robocopydosyaları ve klasörleri kopyalama komutunu çalıştırmak, sonra (aynı) robocopykomutunu ikinci kez çalıştırmak oldu.

İlk çalıştırdığınızda:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T

tüm dosyalar ve klasörler kopyalanacaktır. Sonra tekrar çalıştırın:

robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T
  (or)
robocopy "C:\Brushes" "D:\NEWBrushes" /DCOPY:T

İkinci kez robocopyçalıştığında, içinde hiçbir dosya veya klasörler D:\NEWBrushesmodifiye edilecek ve /DCOPY:Tseçenek söyleyecektir robocopygelen zaman damgası kopyalamak C:\Brushesiçin D:\NEWBrushes(klasörler / dosyalar halinde olmadığı sürece C:\Brushesbunun ilk çalıştırma sonra değişmiş robocopy).


-1

Robocopy ile gerçekten hızlı ve kolay bir yedekleme komut dosyası için şu anda kök klasörleri çözüyordum, bir örnek var. Herkese yardım etmeli:

$Destination="F:\Backup" #change destionation backup drive and foder
$BackupDirs="d:\folder1", "d:\folder2", "d:\folder3\subfolder", "d:\fodler4\subfolder\subsubfodler" #change source folders

#make a loop for every source folder
foreach ($Backup in $BackupDirs) {

#split folder name
$fdname = Split-Path $Backup -leaf

#define folder to create in destionation
$dirtocreate = Join-Path $Destination $fdname

#make directory, yes, some extra script to skip when exist should be in place, but -erroraction solved this in lazy mode :)
md $dirtocreate -ErrorAction SilentlyContinue 

#copy with subfolders and log
robocopy $backup $dirtocreate  /s /nfl /ndl /log:c:\scripts\backup.log

}

Bu PowerScript'i kullanın ve sorun çözüldü, değil mi?
Pezevenk Suyu BT
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.